中斷裡面開陣列以及sprintf函式的解決辦法

2021-06-22 22:37:22 字數 779 閱讀 7928

前天遇到了中斷裡面開不了陣列的問題,經驗證果然是堆疊記憶體的問題,然後經過我查資料,終於找到了編譯檔案裡面的乙個.map檔案

裡面就是記憶體分配的**,部分如下:

section                            start      end         size   align

r00002100  00002453       354   4

su00002454  00002753       300   4

si00002754  00002853       100   4

可以看到其中si是中斷堆疊,su是使用者資料堆疊。中斷堆疊只有100(16進製制)位元組的大小。這個大小其實也不小了,但是如果開大的陣列的話還是不夠的,因為中斷啟動後本身會占用一些(我猜測),但是sprintf函式居然有100都不夠,確實讓我驚訝。我之後開到了800,問題立刻解決了。sprintf可以用了,開陣列開到1000大小都沒問題。

我用的是瑞薩的微控制器,hew開發環境,它裡面想要對堆疊操作,我目前發現可以有兩個半辦法。一是在新建工程時有提示,二是裡面有個stacksct.h的標頭檔案可以設定。然後還有半個辦法是裡面在編譯選項裡面有個對堆疊位址順序的調整,不能調整大小,但能調整位址值。

準確的說中斷資料是si棧,棧向上增長,會碰到su使用者資料,導致資料衝突,程式亂飛。我開始時只找到了調整位址值的方法,將si移到了su上面,結果也暫時解決了衝突的問題,可是之後在執行程式時,有地方出現了bug,看來是衝突到了r。

但是舊的問題解決了,新的問題出來了。

關於uip這個tcp建議協議的問題。

嵌入式裡的中斷解讀以及中斷服務函式

不要年紀輕輕,就覺得自己進入了人生低谷,其實,後來你會發現你還有很大的下降空間。從本質上來講,中斷是一種電訊號,當裝置有某種事件發生時,它就會產生中斷,通過匯流排把電訊號傳送給中斷控制器。如果中斷的線是啟用的,中斷控制器就把電訊號傳送給處理器的某個特定引腳。處理器於是立即停止自己正在做的事,跳到中斷...

php裡面常用的陣列函式和字串函式

php裡面的常用陣列函式 arr 1,5,68,15,45,23,78,95,2,6 arr1 1,5,6,2 arrs array 0 array 1,5,68,15,4 1 array 15,45,23,78 2 array 23,78,95,2,6 3 array 5,68,15,45,23 ...

往物件裡面新增自己想要的字段以及陣列內容新增

1 往物件裡面新增字段 houselist i name housenamehouselist i 是乙個物件,可以換成自己想要的對像就行 name是自己想要新增的字段的名字,自定義的,housename是自己新增的對應欄位的內容,也是自定義的。2 陣列新增內容 this.actions.push ...