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

TMS320F280039C: 上电初始化时如何将全部RAM片初始化写入0

Part Number:TMS320F280039C

测试时发现软件执行时,有很多变量非0值,而是随机值,想问一下如何上电把所有RAM片先清0?

谢谢大家了

Yale Li:

我建议给变量初始化的时候赋初值为0。

,

? ?:

没办法直接整片初始化RAM吗? 我尝试了几种方法都不可以…….

,

? ?:

void Main_RamDataClear(int StarAddr, int DataLen){ // 将DSP RAM的起始地址转换为32位整数指针 volatile uint32_t *ram_ptr = (volatile uint32_t *)StarAddr;

// 计算RAM的大小(以32位字为单位) uint32_t ram_size_in_words = DataLen / sizeof(uint32_t);

// 遍历RAM并清零 for(uint32_t i = 0; i < ram_size_in_words; ++i) { *ram_ptr++ = 0; }}使用这种方式给RAM初始化完全不起作用

,

Yale Li:

为什么有这种需求?

,

? ?:

不知道为什么0039C的RAM有初始值,上电的时候如果不初始化有一些变量会有初始值,导致程序会有执行的风险,所以想通过初始化RAM的方式来处理,避免不初始化时使用。

,

? ?:

不初始化程序会乱跑,0039C跟其他芯片不同上电有初始值。

,

Yale Li:

RAM全部清零是不大可能的。

能否具体指明一下哪些非初始化变量需要被清零?比如局部变量

,

? ?:

局部变量还好,主要时全局变量有初值,因此每个变量都需要先给初值才能用,想上电一次都初始化,但是目前没有操作成功,还是每个变量都初始化的做法才行。

,

Yale Li:

全局变量属于.bss段(uninitialized),.cinit段(initialized)是用于初始化全局变量的表。初始化时,全局变量的值被从.cinit段复制出来并存储到.bss段。

如果使用了 –rom_model 选项,这个过程就在 _c_int00 函数中被执行。 _c_int00 函数在main函数之前被调用。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280039C: 上电初始化时如何将全部RAM片初始化写入0
分享到: 更多 (0)