国产久操视频-国产久草视频-国产久热精品-国产久热香蕉在线观看-青青青青娱乐-青青青青在线成人视99

  • 資料介紹
    • 1、簡介
    • 2、功能安全 Flash 自檢原理
    • 3、使用 Linker 自定義符號變量計算 ROM 大小
    • 4、小結
  • 資料預覽
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

LAT1471 Flash全片自檢過程中巧用Linker自定義變量

03/06 14:44
692
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

LAT1471 Flash全片自檢過程中巧用Linker自定義變量

452.59 KB

1、簡介

Flash 自檢是功能安全應用 ClassB 或者 SIL 必不可少的測試項目,自檢包含啟動時自檢和運行時自檢,通常情況下,啟動時自檢要求對 Flash 全片 ROM 進行自檢,在 Flash 全片自檢過程中,需要知道 ROM 實際占用的 Flash 大小,如果配置的參數(shù)與 ROM 實際大小不一致,那么自檢就會失敗。客戶詢問實際開發(fā)過程中是否有較好的方法獲取實際的 ROM 大小進行 Flash 全片自檢配置,針對客戶的疑問,本文介紹功能安全應用中 Flash 自檢的原理以及在 KEIL 編譯環(huán)境下如何使用鏈接器自定義變量計算實際的 ROM 大小。

2、功能安全 Flash 自檢原理

STM32 提供了針對功能安全應用的自檢庫,我們以 ClassB 4.0 為例,自檢庫實現(xiàn)了Flash 自檢功能,F(xiàn)lash 自檢采用 CRC 算法對 ROM 區(qū)進行校驗,主要分為 CRC 預計算和CRC 比較兩個步驟,下面分別描述兩個步驟的主要內容。

  • CRC 預計算,針對編譯生成的可執(zhí)行文件生成 CRC 并插入 CRC 到可執(zhí)行文件中,其生成 CRC 的過程要符合如下要求。
  1. Flash 空間劃分為 CRC 區(qū)域和程序區(qū),其中 CRC 區(qū)域的起始地址與 Flash 大小相關,其計算的公式如下:CRC 區(qū)域起始地址=Flash 結束地址-4*(Flash 大小/1024),如果Flash 大小為 2M 字節(jié),起始地址為 0x08000000,那么 CRC 區(qū)域的起始地址為0x08200000-4*(0x200000/1024)=0x81E0000。
  1. 程序區(qū)從 Flash 起始地址開始,分為連續(xù)的 Section,每個 Section 的大小為 1024 字節(jié),實際程序能夠使用的 Flash 空間最大為 Flash 大小-CRC 區(qū)域大小,也就是 FlashSize-4*(Flash Size/1024),對于 2M 空間的 Flash,其程序空間最大為 0x1E0000。
  1. 編譯生成的可執(zhí)行文件 ROM 包含了 Code 段,RO 段以及 RW 段,使用STM32_Programmer_CLI 工具預計算 CRC 的過程,只對實際產(chǎn)生的 ROM 段進行計算,ROM 段必須保證 4 字節(jié)對齊,ROM 按照 1024 字節(jié)為單位劃分為多個

Section,通常最后一個 Section 不足 1024 字節(jié),但是也記作一個 Section。假設可執(zhí)行文件的 ROM 大小為 81928,那么其一共劃分為 81 個 Section,其中最后一個Section 占用 8 字節(jié)空間,STM32_Programmer_CLI 工具針對這個 ROM 生成 81 個CRC 值,其中前 80 個 CRC 值為 1024 字節(jié)的校驗碼,最后一個 CRC 值為 8 字節(jié)的校驗碼。這 80 個 CRC 值按照順序存放在 CRC 區(qū)域空間。

  1. 燒錄程序的過程中,可執(zhí)行程序二進制代碼和工具生成從 CRC 分別燒錄到 Flash 的程序空間和 CRC 空間。
  • CRC 比較,程序運行階段,用戶程序調用功能安全庫提供的自檢 API 進行檢測,用戶需要正確配置 ROM 檢測的范圍,功能安全庫提供了標準的數(shù)據(jù)結構供用戶配置自檢范圍。

用戶程序通過上述兩個數(shù)據(jù)結構配置 Flash 自檢的區(qū)域,待測試的 Flash 區(qū)域通過STL_MemSubSet_t 結構體指定,用戶可以定義一個或多個 MemSubSet,對于 Flash全片測試,只需要定義一個 MemSubSet,其中 StartAddr 為 ROM 起始地址,EndAddr 為 ROM 的結束地址,正確的 ROM 結束地址是確保自檢通過的必備條件。

3、使用 Linker 自定義符號變量計算 ROM 大小

因為在 Flash 自檢中,需要正確地配置 ROM 的大小,最簡單的辦法就是代碼編譯完成,查看編譯的結果得到 ROM 的大小,再把這個值填上去。這種方法存在的問題就是每次修改代碼可能會導致 ROM 大小發(fā)生變化,這意味著每次都要修改參數(shù),否則自檢就會出錯。實際上,在代碼編譯過程中,KEIL 編譯器已經(jīng)定義了一些變量,用戶程序可以直接引用,這些變量包含了可執(zhí)行文件的各個段的長度信息,如果用戶代碼需要計算 ROM 大小,直接使用這些變量即可。從 KEIL 的幫助文檔中,可以找到這些變量的定義以及如何在用戶代碼中使用這些變量。

4、小結

本文介紹了功能安全應用中,F(xiàn)lash 自檢原理以及對 Flash 進行全片自檢過程中如何使用Linker 自定義變量計算實際 ROM 大小的方法。

資料預覽

相關推薦

祁东县| 三台县| 个旧市| 东兴市| 石棉县| 五大连池市| 乐都县| 泸水县| 苗栗县| 建宁县| 广汉市| 儋州市| 措美县| 陵川县| 昔阳县| 高淳县| 剑阁县| 遂平县| 通河县| 昆明市| 日照市| 尉犁县| 庐江县| 广东省| 泌阳县| 监利县| 榆树市| 家居| 和硕县| 长岛县| 平度市| 荥阳市| 岳池县| 泽库县| 固阳县| 海口市| 昂仁县| 土默特右旗| 丽江市| 博客| 财经|