在MC68HC908GP32上移植μC/OS-II
發布時間:2007/8/28 0:00:00 訪問次數:958
在前幾講中,介紹了μC/OS-II的概念、工作機制,還介紹了μC/OS-II在Intel 80X86CPU上的移植,相信讀者通信學習,已經對移植的過程和步驟有了一定的了解。ΜC/OS-II最初是為摩托羅拉68HC11系列單片機設計的。68HC11系列單片機有外部總線,可以外接RAM和ROM;而沒有外部總線8位MCU。由于RAM容量的限制,移植就存在一定的困難;但對于有些8位的MCU,將μC/OS-II移植到MOTOROLA MC68H908GP32(以下簡稱GP32)上。
一、在GP32上移植μC/OS-11的主要問題
在第(4)講中,介紹過要移植μC/OS-11,目標處理必須滿足以下要求:
(1)處理器的C編譯器能產生可重入代碼;
(2)用C語言就可以打開和關閉中斷;
(3)處理器支持中斷,并且能產生定時中斷(通常在10~100Hz之間);
(4)處理器支持足夠的RAM,保存全局變量和作為多任務環境下的任務堆棧。
(5)處理器有將堆棧指針和其他CPU寄存器讀出和存儲到堆棧或內存中的指令。
編譯后的μC/OS-II的內核大約有6~10KB;如果只保留最核心的代碼,則最小可壓縮到2KB。RAM的占用與系統中的任務數有關,任務堆棧要占用大量的RAM空間,堆棧的大小取決于任務的局部變量、緩沖區大小及可能的中斷嵌套的層數。所以,所要移植的系統中必須有足夠的RAM資源。而像MOTOROLA6805系列的8位MCU,由于RAM資源太小且堆棧指針是固定的,不能滿足上面的第(4)條和第(5)條要求,所以μC/OS-II不能在這類處理器上運行。
GP32是68HC08家庭的成員,具有512字節的片內RAM,32K字節的片內Flash,8MHz總線時鐘。內部寄存器包括1個8位累加器A,1個16位索引寄存器X,1個16位堆棧指針寄存器SP,1個16位程序指針寄存器PC及1個8位標志寄存器CCR。與6805系列MCU相比,68HC08系列MCU的堆棧指針為16位,可以自由尋址。這就滿足了移植條件(5),且可以使用C編譯器生成代碼。GP32的用戶手冊可以在摩托羅拉公司的主頁上下載,http://www.motorola.com。
在GP32上移植μC/OS-II的主要困難還是RAM資源太少。為了移植成功,必須采取措施減少RAM的用量,包括限制系統中的任務數量、仔細修改μC/OS-II內核、去掉不使用的部分、限制任務的斷嵌套層數、在任務中盡量減少使用局部變量等等。在采取了上述措施后,可將RAM用量減少到最低。但需要提醒的是,為了節省堆棧空間而采用的限制中斷嵌套層數的方法將影響系統的實時性能。所以,在GP32上移植μC/OS-II更多的是一種演示,能更好地說明μC/OS-II內核的可裁剪性和靈活性。
在本講中將介紹一個移植實例。為了減少RAM用量,在本例中只運行了2個用戶任務。盡量減池一內核中不必要的模塊(包括由箱、消息隊列、內存管理等),去掉了任務掛起、喚醒和刪除等擴展功能,但仍然支持任務的創建和管理,也保留了信號量模塊來用來任務間的通訊。
二、工具和運行環境
要實現μC/OS-II向GP32的移植,需要一個面向MC68HC08的C編譯器。筆者使用的是HIWARE公司的C編譯器。移植過程同樣適用于MC68HC08家庭的其他成員。
三、移植中所需修改的文件
首先是編寫整個項目的公共頭文件include.h,這個文件定義使用內核中的哪些模塊。Include.h會被所有的C源程序引用。還要修改和CPU相關的三個文件,分別是頭文件OS_CPU08.H、匯編代碼文件OS_CPU08.ASM和C代碼文件OS_CPU08.C。
1.include.h文件
include.h是主頭文件,在所有后綴名為.C的文件的開始都包含include.h文件。文件中可以內核進行裁剪。在本例中定義如下:
#define OS_MAX_EVENTS 2 /*共用了2個信號量*/
#define OS_MAX_MEM_PART 0 /*不使用內存塊功能*/
#define OS_MAX_QS 0 /*不使用消息隊列功能*/
#define OS_MAX_TASKS 3 /*共有3個任務(包括空閑任務)*/
#define OS_LOWEST_PRIO 20 /*定義最低優先級20*/
在前幾講中,介紹了μC/OS-II的概念、工作機制,還介紹了μC/OS-II在Intel 80X86CPU上的移植,相信讀者通信學習,已經對移植的過程和步驟有了一定的了解。ΜC/OS-II最初是為摩托羅拉68HC11系列單片機設計的。68HC11系列單片機有外部總線,可以外接RAM和ROM;而沒有外部總線8位MCU。由于RAM容量的限制,移植就存在一定的困難;但對于有些8位的MCU,將μC/OS-II移植到MOTOROLA MC68H908GP32(以下簡稱GP32)上。
一、在GP32上移植μC/OS-11的主要問題
在第(4)講中,介紹過要移植μC/OS-11,目標處理必須滿足以下要求:
(1)處理器的C編譯器能產生可重入代碼;
(2)用C語言就可以打開和關閉中斷;
(3)處理器支持中斷,并且能產生定時中斷(通常在10~100Hz之間);
(4)處理器支持足夠的RAM,保存全局變量和作為多任務環境下的任務堆棧。
(5)處理器有將堆棧指針和其他CPU寄存器讀出和存儲到堆棧或內存中的指令。
編譯后的μC/OS-II的內核大約有6~10KB;如果只保留最核心的代碼,則最小可壓縮到2KB。RAM的占用與系統中的任務數有關,任務堆棧要占用大量的RAM空間,堆棧的大小取決于任務的局部變量、緩沖區大小及可能的中斷嵌套的層數。所以,所要移植的系統中必須有足夠的RAM資源。而像MOTOROLA6805系列的8位MCU,由于RAM資源太小且堆棧指針是固定的,不能滿足上面的第(4)條和第(5)條要求,所以μC/OS-II不能在這類處理器上運行。
GP32是68HC08家庭的成員,具有512字節的片內RAM,32K字節的片內Flash,8MHz總線時鐘。內部寄存器包括1個8位累加器A,1個16位索引寄存器X,1個16位堆棧指針寄存器SP,1個16位程序指針寄存器PC及1個8位標志寄存器CCR。與6805系列MCU相比,68HC08系列MCU的堆棧指針為16位,可以自由尋址。這就滿足了移植條件(5),且可以使用C編譯器生成代碼。GP32的用戶手冊可以在摩托羅拉公司的主頁上下載,http://www.motorola.com。
在GP32上移植μC/OS-II的主要困難還是RAM資源太少。為了移植成功,必須采取措施減少RAM的用量,包括限制系統中的任務數量、仔細修改μC/OS-II內核、去掉不使用的部分、限制任務的斷嵌套層數、在任務中盡量減少使用局部變量等等。在采取了上述措施后,可將RAM用量減少到最低。但需要提醒的是,為了節省堆棧空間而采用的限制中斷嵌套層數的方法將影響系統的實時性能。所以,在GP32上移植μC/OS-II更多的是一種演示,能更好地說明μC/OS-II內核的可裁剪性和靈活性。
在本講中將介紹一個移植實例。為了減少RAM用量,在本例中只運行了2個用戶任務。盡量減池一內核中不必要的模塊(包括由箱、消息隊列、內存管理等),去掉了任務掛起、喚醒和刪除等擴展功能,但仍然支持任務的創建和管理,也保留了信號量模塊來用來任務間的通訊。
二、工具和運行環境
要實現μC/OS-II向GP32的移植,需要一個面向MC68HC08的C編譯器。筆者使用的是HIWARE公司的C編譯器。移植過程同樣適用于MC68HC08家庭的其他成員。
三、移植中所需修改的文件
首先是編寫整個項目的公共頭文件include.h,這個文件定義使用內核中的哪些模塊。Include.h會被所有的C源程序引用。還要修改和CPU相關的三個文件,分別是頭文件OS_CPU08.H、匯編代碼文件OS_CPU08.ASM和C代碼文件OS_CPU08.C。
1.include.h文件
include.h是主頭文件,在所有后綴名為.C的文件的開始都包含include.h文件。文件中可以內核進行裁剪。在本例中定義如下:
#define OS_MAX_EVENTS 2 /*共用了2個信號量*/
#define OS_MAX_MEM_PART 0 /*不使用內存塊功能*/
#define OS_MAX_QS 0 /*不使用消息隊列功能*/
#define OS_MAX_TASKS 3 /*共有3個任務(包括空閑任務)*/
#define OS_LOWEST_PRIO 20 /*定義最低優先級20*/
上一篇:蘇州IC產業鏈布局的遺憾和尷尬
上一篇:基于移動通訊終端的ESD問題研究