This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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

Part Number: TMS320F280039C

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

谢谢大家了

  • 我建议给变量初始化的时候赋初值为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初始化完全不起作用

  • 为什么有这种需求?

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

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

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

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

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

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

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