UCOS移植到leon2上

2021-04-12 19:53:02 字數 2629 閱讀 2293

移植的**早就寫好了,但是測試發了更多的時間,現在測試還在進行中。

先前移植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編譯器,沒有使用限制,看起來一切都...