@目錄前言簡介一、準備工作1.1 創建寫入腳本1.2 設置執行許可權1.3 添加定時任務1.4 配置生效二、Tomcat日誌 按每天分割2.1 創建一個 sh文件2.2 設置執行許可權2.3 設置crontab指令,指定每日定時任務2.4 配置生效總結 前言 請各大網友尊重本人原創知識分享,謹記本人博客 ...
因為當前項目單片機容量不夠使用,打算開啟編譯器優化,結果在使用KEIL編譯器優化後,程式在發送Modbus數據時,程式直接跑飛了
先說結論:
最後發現是局部變數指針作為了DMA的記憶體地址參數,導致當DMA連續搬運數據時,實際那個局部變數已經被釋放,導致DMA搬運數據的過程中出現錯誤,但是為什麼沒優化之前沒有問題,實在難以理解
確認現象:
當單片機回覆上位機的時候就會跑飛,接收不會有問題。
尋找錯誤:
- 修改單個文件的編譯優化等級,發現只有當bsp_modbus.c文件無優化的時候才是正常
- 確定是該文件的程式有問題。
- 通過線上調試發現只有回覆異常碼時才會卡死:
void MODS_SendAckErr(u8 *pbyBuf,u8 byErrCode) { static u8 byTxbuf[3] = {0}; byTxbuf[0] = pbyBuf[0]; byTxbuf[1] = pbyBuf[1] | 0x80; byTxbuf[2] = byErrCode; MODS_SendWithCRC(byTxbuf, 3); }
就是 byTxbuf出錯,把 byTxbuf換成靜態的就好了
指針傳遞不會過程中不會有被釋放的風險。