请教香主:STM32在IAR中怎样阻止启动代码对RAM区进行清零

[复制链接]
7042|14
 楼主| Aaron888 发表于 2010-10-9 14:13 | 显示全部楼层 |阅读模式
本帖最后由 Aaron888 于 2010-10-9 14:15 编辑

香主:
    MCU在VDD不掉电的情况下复位,IAR中怎样设置才能阻止启动代码对RAM区进行清零?
香水城 发表于 2010-10-9 14:27 | 显示全部楼层
可以修改IAR的启动文件,在检测到RCC_CSR的PINRSTF位为'1'时,跳过对RAM区清零的操作。

具体怎么改启动文件,你可以自己看看,我没有做过。
 楼主| Aaron888 发表于 2010-10-9 16:33 | 显示全部楼层
香主,如果是从standby模式唤醒,RCC_CSR的PINRSTF位是否会为1呢?
香水城 发表于 2010-10-9 16:47 | 显示全部楼层
如果是从standby模式唤醒,RCC_CSR的PINRSTF位不会为"1"。
 楼主| Aaron888 发表于 2010-10-9 16:59 | 显示全部楼层
如果从standby模式唤醒,需要怎么修改可以跳过RAM区数据清零呢?
STM32W 发表于 2010-10-10 07:37 | 显示全部楼层
本帖最后由 STM32W 于 2010-10-10 07:44 编辑

__root char __low_level_init(void)

返回0 ,不对RAM清零和初始化(注意如果上电是返回0,全局变量将不能得到正确的初值)
返回1,对RAM清零并初始化初值。

这里有个副作用,如果返回0,则全局变量也不会初始化,因此全局变量可能得不到正确的初始值。

如果仅仅只是需要某种情况下复位,不改变某些变量的值,应该将这些变量定义成__no_init更合适。
 楼主| Aaron888 发表于 2010-10-11 08:51 | 显示全部楼层
本帖最后由 Aaron888 于 2010-10-11 09:54 编辑

谢谢STM32W指导,我用的是IAR5.4,没有找到__root char __low_level_init(void)这个函数的出处,用__no_init定义变量是可以保护RAM中的数据不清0,但是RAM中的初始值是乱的,如果我想让RAM数据在上电复位(PINRSTF为"1"时)的时候清零,而其他复位(例如:standby模式下)RAM数据需要保护,这需要怎么实现呢?望大侠们再指教!
STM32W 发表于 2010-10-11 11:39 | 显示全部楼层
没有找到__root char __low_level_init(void)这个函数的出处,
-------------------------
直接写个函数就行了。
__root char __low_level_init(void)
{
    if(PINRSTF为1)
    {
       return 1;
    }
    return 0;
}

用__no_init定义变量是可以保护RAM中的数据不清0,但是RAM中的初始值是乱的,
----------------
需要初值,可以手动去赋值初值。
__root char __low_level_init(void)
{
    if(PINRSTF为1)
    {
        //手动对所有no_init变量赋初值
    }
    return 1;
}

个人建议用方法2。
 楼主| Aaron888 发表于 2010-10-11 13:54 | 显示全部楼层
继续向STM32W大侠请教:
__root 定义函数是保证没有使用的函数或者变量也能够包含在目标代码中,在程序中执行时是不是自动插入到启动代码之间?在程序中定义了__root char __low_level_init(void)函数,是不是替换了编译器自带的RAM数据清零判断函数?
aaa2742 发表于 2010-10-11 14:19 | 显示全部楼层
这个问题问的好,期待好的答案:lol
STM32W 发表于 2010-10-11 15:00 | 显示全部楼层
继续向STM32W大侠请教:
__root 定义函数是保证没有使用的函数或者变量也能够包含在目标代码中,在程序中执行时是不是自动插入到启动代码之间?在程序中定义了__root char __low_level_init(void)函数,是不是替换了 ...
Aaron888 发表于 2010-10-11 13:54

YES
 楼主| Aaron888 发表于 2010-10-11 15:06 | 显示全部楼层
非常感谢!:handshake
hotpower 发表于 2010-10-11 15:45 | 显示全部楼层
俺在iar里喜欢这么干,楼主听stm32w的没错。
zhangdinggang 发表于 2010-10-13 22:58 | 显示全部楼层
:lol又学了一招。
twlk8634109 发表于 2011-11-15 09:21 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

12

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部