遇到難題一、:ram記憶體不足錯誤:
一 、將uc/os iii移植到stm32f103c8t6的遇到記憶體不足的報錯。
分析,c8t6系類ram記憶體只有20kb。
如上圖。在**中將heap_size設定成了27u*1024u及27k,堆空間比ram還要大。
改成10k,並且根據情況縮小任務申請的堆疊空間。
二、訪問esp8266所建立的web伺服器時發生重啟並報堆空間不足
分析: 與c程式專案,c可以從flash執行,而lua函式必須載入到堆中才能執行。esp8266物理上有64kb的iram,96kb的dram,iram用來存放指令,dram用來存放資料。iram的32kb是cache。可用ram為20kb
解決:1. 韌體方面:採用整形的韌體,不支援float型。減少對無用庫的載入。
2. 變數:盡量去使用local申明變數,減少全域性變數的使用。並縮短變數的生存週期,盡快釋放。並且利用檔案系統去傳遞上下文變數。
3. 編譯:除錯完成後,進行預編譯,生成等效的.lc檔案,出去了所有除錯行和變數資訊。
4. 函式:函式具有固有的開銷,將程式分組到更大的函式中。並且使用內聯函式
問題:1.為什麼esp8266要用lua語言
lua是乙個極輕量級的指令碼語言,用c語言編寫,編譯後直譯器僅100k+,適合堆記憶體有很大限制的嵌入式系統。移植性高,執行高效,並且可以和c進行無縫對接。
2.lua和c的關係與區別
lua是物件導向的一門解釋型語言,c是面向過程的一門編譯型語言,lua的編譯器是用c語言寫的。
語法上,lua沒有main函式
三、功能邏輯問題。
上傳功能相互干擾,正常情況下gprs,wifi,10秒鐘上傳一次。感測器採集則在這10秒鐘之內進行採集更新。
但是,在gprs網路不佳的情況下,會導致gprs的斷線重連,重連過程可能會耗時10~20秒過程,在此時間段內。wifi上傳,感測器都無法繼續採集及工作,效率低下。
解決:移植ucos實時作業系統,gprs,wifi,感測器採集採用獨立的任務進行處理。並且優化使得gprs和wifi之間可以進行雙模方式進行上傳。
伺服器與裝置用json格式進行資料交換。
json 是輕量級的文字資料交換格式
360 面試專案相關問題
首先hr是個年級差不多的技術宅男,比較客氣,極有耐心,從12點50面到2點15,中間過程針對每個問題都給了我思考的時間。1 說下你了解的搜尋引擎,搜尋乙個關鍵字到返回關鍵字網頁的整個過程?搜尋引擎的基本工作原理包括如下三個過程 首先在網際網路中發現 蒐集網頁資訊 同時對資訊進行提取和組織建立索引庫 ...
web專案中的路徑相關問題
28ttt service 專案名 servlet中,獲得專案絕對路徑 request.getsession.getservletcontext getrealpath 如 e 6.0 workspace 28ttt service servlet中,請求頁面的相對路徑 request.getser...
專案管理相關
1 概要設計需包括 1 總體設計 系統的總體框架圖 模組劃分 系統流程 2 內部介面 用於系統內部各模組間或模組內的互動。3 外部介面 包括業務系統相關介面,gis平台對外提供的標準化介面,特別關注gis平台應用於不同業務系統時所提供的介面,比如 如何定製選單,登入,定製業務系統功能面板等等 4 資...