打印

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

[复制链接]
5794|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"。

使用特权

评论回复
5
Aaron888|  楼主 | 2010-10-9 16:59 | 只看该作者
如果从standby模式唤醒,需要怎么修改可以跳过RAM区数据清零呢?

使用特权

评论回复
6
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更合适。

使用特权

评论回复
7
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数据需要保护,这需要怎么实现呢?望大侠们再指教!

使用特权

评论回复
8
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。

使用特权

评论回复
9
Aaron888|  楼主 | 2010-10-11 13:54 | 只看该作者
继续向STM32W大侠请教:
__root 定义函数是保证没有使用的函数或者变量也能够包含在目标代码中,在程序中执行时是不是自动插入到启动代码之间?在程序中定义了__root char __low_level_init(void)函数,是不是替换了编译器自带的RAM数据清零判断函数?

使用特权

评论回复
10
aaa2742| | 2010-10-11 14:19 | 只看该作者
这个问题问的好,期待好的答案:lol

使用特权

评论回复
11
STM32W| | 2010-10-11 15:00 | 只看该作者
继续向STM32W大侠请教:
__root 定义函数是保证没有使用的函数或者变量也能够包含在目标代码中,在程序中执行时是不是自动插入到启动代码之间?在程序中定义了__root char __low_level_init(void)函数,是不是替换了 ...
Aaron888 发表于 2010-10-11 13:54

YES

使用特权

评论回复
12
Aaron888|  楼主 | 2010-10-11 15:06 | 只看该作者
非常感谢!:handshake

使用特权

评论回复
13
hotpower| | 2010-10-11 15:45 | 只看该作者
俺在iar里喜欢这么干,楼主听stm32w的没错。

使用特权

评论回复
14
zhangdinggang| | 2010-10-13 22:58 | 只看该作者
:lol又学了一招。

使用特权

评论回复
15
twlk8634109| | 2011-11-15 09:21 | 只看该作者
mark

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

12

帖子

1

粉丝