日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

STM32单片机,禁止系统启动时的变量初始化

發布時間:2025/3/21 windows 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32单片机,禁止系统启动时的变量初始化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用這個功能是在IAP在線升級時需要用的。

最初使用在EEPROM或者FLASH存儲一個標志位。程序跳轉到BootLoader,BootLoader來判斷是否需要升級。這樣是可以用的,但是這樣有個弊端:如果升級中出現問題,或者其他原因,導致主程序無法正常運行,看門狗咬死程序,程序復位。這樣子的話,程序會一直在 ? ? 引導--引導程序檢測到不需要IAP--跳轉到應用程序--看門狗咬死--復位--引導,進入死循環,程序判斷不了應用程序已經壞掉。只能去現場來進行調試設備。

使用,禁止系統啟動時的變量初始化。在BootLoader與應用程序,都在同一個地址定義相同的變量,在非斷電初始化的時候,此變量是不會復位的。在BootLoader中,每初始化一次,對此變量+1,在應用程序當中賦值為0。當次變量大于一定的數值的時候,則認為應用程序有問題,重新進行IAP。當應用程序收到升級指令的時候,直接把這個變量賦值為相應的值。

STM32的開發環境有兩種IAR與KEIL,這兩種的禁止系統啟動時的變量初始化的方式也是不同的。

方法如下:

IAR

直接定義變量: 在什么地址:

__no_init u16 Fg_Noinit@0x20000000;

如果不是IAP使用的話,可以這樣:

_no_init u16 Fg_Noinit;

?

KEIL的方式略微復雜一些:

首先要在Target中對RAM做配置

?

NoInit某個地址范圍

之后定義變量

__attribute__((at(0x20000000))) u8 Noinit;

總結

以上是生活随笔為你收集整理的STM32单片机,禁止系统启动时的变量初始化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。