TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2640R2L: 用CCS进行开发时,编译生成的.cinit的疑惑

Part Number:CC2640R2LOther Parts Discussed in Thread:CC2640

用CCS编译程序后 view->Memory Allocation查看编译后的数据存放,发现定义的数组放入.data段的同时,也会被放入.cinit段,而.cinit段是会放到flash中去的。由此产生的问题是,定义数组会挤占flash空间,本来flash就不是很充足,数组稍微定义大一点,编译就通不过。定义一个数组而已,想不明白为什么要存到flash里面去呢?有没有办法定义的数组不放.cinit中?

Kevin Qiu1:

.cinit段是初始化全局变量的,const数组是存在flash中的,其他数组存在RAM中

数组的初始值一般存在flash中,运行时加载到ram当中

,

Nick Yao:

您好!现在的情况是,定义一个普通的数组,并且不初始化它,它一样会被放入.cinit段占用一部分flash.

我测试过用Keil编译STM32的程序,定义一个数组不会占用flash.

请问这是CCS编译器问题还是CC2640必须要这样?

,

Kevin Qiu1:

只定义应该不会占用flash,我在empty定义了一个数组,cinit段内存没有增加

你看下是不是其他部分占用的

,

Nick Yao:

.cinit变化.docx请您看一下这个文档。

,

Kevin Qiu1:

/**======== empty.c ========*//* For usleep() */
#include <unistd.h>
#include <stdint.h>
#include <stddef.h>/* Driver Header files */
#include <ti/drivers/GPIO.h>
// #include <ti/drivers/I2C.h>
// #include <ti/drivers/SPI.h>
// #include <ti/drivers/UART.h>
// #include <ti/drivers/Watchdog.h>/* Board Header file */
#include "Board.h"uint8_t Array[1024]={0xef,0xff,0x32};uint8_t t;
/**======== mainThread ========*/
void *mainThread(void *arg0)
{/* 1 second delay */uint32_t time = 1;/* Call driver init functions */GPIO_init();// I2C_init();// SPI_init();// UART_init();// Watchdog_init();t=Array[1];/* Configure the LED pin */GPIO_setConfig(Board_GPIO_LED0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);/* Turn on user LED */GPIO_write(Board_GPIO_LED0, Board_GPIO_LED_ON);while (1) {sleep(time);GPIO_toggle(Board_GPIO_LED0);}
}

我在empty例程中定义了数组,初始化后再调用,添加数组前后cinit段没有变化:

,

Nick Yao:

您好,那请问我的工程问题出在哪里呢?是工程配置问题吗?还是CCS版本问题?我用的CCS 10.1.1,导入的是SimplePeripheral例程。我试过重新导入这个例程,效果也一样。

,

Kevin Qiu1:

尝试初始化以后调用看下会有什么变化

如果还有问题,可以在CCS英文论坛提问CCS及编译器问题:https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum

赞(0)
未经允许不得转载:TI中文支持网 » CC2640R2L: 用CCS进行开发时,编译生成的.cinit的疑惑
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1