最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

計(jì)算CRC16出現(xiàn)兩次計(jì)算結(jié)果不同的問(wèn)題

2023-08-23 20:07 作者:大餅醬人  | 我要投稿

傳入CRC計(jì)算函數(shù)的原始數(shù)據(jù)和長(zhǎng)度是一樣的,但是前后兩次計(jì)算的結(jié)果竟然不一樣。

開(kāi)發(fā)環(huán)境是KEIL5,mcu是一個(gè)2K/4K SRAM的M0內(nèi)核的單片機(jī)。

找了半天原因,還計(jì)算了一下堆棧:

  1. 目前在優(yōu)化等級(jí)為-O2時(shí),程序占用flash大小=Code + RO Data + RW Data = 12924+808+128 = 13860B = 13.5KB 占用flash大小=RW Data + ZI Data=128+1088 = 1216B = 1.19KB

  2. 目前在優(yōu)化等級(jí)為-O0時(shí),程序占用flash大小=Code + RO Data + RW Data = 16920+808+128 = 16856B = 17.43KB 占用flash大小=RW Data + ZI Data=128+1088 = 1216B = 1.19KB

  3. 已知棧(stack)的大小是0x100 = 256B,且出現(xiàn)遞歸創(chuàng)建函數(shù)容易導(dǎo)致棧溢出

  4. 已知堆(heap)的大小是0x100 = 256B,且手動(dòng)分配(malloc)后未進(jìn)行釋放(free)容易導(dǎo)致堆溢出

  5. 已知堆(stack)和棧(heap)存在于RAM中,占用256B*2 = 512B/1024 = 0.5KB

  6. 綜合1\2\5,目前固定RAM占用空間為1.19KB + 0.5KB = 1.69KB,且 所有系統(tǒng)運(yùn)行中產(chǎn)生的數(shù)據(jù)存放位置全都在RAM區(qū)

如上,算了一下當(dāng)前代碼的內(nèi)存情況,按說(shuō)不應(yīng)該優(yōu)化等級(jí)為-O0的時(shí)候溢出啊,但實(shí)際好像就是棧溢出了,把優(yōu)化等級(jí)改為-O2或者把棧改為512B的時(shí)候,CRC計(jì)算那部分程序就正常了。

參考 修改編譯優(yōu)化選項(xiàng)后導(dǎo)致bug的原因分析_#include<>_半斗米的博客-CSDN博客 這篇文章,提到了O0比O2使用的堆棧大的多,可能是這個(gè)原因吧。

另外高級(jí)單片機(jī)一般可以按下圖這樣,在仿真的時(shí)候觀察堆棧的使用情況:

還可以在.map文件中查看相關(guān)的內(nèi)存情況,如果沒(méi)有,可以按下圖這樣勾選:


計(jì)算CRC16出現(xiàn)兩次計(jì)算結(jié)果不同的問(wèn)題的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
夹江县| 兴文县| 兖州市| 康定县| 鹰潭市| 聂拉木县| 江都市| 永年县| 青岛市| 莒南县| 陕西省| 阳山县| 南陵县| 张家港市| 连江县| 涟源市| 会泽县| 石台县| 淮安市| 曲阜市| 喀喇沁旗| 凤冈县| 彭泽县| 阳高县| 满城县| 屯门区| 游戏| 乌恰县| 商南县| 安顺市| 建平县| 皋兰县| 乌兰察布市| 贺州市| 婺源县| 天全县| 宝山区| 海晏县| 尉氏县| 桦南县| 资兴市|