● 深入瞭解所採用的系統核心
● 分析所採用的 C語言開發工具的特點
● 編寫移植代碼
● 進行移植的測試
● 針對項目的開發平台,封裝服務函數
系統核心
無論項目所採用的系統核心是 MCU、DSP、MPU,進行 μC/OS-II 的移植時,所需要關注的細節都是相近的.
首先,是芯片的中斷處理機制,如何開啟、屏蔽中斷,可否保存前一次中斷
狀態等。還有,芯片是否有軟中斷或是陷阱指令,又是如何觸發的。
此外,還需關注系統對於存儲器的使用機制,諸如內存的地址空間,堆棧的
增長方向,有無批量壓棧的指令等。
採用的 C語言開發工具
最簡單的信息可以從開發工具的手冊中查找,比如:C語言各種數據類型分
別編譯為多少字節;是否支持嵌入式彙編,格式要求怎樣;是否支持「interrupt」
非標準關鍵字聲明的中斷函數;是否支持彙編代碼列表(list)功能,等
編寫移植代碼
μC/OS-II 自身的代碼絕大部分都是用ANSI C編寫的, 而且代碼的層次結構
十分乾淨, 與平台相關的移植代碼僅僅存在於 OS_CPU_A.ASM、 OS_CPU_C.C
以及 OS_CPU.H這三個文件當中。
十分乾淨, 與平台相關的移植代碼僅僅存在於 OS_CPU_A.ASM、 OS_CPU_C.C
以及 OS_CPU.H這三個文件當中。
進行移植的測試
針對項目的開發平台,封裝服務函數
以上為其對os/uc-ii 或是各類 RTOS 移值的要件
----------------------------------------------
先討論到到開發環境上的設定.
以8051/52為例.目前我開發所用到的工具
為Keil C為主.
故要討論以下內容
數據類型分別編譯為多少字節
Data Types | Bits | Bytes | Value Range |
---|---|---|---|
bit | 1 | 0 to 1 | |
signed char | 8 | 1 | -128 to +127 |
unsigned char | 8 | 1 | 0 to 255 |
enum | 8 / 16 | 1 or 2 | -128 to +127 or -32768 to +32767 |
signed short | 16 | 2 | -32768 to +32767 |
unsigned short | 16 | 2 | 0 to 65535 |
signed int | 16 | 2 | -32768 to +32767 |
unsigned int | 16 | 2 | 0 to 65535 |
signed long | 32 | 4 | -2147483648 to +2147483647 |
unsigned long | 32 | 4 | 0 to 4294967295 |
float | 32 | 4 | ±1.175494E-38 to ±3.402823E+38 |
sbit | 1 | 0 or 1 | |
sfr | 8 | 1 | 0 to 255 |
sfr16 | 16 | 2 | 0 to 65535 |
其中的當宣告成 sbit ,sfr ,sfr16 等變數時
需要其數值.ex:sbit led=P1.1
其存取是以direct access
嵌入式彙編(*1)
在keil C中是可以支援加入asm的程序
NAME 模塊名 ;與文件名無關
;定義重定位段 必須按照C51格式定義 彙編遵守C51規範 段名格式為 ?PR?
函數名?模塊名
;聲明引用全局變量和外部子程序 注意關鍵字為 EXTRN 沒有 E
全局變量名直接引用
無參數/無寄存器參數函數 FUNC
帶寄存器參數函數 _FUNC
重入函數 _?FUNC
函數名?模塊名
;聲明引用全局變量和外部子程序 注意關鍵字為 EXTRN 沒有 E
全局變量名直接引用
無參數/無寄存器參數函數 FUNC
帶寄存器參數函數 _FUNC
重入函數 _?FUNC
你可以使用
SRC來產生從C 到 ASM 的檔案
是否支持「interrupt」非標準關鍵字聲明的中斷函數
如前文所述,如果用「interrupt」關鍵字聲明函數,complier在編譯時,會自動將
該函數中使用到的寄存器入棧、出棧保護。且會依不同的中斷程序,決定其需保存
該函數中使用到的寄存器入棧、出棧保護。且會依不同的中斷程序,決定其需保存
的暫存器,keil C是為了節省其stack 的空間.,這會導致各種中斷發生時,出入棧
的內容各不相同。這對於 μC/OS-II是會引起嚴重錯誤的。因為 μC/OS-II 要求中
斷發生時的入棧操作使用和發生任務切換時完全一樣的存儲幀結構。
因此,在移植時、基於 μC/OS-II 進行開發時,都不應當使用「interrupt」關鍵
字,而應用如下結構編寫中斷函數:
因此,在移植時、基於 μC/OS-II 進行開發時,都不應當使用「interrupt」關鍵
字,而應用如下結構編寫中斷函數:
支持彙編代碼列表(list)
The SRC directive creates an assembler source (.SRC) file instead of an object (.OBJ) file. The source file may be assembled with the assembler. Refer to Source (SRC) File for more information regarding assembler source files.
EX:
可以由以下來產生其assembler source file
C51 SAMPLE.C SRC C51 SAMPLE.C SRC(SML.ASM) #pragma src(此為加在其你所要轉換的程序前
#pragma SRC
#pragma SMALL
unsigned int asmfunc1 (
unsigned int arg)
{
return (1 + arg);
}
沒有留言:
張貼留言