五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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ó)家法律
梁山县| 长寿区| 眉山市| 曲麻莱县| 星子县| 通城县| 平凉市| 普宁市| 南昌市| 航空| 清苑县| 遂平县| 唐海县| 漠河县| 武清区| 克什克腾旗| 保德县| 措勤县| 金阳县| 黔东| 栖霞市| 兴山县| 衡山县| 郧西县| 丽水市| 呼图壁县| 仪陇县| 郴州市| 汝阳县| 江源县| 利辛县| 隆德县| 固原市| 颍上县| 台江县| 崇礼县| 蒲城县| 新乐市| 酉阳| 饶河县| 刚察县|