www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導讀]操作系統(tǒng)是用來管理系統(tǒng)硬件、軟件及數據資源,控制程序運行,并為其它應用軟件提供支持的一種系統(tǒng)軟件。根據不同的種類,又可分為實時操作系統(tǒng)、桌面操作系統(tǒng)、服務器操作系統(tǒng)等。對于一些小型的應用,對系統(tǒng)實時性

操作系統(tǒng)是用來管理系統(tǒng)硬件、軟件及數據資源,控制程序運行,并為其它應用軟件提供支持的一種系統(tǒng)軟件。根據不同的種類,又可分為實時操作系統(tǒng)、桌面操作系統(tǒng)、服務器操作系統(tǒng)等。對于一些小型的應用,對系統(tǒng)實時性要求高,硬件資源有限等的情況下,應盡量避免使用復雜龐大的操作系統(tǒng)(如Linux),使用小型的實時操作系統(tǒng)(如uCOS)更能滿足應用的需求。筆者此處就uCOS-II的移植作一個簡單的介紹。

1. 代碼準備

uCOS-II V2.91源碼,這個版本的源碼是uCOS-II的最新版本,請讀者自行從Micrium官網或其它網站下載這個版本的源碼,當然,其它版本的uCOS-II也是一樣方式移植的。Micrium官網也給出了一些cpu的移植范例,可供參考,此處是下載源碼,一步一步進行移植。

s3c2416啟動代碼工程,啟動代碼是s3c2416/50/51這系列arm9芯片在運行用戶c代碼main函數之前必須先運行的代碼,啟動代碼支持sd、Nand啟動,為用戶設置系統(tǒng)時鐘,初始化內存,自動識別啟動設備并搬移代碼到RAM,MMU映射,中斷管理等,用戶只需專注于用c開發(fā)其它功能函數即可。關于啟動代碼以及啟動代碼的實現過程,筆者前面章節(jié)有非常詳細的介紹。此處以GCC下移植uCOS為講解,下載”GCC啟動代碼工程應用實例”中的啟動代碼源碼即可。如果在MDK下開發(fā),下載”MDK啟動代碼工程應用實例”中的啟動代碼源碼。

用戶代碼,用c開發(fā)的所有功能代碼,其中,用戶代碼入口為main()函數,在這里實現uCOS多任何運行代碼。

2. 工程搭建

在linux操作系統(tǒng)下任一路徑下新建一個uCOS的工程目錄,該目錄下新建uCOS-II目錄用來保存uCOS相關部分。下載uCOS-II V2.91源碼并解壓,把Source目錄全部拷貝到uCOS-II目錄下,同時在目錄下新建一個Cfg目錄用來保存uCOS的配置文件,新建一個Ports目錄用來保存uCOS移植接口文件。

把啟用代碼目錄start_code拷貝到UCGUI目錄下,這部分代碼無需任何的修改。并保留其中的Makefile這些文件。GCC啟動代碼下的工程管理Makefile提取自uboot,可以方便地增加源代碼以及代碼目錄。

在UCGUI目錄下新建apps目錄,用來保存應用相關的源碼。

最終的UCGUI目錄內容如下:

uCOS/start_code,保存s3c2416啟動代碼相關的部分

uCOS/app,保存工個工程的應用部分

uCOS/uCOS-II/Cfg,保存uCOS的配置部分

uCOS/uCOS-II/Ports,保存uCOS移植部分

uCOS/uCOS-II/Source,保存uCOS的源碼,通常可直接替換更高版本的源碼

3. uCOS移植

uCOS-II應用在不同的cpu,需要在uCOS-II/Ports目錄中實現os_cpu.h、os_cpu_a.s、os_cpu_c.c這三個文件的修改編寫。

3.1. os_cpu.h的編寫3.1.1. 外部聲明

uCOS-II用OS_CPU_GLOBALS和OS_CPU_EXT來聲明外部的變量、符號,這部分如下:

#ifdef OS_CPU_GLOBALS

#define OS_CPU_EXT

#else

#define OS_CPU_EXT extern

#endif

3.1.2. 數據類型定義

為了確保uC/OS-II的可移植性,在os_cpu.h中聲明了一系列的類型定義。這些類型不依賴于c數據類型如int、short、long等。數據類型定義如下:

typedef unsigned char BOOLEAN; /* 布爾變量*/

typedef unsigned charINT8U; /* 無符號8位整型變量*/

typedef signed char INT8S; /* 有符號8位整型變量*/

typedef unsigned shortINT16U; /* 無符號16位整型變量*/

typedef signed shortINT16S; /* 有符號16位整型變量*/

typedef unsigned int INT32U; /* 無符號32位整型變量*/

typedef signed int INT32S; /* 有符號32位整型變量*/

typedef float FP32; /* 單精度浮點數(32位長度)*/

typedef double FP64; /* 雙精度浮點數(64位長度)*/

3.1.3. 棧配置

uCOS-II適用于8位、16位、32位的cpu,不同字長的cpu,其棧字長也是不一樣的,uCOS-II用OS_STK表棧類型,同時棧的生長方式可以由高地址到低地址,也可由低地址到高地址。對于arm架構cpu,??梢韵蛳拢部梢韵蛏显鲩L。但對于各個編譯器是約定棧由高地址向低地址增長的,棧字長為32位。棧配置內容如下:

typedef INT32U OS_STK; /* 棧是32位寬度*/

#define OS_STK_GROWTH 1 /* 棧是從高往下生長*/

3.1.4. 臨界區(qū)訪問

對于可搶占式操作系統(tǒng),有一小段關鍵代碼必須獨占訪問,如果有一個任務(線程)正在訪問臨界代碼,則其它任務(線程)不能再進入該段代碼,直到占有訪問權的任務(線程)退出這個臨界區(qū)。uCOS-II在訪問內核臨界區(qū)時是通過OS_ENTER_CRITICAL()/OS_EXIT_CRITICAL()這兩個宏開關中斷來禁止任務搶占來確保臨界區(qū)不被破壞。通常,臨界區(qū)訪問有三種方式,一是直接開關中斷,二是從棧中保存/恢復中斷狀態(tài)再開關中斷,三是從局部變量保存/恢復中斷狀態(tài)再開關中斷。uCOS-II采用了第三種開關中斷方式,需實現狀態(tài)保存恢復開關中斷CPU_SR_Save()/CPU_SR_Restore(),需引入一個OS_CPU_SR類型的變量保存cpu中斷狀態(tài),臨界區(qū)中斷訪問內容如下:

#define OS_CRITICAL_METHOD 3 /*局部變量保存/恢復狀態(tài)再開關中斷 */

typedef INT32U OS_CPU_SR; /*開關中斷前用來保存/恢復中斷狀態(tài)*/

#define OS_ENTER_CRITICAL() {cpu_sr =CPU_SR_Save ();} /* 關中斷 */

#define OS_EXIT_CRITICAL() {CPU_SR_Restore (cpu_sr);} /* 開中斷*/

3.1.5. 函數聲明

uCOS-II需匯編實現開關中斷、任務切換這些與體系結構相關的功能,在匯編文件os_cpu_a.s中進行實現,頭文件進行函數聲明,聲明有如下幾個函數:

#define OS_TASK_SW() OSCtxSw() /* 任務級任務切換函數*/

OS_CPU_SR CPU_SR_Save(void);

void CPU_SR_Restore(OS_CPU_SR cpu_sr);

void OSStartHighRdy(void);

void OSCtxSw(void);

void OSIntCtxSw(void);

3.2. os_cpu_a.s的編寫

高級語言不能實現保存/恢復寄存器,因此uCOS-II需要編寫匯編實現六個簡單的函數,CPU_SR_Save ()、CPU_SR_Restore()、OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()、IRQ_SaveContext()。

3.2.1. CPU_SR_Save()函數

由于采用從局部變量保存/恢復中斷狀態(tài)再開關中斷的方式,用R0返回中斷狀態(tài),并關閉中斷,該函數是OS_ENTER_CRITICAL()的宏實現。

.globl CPU_SR_Save

CPU_SR_Save:

MRS R0, CPSR

ORR R1, R0, #0xC0 // 設置IRQ,FIQ均禁止中斷

MSR CPSR_c, R1

BX LR // 禁止中斷,返回中斷狀態(tài)到R0中

3.2.2. CPU_SR_Restore()函數

臨界區(qū)訪問完后,需恢復關中斷前的中斷狀態(tài),該函數是OS_EXIT_CRITICAL()的宏實現。

.globl CPU_SR_Restore

CPU_SR_Restore:

MSR CPSR_c, R0

BX LR

3.2.3. OSStartHighRdy()函數

當用戶通過OSStart()啟動uCOS內核進行管理時,OSStart()會首先調用OSStartHighRdy()來運行已創(chuàng)建任務中優(yōu)先級最高的任務,OSStartHighRdy()需完成以下工作:

(1) 禁止中斷切換到管理模式,所有任務均工作在管理模式

(2) 調用任務切換鉤子函數,即先調用OSTaskSwHook()函數

(3) 標記uCOS-II內核已啟動運行,OSRunning = 1

(4) 獲得最高優(yōu)先級任務TCB,得到任務棧指針,SP切換到任務棧

(5) 出棧SP中的任務棧,包括任務狀態(tài)寄存器CPSR,R0-R12,LR,繼續(xù)執(zhí)行任務。

#define I_Bit 0x80// IRQ中斷禁止位

#define F_Bit 0x40// FIQ中斷禁止位

#define Mode_SVC 0x13 // 管理模式

#define Mode_SYS 0x1f // 系統(tǒng)模式

.extern OSTaskSwHook

.extern OSRunning

.extern OSTCBHighRdy

.globl OSStartHighRdy

OSStartHighRdy:

MSR CPSR_c, #(I_Bit+F_Bit+Mode_SVC) // 禁止中斷切換到管理模式

LDR R0, =OSTaskSwHook // 調用任務切換鉤子函數

MOV LR, PC // 準備函數返回地址

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

加利福尼亞庫爾弗城2024年7月16日 /美通社/ --?Snail, Inc. (納斯達克股票代碼: SNAL) (以下簡稱"蝸牛游戲"或"公司")是一家領先的全球獨立開發(fā)商和發(fā)行商,專注于互動數字娛樂,今日宣布方舟:...

關鍵字: iOS 安卓系統(tǒng) 移植 移動平臺

上海2023年2月16日 /美通社/ -- 近日,諾華中國宣布與中國紅十字基金會正式啟動"中國地中海貧血救助項目"廣西地區(qū)專項援助,將在當地定向資助困難家庭地中海貧血患兒,同時通過相關醫(yī)生培...

關鍵字: BSP 控制 移植 大眾

北京2022年12月7日 /美通社/ -- 2022年12月3日,由高博醫(yī)學(血液病)廣東研究中心南方春富(兒童)血液病研究院、南方醫(yī)科大學南方醫(yī)院共同主辦的高博醫(yī)學論壇·華南造血干細胞移植論壇通過線下線上...

關鍵字: 移植 HD PID 血細胞

捐款近4000萬 上海2022年12月7日 /美通社/ -- 2022年12月7日下午,中芯國際"芯肝寶貝計劃"十年紀念暨2022年度捐贈儀式在上海仁濟醫(yī)院舉行。十年來,該項目捐贈善款總額近4000...

關鍵字: 中芯國際 移植

如果你是在Linux下做開發(fā),你就必須知道Makefile是什么東西,如果不知道那就可以說你不是一個合格的Linux開發(fā)工程師,因為Makefile是必備的一項技能。那么,Makefile到底有什么作用呢?首先,gcc大...

關鍵字: Linux Makefile gcc

北京2022年11月14日 /美通社/ -- 2022年10月,高博醫(yī)學(血液?。┍本┭芯恐行谋本└卟┎┤梳t(yī)院造血干細胞移植科迎來了五周歲"生日"。在吳彤主任帶領下,移植科于2017年從無到有,歷經五...

關鍵字: 移植 OS MT CD

上海2022年11月6日 /美通社/ -- 在第五屆中國國際進口博覽會期間,武田制藥攜5款創(chuàng)新產品亮相武田罕見遺傳與血液疾病領域專場發(fā)布會。用于移植后抗巨細胞病毒(CMV)感染或疾病治療[1]的馬立巴韋[2]迎來&quo...

關鍵字: 移植 BSP CD FDA

亙喜生物科技集團宣布正在中國開展的、旨在全面評估GC007g治療復發(fā)/難治性急性B淋巴細胞白血病效果的1/2期注冊性臨床試驗順利進入2期研究階段,首例入組患者已給藥。GC007g是亙喜生物旗下的一款靶向CD19的供者來源...

關鍵字: 移植 CD

北京2022年9月9日 /美通社/ -- 諾誠健華(香港聯交所代碼:09969)今天宣布,tafasitamab (Minjuvi®)聯合來那度胺治療不適合自體干細胞移植 (ASCT) 條件的復發(fā)/難治彌漫性大B...

關鍵字: VI NJU BSP 移植

蘇州2022年8月19日 /美通社/ -- 近日,華中科技大學同濟醫(yī)學院附屬協(xié)和醫(yī)院心外科董念國教授團隊運用與心擎醫(yī)療聯合研發(fā)的短中期體外全磁懸浮心室輔助裝置MoyoAssist®,成功救治三例危重的終...

關鍵字: 磁懸浮 移植 IC 靜脈
關閉