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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

单片机异常复位后如何保存变量数据

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机异常复位后如何保存变量数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1、理論

2、實踐


1、理論

眾所周知,單片機復位后變量數值會自動初始化,以華大半導體HC32L136為例,具有 7 個復位信號來源,每個復位信號都可以讓 CPU 重新運行,絕大多數寄存器會被復位到復位值,程序會從復位向量處開始執行。

  • 數字區域上電掉電復位 POR
  • 外部 Reset PAD,低電平為復位信號
  • WDT 復位
  • PCA 復位
  • LVD 低電壓復位
  • Cortex-M0+ SYSRESETREQ 軟件復位
  • Cortex-M0+ LOCKUP 硬件復位

每個復位源由相應的復位標志進行指示,復位標志均由硬件置位,需要用戶軟件清零。

華大半導體各區域的復位來源如下圖所示:

本篇博客主要講授華大半導(STM32、C51等單片機均可適用)復位(以看門狗復位為例)后變量數據保存的方法。

這里將用到__not_init屬性,其用于變量聲明,可禁止系統啟動時變量的初始化,有了__not_init屬性,編譯器只給指定變量分配空間,不會再初始化。

__not_init的兩種定義方式如下所示:

    方式1:不指定存儲位置,由編譯器分配__no_init 類型 變量名;        ///< 例如:__no_init uint8_t cou_num;方式2:指定存儲位置__no_init 類型 變量名 @地址;  ///< 例如:__no_init uint8_t cou_num @0x20000000;

2、實踐

實踐描述:使用__no_init屬性創建一個變量cou_num,其將數據存儲在SRAM中,每隔300毫秒自加1并通過串口打印輸出數值,當檢測到上電復位和按鍵復位后,變量cou_num數值置為0,在看門狗復位下變量cou_num數值不變。

第1步:配置串口引腳、串口使能和串口中斷,代碼如下所示:

///< 串口引腳配置
static void App_PortInit(void)
{stc_gpio_cfg_t stcGpioCfg;DDL_ZERO_STRUCT(stcGpioCfg);///< 使能GPIO模塊時鐘Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); ///< 配置PA02端口為URART1_TXstcGpioCfg.enDir = GpioDirOut;Gpio_Init(GpioPortA, GpioPin2, &stcGpioCfg);Gpio_SetAfMode(GpioPortA, GpioPin2, GpioAf1);            
}///< 串口配置
static void App_UartCfg(void)
{stc_uart_cfg_t    stcCfg;DDL_ZERO_STRUCT(stcCfg);///< 開啟UART1外設時鐘Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE);///< UART1初始化stcCfg.enRunMode        = UartMskMode3;           ///< 模式3stcCfg.enStopBit        = UartMsk1bit;            ///< 1bit停止位stcCfg.enMmdorCk        = UartMskEven;            ///< 偶檢驗stcCfg.stcBaud.u32Baud  = 9600;                   ///< 波特率9600  注意誤差stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div;        ///< 通道采樣分頻配置stcCfg.stcBaud.u32Pclk  = Sysctrl_GetPClkFreq();  ///< 獲得外設時鐘(PCLK)頻率值Uart_Init(M0P_UART1, &stcCfg);                    ///< 串口初始化///< UART1中斷使能Uart_ClrStatus(M0P_UART1,UartTC);                 ///< 清發送請求Uart_EnableIrq(M0P_UART1,UartTxIrq);              ///< 使能串口發送中斷EnableNvic(UART1_IRQn, IrqLevel3, TRUE);          ///< 系統中斷使能
}///< UART1中斷函數
void Uart1_IRQHandler(void)
{///< UART1數據發送if(Uart_GetStatus(M0P_UART1, UartTC))         {///< 清中斷狀態位Uart_ClrStatus(M0P_UART1, UartTC);  }
}

第2步:配置看門狗復位,每隔820毫秒若沒有喂狗,則復位,代碼如下所示:

///< WDT初始化配置
static void App_WdtInit(void)
{///< 開啟WDT外設時鐘Sysctrl_SetPeripheralGate(SysctrlPeripheralWdt,TRUE);///< WDT 初始化,喂狗時間:820msWdt_Init(WdtResetEn, WdtT820ms);
}

第3步:使用__no_init屬性定義cou_num變量,將數組存儲在SRAM寄存器0x20001000中,代碼如下所示:

__no_init uint8_t cou_num @ 0x20001000;

?第4步:添加上電復位源和RESET腳復位源檢測,當檢測到其中之一個復位的時候,cou_num置為0,代碼如下所示:

int32_t main(void)
{char * data_buf = (char *)malloc(sizeof(char) * 19);///< 串口引腳配置App_PortInit();///< 串口配置App_UartCfg();///< WDT初始化App_WdtInit();///< 啟動 WDTWdt_Start();///< 當上電復位或者RESET腳復位后cou_num為0,看門狗復位數值不變if((Reset_GetFlag(ResetFlagMskPor5V) == 1) || (Reset_GetFlag(ResetFlagMskRstb) == 1)){cou_num = 0;Reset_ClearFlag(ResetFlagMskPor5V);Reset_ClearFlag(ResetFlagMskRstb);}while (1){cou_num = cou_num + 1;delay1ms(300);///< 開啟喂狗后,將不會產生復位//Wdt_Feed(); sprintf(data_buf,"numerical value:%d\n",cou_num);for(int8_t i = 0;i < 19;i++){Uart_SendDataIt(M0P_UART1,data_buf[i]); delay1ms(5);}}
}

運行效果如下所示:

可見雖然看門狗每隔820毫秒復位一次,但是cou_num數值不收影響,但是也可以看出cou_num數值中間存在丟失,例如沒有打印輸出數值3,主要原因是運行到此數時,恰巧看門狗復位,所以串口未來得及打印,但是不影響cou_num計數。

總結

以上是生活随笔為你收集整理的单片机异常复位后如何保存变量数据的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 调教少妇视频 | 91性高潮久久久久久久久 | 国产偷亚洲偷欧美偷精品 | 欧美日韩在线视频一区二区三区 | 久久视频一区二区三区 | 国产一区二区视频在线播放 | 国产丝袜视频 | 久久三级网 | 波多野结衣电影免费观看 | 久久久久久久精 | 色5月婷婷 | 欧美wwwxxxx| 国产成人在线视频观看 | www伊人 | 亚洲五级片 | av免费播放 | 人妻丰满熟妇av无码区免 | 久久久久久久久国产精品一区 | 国产第七页 | 欧美大片视频在线观看 | 久久人人爽人人爽人人片av免费 | 国产又黄又粗又爽 | 国产一区二区视频在线观看免费 | 日韩日日日 | 精品福利一区 | 黄色一级视频免费 | 日韩a级片在线观看 | 超碰在线免费97 | 韩日av一区二区 | 超碰免费97 | 日韩视频免费观看高清完整版 | 性自由色xxxx免费视频 | 超碰日韩在线 | 日本青青草视频 | 美脚の诱脚舐め脚视频播放 | 亚洲无吗视频 | 99视频观看 | 丁香花五月天 | 一区二区成人在线观看 | 日韩人妻精品中文字幕 | 国内精久久久久久久久久人 | 久草中文视频 | 日韩欧洲亚洲AV无码精品 | 超碰人人擦 | v8888av| 啪啪免费视频网站 | 青青草91久久久久久久久 | wwwwxxxxx日本| 精品视频在线观看 | 国产欧美精品久久 | 亚洲丁香婷婷 | 2018国产精品 | 韩国三级国产 | 老女人一毛片 | 色哟哟在线视频 | 三年大片在线观看 | 乌克兰极品av女神 | 日韩福利| 国产福利电影在线 | 91免费.| mm131在线 | 国产xxxx裸体xxx免费 | 日韩啊v| 国产精品夜夜 | 少妇被躁爽到高潮无码人狍大战 | 香蕉钻洞视频 | 亚洲精品一区中文字幕乱码 | 欲求不满在线小早川怜子 | 亚洲AV无码精品国产 | 最新毛片网站 | 免费在线观看你懂的 | 国产日韩在线免费观看 | 欧美性xxxxx| sao虎视频在线精品永久 | 亚洲制服一区二区 | k8经典成人理伦片 | 久久久久久国产视频 | 视频精品久久 | 永久免费视频网站直接看 | 99国产精品视频免费观看一公开 | 热热热av | 欧美影视 | 日韩精选在线观看 | 无码人妻精品一区二区蜜桃网站 | 国产一区二区三区免费观看视频 | 中文字幕永久在线视频 | 国产私密视频 | 神宫寺奈绪一区二区三区 | 免费婷婷 | 小镇姑娘高清播放视频 | 老熟女一区二区三区 | 国产精品久久久国产盗摄 | 国产欧美亚洲精品 | 国产精品成人无码 | 久久精品免费av | 噜噜噜av| 国产精品国产三级国产专区51 | 中文字幕在线视频日韩 | 亚洲色欧美 |