移植的**早就寫好了,但是測試發了更多的時間,現在測試還在進行中。
先前移植ucos是基於sparc v8的register window 模型,後來寫完**,發現問題重重,於是在老師的建議下還是重新返工了,重寫了基於mflat模型的**,重寫的時間也就是一天的時間,後來就是一直在測試。
一直是沒有找到很好的測試方法,所以只能用直接寫幾個任務,然後向串列埠列印東西。要是誰有好的方法,告訴我一聲呵。下面還是說說把ucos移植到sparc v8上需要注意的問題吧。
最先碰到的是中斷返回的問題,sparc 跟其它的處理器在這點上很不同。當發生中斷的時候,sparc是還未執行當前指令,而其它處理器一般是已執行完當前指令了。所以當我們中斷返回時,要用這麼一條語句
jmpl %l1,%g0
rett %l2
nop這樣,就會跳回了原來程式了。
在ucos移植過程中,要把data cache以及mmu關掉,因為有data cache 可能會導致cache的資料和外部的io資料不一致,而ucos作業系統是不支援mmu的。
在修改os_cpu_a.s這個檔案中,不管是osctxsw還是osintctxsw,返回時最好用rett指令,因為這才不會改變原視窗的暫存器。
當然了,在移植的過程中要特別注意sparc結構的堆疊。
__________ ___________ %sp ( foo() )
%sp | %l0-%l7 | 8*4
儲存foo()
的%l0-%l7
暫存器|__________|
%sp+32 | %i0-%i7 | 8*4
儲存foo()
的%i0-%i7
暫存器(%i7
包含foo()
的返回位址
)|__________|
%sp+64 |
返回值位址
| 1*4
為下乙個被調函式保留的返回值位址空間
|__________|
%sp+68 |
引數位址
| 6*4
為下乙個被調函式保留(前
6個)引數的空間
|__________|
%sp+92 |
引數位址
| n*4 n>=1
如果下乙個被調函式的引數
>6
,多出的引數在這裡分配
|__________|
|區域性變數
|| .... | n*8
為foo()
的區域性變數分配空間,每
8個位元組為乙個分配單元
| |
|__________|
| 臨時區域
| 4*4 c
編譯器用來計算表示式時儲存一些臨時變數的區域
|__________|___________ %fp ( main() )
%fp | %l0-%l7 | 8*4
儲存main()
的%l0-%l7
暫存器|__________|
%fp+32 | %i0-%i7 | 8*4
儲存main()
的%i0-%i7
暫存器(%i7
包含main()
的返回位址
)|__________|
%fp+64 |
返回值位址
| 1*4
為被調函式
(這裡是
foo())
保留的返回值位址空間
|__________|
%fp+68 |
引數位址
| 6*4
為被調函式
(這裡是
foo())
保留前6
個引數的位址間
|__________|
%fp+92 |
引數位址
| n*4 n>=1
如果下乙個被調函式的引數
>6
,多出的引數在這裡分配
|__________|
|區域性變數
|| .... | n*8
為main()
的區域性變數分配空間,每
8個位元組為乙個單元
| |
|__________|
| 保留區域
| 4*4 4
個字的保留區域
|__________|
| %l0-%l7 |
|__________|
....
堆疊高址
如上面所示,%sp+64為下乙個被調函式的返回位址空間,所以在我們為每個任務分配堆疊時,要為每個任務的堆疊的高位址空間預留出一些
如,我是這樣建立任務的
ostaskcreate(task1, (void *)&taskdata[0], &taskstk[0][task_stk_size - 0x19], 1);
這樣子我就為任務預留了0x18*4 byte
最後說讓我折騰最久的乙個問題,leon2的板的時鐘主頻是120m,發現程式跑得怪怪的,後來的老師的提醒下,把它改為了100m,程式執行就較為正常了
測試中。。。。。
glib移植到ARM上
1.說明 在arm上移植glib庫很麻煩,所依賴的包很多,本次移植涉及到的包主要有libffi 3.0.13.tar.gz,gettext 0.18.3.tar.gz。涉及到的工具有glib genmarshal,glib compile schemas,automake.2.配置 configur...
uCos在stm32上的移植總結
作業系統 windows xp 開發環境 keil uvision3 mdk 實驗開發板 open103z 一 準備 2 ucos ii 原始碼 移植版本 3 stm32標準外設庫 stm32標準外設庫是stm32全系列晶元的外設驅動 4 jlink 器驅動程式 找不到官網 二 建立工程資料夾結構 ...
117 MPC5634M上嘗試移植ucos系統
大學的時候嘗試過在8051微控制器上做ucos的作業系統,最近嘗試做了一下mpc5634m上的系統移植。沒有什麼特別的目的,只是覺得rtos算是嵌入式中相對來說有點技術含量的東西,而我自己的手中恰好又有這個乙個開發板。如今nxp的官網上提供支援powerpc的gcc編譯器,沒有使用限制,看起來一切都...