久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3240|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

32單片機(jī)軟件ROM自檢程序怎么寫?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
現(xiàn)在在做一款32位單片機(jī)軟件自檢程序,在做ROM的CRC校驗(yàn)自檢時(shí)遇到問(wèn)題,認(rèn)證公司要求先把程序的CRC校驗(yàn)值寫到FLASH固定地址里面(該地址不做CRC校驗(yàn)),進(jìn)入自檢的時(shí)候程序進(jìn)行CRC計(jì)算,然后與放在FLASH固定地址的CRC比較來(lái)檢驗(yàn)ROM區(qū)域的程序是否有異常變化,自己寫了程序應(yīng)該是有BUG,有大佬提供一下例程不?

// 引用外部函數(shù)extern uint32_t iec60730_ram_march_bist_test(uint32_t addr);extern void iec60730_reg_r1_r4_bist_test(void);extern void iec60730_reg_r0_bist_test(void);extern void iec60730_reg_r8_r12_bist_test(void);extern void iec60730_reg_sp_bist_test(void);extern void iec60730_reg_spec_bist_test(void);extern void iec60730_reg_lr_bist_test(void);extern void iec60730_pc_test(void);extern CPUStatus STL_RunTimeCPUTest(void);void PC_Test_Func1(void)__attribute__((section(".ARM.__at_0x00003ff0"))); //地址以4為單位遞增,不然編譯不通過(guò),函數(shù)聲明需要放在文件最上面聲明void PC_Test_Func2(void)__attribute__((section(".ARM.__at_0x0000400c"))); const  uint32_t  CRC_Result __attribute__((at(0x00007F8C))) = 0x00006EFF;uint32_t RamTestResult = 0;uint32_t CpuTestResult = 0;uint32_t crcResult = 0;/*flash self test*/static uint32_t _FLASH_CRC;// 棧底數(shù)據(jù)__IO uint32_t StackOverFlowPtrn[4]   __attribute__((section("STACK_BOTTOM"), zero_init));// 每次校驗(yàn)的數(shù)據(jù)量#define ROM_BIST_SIZE           8 /*  8 bytes every time */#define ROM_START (0x0)#define FLASH_ROM_START_ADDR (0x0)#define FLASH_ROM_SIZE       (20480)//(32*1024)//#define FLASH_ROM_SIZE       (32*1024)#define ROM_END   ((uint32_t)(FLASH_ROM_SIZE - 1))#define ROM_SIZE  ((uint32_t)ROM_END - (uint32_t)ROM_START + 1)static volatile uint32_t hw_crc,sw_crc;// bref: 測(cè)試flash// para:// note:static void ROM_Test(void){        stl_uint8_t* p_flash_start_addr = (stl_uint8_t*)FLASH_ROM_START_ADDR;        iec_test_result.rom_test_result = IEC_TEST_SUCCESS;                CRC_Init();        /*open crc apb clock*/        SYS_EnablePeripheralClk(SYS_CLK_CRC_MSK);        /* use hardware CRC16 to calculate expected crc first,                  then verify if the CRC code calculated by software is same with expected crc */           hw_crc = IEC60730_HardwareCRC16Gen(p_flash_start_addr, ROM_SIZE);        if(IEC60730_TEST_NORMAL != IEC60730_SoftwareCRC16Test(p_flash_start_addr, ROM_SIZE, hw_crc)){                iec_test_result.rom_test_result = IEC_TEST_FAIL;        }        // 使用過(guò)硬件CRC 完成一個(gè)完整的校驗(yàn) 選喲重新初始化        CRC_Init();        /* use software CRC16 to calculate expected crc first,                  then verify if the CRC code calculated by hardware is same with expected crc */        sw_crc = IEC60730_SoftwareCRC16Gen(p_flash_start_addr, ROM_SIZE);        if(IEC60730_TEST_NORMAL != IEC60730_HardwareCRC16Test(p_flash_start_addr,ROM_SIZE, sw_crc)){                iec_test_result.rom_test_result = IEC_TEST_FAIL;        }                // 記錄整個(gè)flash 區(qū)域的校驗(yàn)值        _FLASH_CRC = hw_crc;        crcResult = CRC_Result;        if(crcResult == sw_crc)//_FLASH_CRC CRC_Result        {                iec_test_result.rom_test_result = IEC_TEST_SUCCESS;        }        else        {                iec_test_result.rom_test_result = IEC_TEST_FAIL;        }        }
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:996773 發(fā)表于 2023-2-15 16:14 | 只看該作者
程序rom還能自檢?本人才疏學(xué)淺,一般單片機(jī)程序稍大一些1k起步,再大幾十k夠大了,如何自檢每個(gè)字節(jié)

甚至每個(gè)位能無(wú)差錯(cuò)?用什么原理,拭目以待等候高手出現(xiàn)
回復(fù)

使用道具 舉報(bào)

板凳
ID:1044091 發(fā)表于 2023-2-15 16:53 | 只看該作者
STP ISP 在讀入hex文件那一刻,已經(jīng)對(duì)整個(gè)hex進(jìn)行校驗(yàn)計(jì)算了。

回復(fù)

使用道具 舉報(bào)

地板
ID:89217 發(fā)表于 2023-2-15 22:19 | 只看該作者
理論上只要程序正常運(yùn)行,程序就是對(duì)的,如果還要較驗(yàn)的話有什么意義?會(huì)不會(huì)被人故意刁難?

回復(fù)

使用道具 舉報(bào)

5#
ID:1044091 發(fā)表于 2023-2-15 23:15 來(lái)自觸屏版 | 只看該作者
我自己寫的eeprom連續(xù)讀寫代碼,每次存入12個(gè)字節(jié)。第一位是序號(hào),第2~11位是數(shù)據(jù),第12位是校驗(yàn)位。讀的時(shí)候校驗(yàn)一次,有問(wèn)題就讀默認(rèn)數(shù)據(jù)。目的是為了防止eeprom寫入錯(cuò)誤,比如存儲(chǔ)單元損壞,或?qū)懭霑r(shí)意外斷電等。雖然幾率很小,但有預(yù)案總比沒(méi)有強(qiáng)。
回復(fù)

使用道具 舉報(bào)

6#
ID:1044091 發(fā)表于 2023-2-16 19:27 | 只看該作者
按照我的理解,所謂校驗(yàn)就是按地址順序讀出這段數(shù)據(jù),然后計(jì)算(比如累加求和),再與已存在的校驗(yàn)位比較,一致就是哪都沒(méi)錯(cuò)往下走;不一致就報(bào)錯(cuò)或者B計(jì)劃。應(yīng)該幾句代碼就搞定了,為何被你寫的如此復(fù)雜?
回復(fù)

使用道具 舉報(bào)

7#
ID:496636 發(fā)表于 2023-2-19 00:11 | 只看該作者
CRC較驗(yàn)啊,浙大中控,在工程師站編好程序后,編譯下載到控制站,下載好后,再回讀,進(jìn)行CRC較驗(yàn),得到CRC較驗(yàn)值與編譯好后下載前計(jì)算出來(lái)的CRC較驗(yàn)值進(jìn)行比較,如果相等,下載到控制站的程序無(wú)誤。
同時(shí),這次回讀生成的CRC較驗(yàn)值將保存起來(lái),下次編譯后要下載的時(shí)候,將當(dāng)前的程序的CRC較驗(yàn)值與上次保存的CRC值比較,如果相等,提示程序沒(méi)有變化,無(wú)須下載,如果不相等,提示下載后會(huì)改變?cè)瓉?lái)的程序,是否繼續(xù)。
CRC較驗(yàn)就是用商定好的一個(gè)數(shù)據(jù)作為除數(shù),待較驗(yàn)的數(shù)據(jù)作為被除數(shù),進(jìn)行除法運(yùn)算,除法運(yùn)算的時(shí)候沒(méi)有進(jìn)位和借位
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品影院 | 黄色大片免费网站 | 国产精品欧美精品 | 91久久久久 | 国精产品一品二品国精在线观看 | www.欧美视频 | 亚洲精色 | 日韩精品极品视频在线观看免费 | 欧美在线观看网站 | 在线国产中文字幕 | 国产精品自拍啪啪 | 精品福利av导航 | 黄网站涩免费蜜桃网站 | 天天夜夜操 | 精品欧美色视频网站在线观看 | 日日爱视频 | 国产综合精品一区二区三区 | 一级片在线视频 | 成人av在线播放 | 亚洲欧美久久 | 国产一区精品 | 综合久 | 一区中文字幕 | 亚洲免费精品一区 | 伊人看片 | 在线观看国产 | 欧美成人精品一区二区男人看 | 97日日碰人人模人人澡分享吧 | 亚洲国产精品久久久久 | 一级特黄视频 | 在线精品一区二区 | 9久久精品 | av一区二区三区在线观看 | 天天拍天天操 | 日本精品视频在线观看 | 久久久亚洲一区 | 一区二区三区视频免费看 | 国产高清在线精品一区二区三区 | 亚洲三区在线 | 亚洲 欧美 日韩 在线 | 亚洲 欧美 日韩在线 |