国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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ó)家法律
锡林郭勒盟| 徐闻县| 玛曲县| 安国市| 怀安县| 延吉市| 鄂尔多斯市| 德格县| 宁阳县| 舞阳县| 安西县| 正安县| 北碚区| 涟源市| 巩义市| 扬中市| 绥宁县| 池州市| 调兵山市| 雷波县| 石嘴山市| 林州市| 磐安县| 罗田县| 大荔县| 梓潼县| 尚义县| 泊头市| 沐川县| 蕲春县| 勃利县| 宁南县| 馆陶县| 临海市| 黄浦区| 文水县| 普安县| 通州市| 陇西县| 喀什市| 揭东县|