嵌入式开发:.bss段数据为什么会被清零?

BSS(Block Started by Symbol)有什么作用呢?百度百科的释义如下:"BSS段通常是指用来存放程序中未初始化的或者初始化为0的全局变量和静态变量的一块内存区域。特点是可读写的,在程序执行之前BSS段会自动清0。"程序初始化时,BSS段为什么会被清零呢?围绕这个话题,本文聚焦以下几点:

  1. Reset对RAM区的影响
  2. 主程序执行之前,*.bss段为什么会自动清零
  3. 调试器Reset(Debug Reset),如何实现RAM区不清零

************************************************************************************

关注微信公众号“开心果 Need Car”,一起讨论Autosar开发中遇到的那些“坑”!

************************************************************************************

Reset对RAM区影响

因为*.bss段会映射到RAM区(DSPR:Data Scratch-Pad SRAM),所以,在弄清楚*.bss段为什么会自动清零之前,我们先了解一下Reset对RAM区域的影响。

查看TC3xx的用户手册,发现:除了Cold power-on Reset以外,其他Reset类型,对DSPR和PSPR没有影响,也就是说,实际上,非Cold power-on Reset对RAM区(DSPR)没有影响,为什么软复位后,对应的*.bss RAM区(DSPR)清零了呢?Reset类型对RAM区的影响如下所示:

注意:Cold Power-on Reset,RAM区受影响,会初始化为0x00。诊断服务的$10 02/82,一般对应Application Reset或者System Reset。调试器的DAP(Debug Access Port)/JTAG(Joint Test Action Group)调试口对应Debug Reset。

不同Reset请求,触发的Reset方式,如下所示:

主程序执行之前,*.bss段为什么会自动清零

主程序执行之前,*.bss段为什么会自动清零?搞清楚这个问题之前,需要先认识一下链接文件和启动文件。

1、链接文件(*.lsl)

本文基于HighTec编译器讨论。链接文件(*.lsl)中,会将所有的*.bss段的起始地址和对应的长度记录,形成一个Table表,即:__clear_table。代码中所有未初始化的全局变量,或者初始化为零的全局变量,启动代码会按照__clear_table记录的*.bss段起始地址和长度完成清零动作。__clear_table示意如下:

......
/*
* Create the clear and copy tables that tell the startup code
* which memory areas to clear and to copy, respectively.
*/
PROVIDE(__clear_table = .);
LONG(0 + ADDR(.CPU5.zbss)); LONG(SIZEOF(.CPU5.zbss));
LONG(0 + ADDR(.CPU5.bss)); LONG(SIZEOF(.CPU5.bss));
LONG(0 + ADDR(.CPU5.lmubss)); LONG(SIZEOF(.CPU5.lmubss));
......
LONG(-1); LONG(-1);
......

<< · Back Index ·>>

发表回复

相关推荐

王菲终于换新发型,短发烫卷还做了齐刘海,和男友人同框不像52岁

每个季节都有专属的单品搭配,以及不同的发型选择,不同的温度会导致心情的变化,在春日暖阳中,心情会随之愉悦舒适,会喜欢 ...

· 4秒前

纪录短片《活在路上》 | 外卖小哥的北漂人生!

纪录短片《活在路上》正片 这是我第一个正式上线的北漂人物纪录短片。外卖小哥姜翻,是故事的主角。好几年前,我根据拍摄的 ...

· 2分钟前

寶寶打嗝看著都難受,教你4招,寶寶打嗝問題輕松解決

小寶寶在媽媽的肚子裡的時候就會打嗝,出生後要是老打嗝,寶媽就會想為什麼好好的老打嗝呢?打嗝打的心裡著急,怎麼能不打嗝...

· 3分钟前

生物與醫藥

找工作,這個專業感覺是個天坑,碩士公司給到6-9k,應屆生真的是廉價的勞動力啊,我身邊同學大多數都沒找到工作,有一些好點...

· 3分钟前

【開源】H743飛控 (V.2.1)(星火計劃)

項目說明為瞭更好地進行後續無人機項目的開發以及穿越機的使用於是乎開發一款高性能、小體積並且兼容多個開源飛控固件的基於S...

· 6分钟前