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