μc/os移植的條件
uCOS II的移植需要滿足以下要求:
1)處理器的C編譯器可以產(chǎn)生可重入代碼:可以使用C調(diào)用進入和退出Critical Code(臨界區(qū)代碼);
2)處理器必須支持硬件中斷,并且需要一個定時中斷源;
3)處理器需能容納一定數(shù)據(jù)的硬件堆棧;
4)處理器需有能在CPU寄存器與內(nèi)存和堆棧交換數(shù)據(jù)的指令。
移植需要完成的工作
CPU的接口部分(Ports)–需要移植的代碼部分
匯編文件(OS_CPU_A.ASM)、處理器相關(guān)C文件(OS_CPU.H、OS_CPU_C.C)中相關(guān)函數(shù)和變量的聲明定義
OS_CPU_A.ASM文件改寫
OSStartHighRdy() //OS啟動時調(diào)用,加載用戶最高優(yōu)先級的任務(wù)
OSCtxSw() //任務(wù)級調(diào)度
OSIntCtxSw() //中斷級調(diào)度
OSTickISR() //時鐘中斷響應(yīng),將檢測到延時結(jié)束的任務(wù)加入就緒隊列,
.cdecls C, LIST, "msp430.h"
;用戶鉤子,對應(yīng)os_cpu_c.c中的HOOK函數(shù)
.ref OSIntExit
.ref OSIntNesting
.ref OSISRStkPtr
.ref OSPrioCur
.ref OSPrioHighRdy
.ref OSRunning
.ref OSTCBCur
.ref OSTCBHighRdy
.ref OSTaskSwHook
.ref OSTimeTick
;全局量
.global OSCtxSw
.global OSCPURestoreSR
.global OSCPUSaveSR
.global OSIntCtxSw
.global OSStartHighRdy
.global OSTickISR
;中斷使能操作之前保存SR,恢復(fù)中斷使能時CPU狀態(tài)不變
.asmfunc ;保存SR寄存器
OSCPUSaveSR:
MOV.W SR, R12
DINT
NOP
RETA
.endasmfunc
.asmfunc ;恢復(fù)SR寄存器,保持CPU狀態(tài)
OSCPURestoreSR:
MOV.W R12, SR
NOP
RETA
.endasmfunc
.asmfunc
;OS初始化后,準備運行時調(diào)用
;準備運行的最高優(yōu)先級的任務(wù)。任務(wù)就緒表第一個
;被OSStart()調(diào)用
OSStartHighRdy:
CALLA #OSTaskSwHook
MOV.B #1, &OSRunning ; 內(nèi)核運行標(biāo)志
MOVX.A SP, &OSISRStkPtr ; 保存中斷堆棧,系統(tǒng)堆棧
MOVX.A &OSTCBHighRdy, R13 ; 將最高優(yōu)先級任務(wù)準備
MOVX.A @R13, SP ;將SP指向OSTCBHighRdy,即任務(wù)堆棧
POPM.A #12, R15
RETI ; 模擬中斷,中斷退出應(yīng)執(zhí)行的內(nèi)容在OSISRStkPtr中
.endasmfunc
.asmfunc
;任務(wù)級上下文切換
OSCtxSw:
POP.W R12 ;CALLA調(diào)用,當(dāng)前PC地址被壓入系統(tǒng)棧
POP.W R13 ;這里使用的是擴展內(nèi)存地址,地址長度為20位
PUSH.W R12 ;因此壓棧的寫法有變化
RLAM.A #4, R13
RLAM.A #4, R13
RLAM.A #4, R13
MOVX.W SR, R12
ADDX.A R13, R12
PUSH.W R12 ;保存PC和SR
PUSHM.A #12, R15 ; 保存上一個任務(wù)的上下文到它的任務(wù)堆棧
MOVX.A &OSTCBCur, R13 ;任務(wù)堆棧構(gòu)建完成
MOVX.A SP, 0(R13) ;前一個任務(wù)的上下文保存
CALLA #OSTaskSwHook ;用戶鉤子
MOV.B &OSPrioHighRdy, R13 ;切換任務(wù)
MOV.B R13, &OSPrioCur
MOVX.A &OSTCBHighRdy, R13 ;
MOVX.A R13, &OSTCBCur
MOVX.A @R13, SP ; 堆棧寄存器指向任務(wù)堆棧
POPM.A #12, R15 ; 從任務(wù)PCB中恢復(fù)寄存器內(nèi)容,程序開始執(zhí)行
RETI ; 從中斷返回
.endasmfunc
;OSIntCtxSw()是唯一一個與編譯器相關(guān)的函數(shù),也是用戶問的最多的。
;中斷級上下文切換
;在此之前必須已經(jīng)對上下文內(nèi)容進行了保存
;由于中斷已經(jīng)發(fā)生,此處不需要再保存CPU寄存器
;OSIntCtxSw()需要調(diào)整堆棧指針,去掉堆棧中一些不需要的內(nèi)容,以使堆棧中只包含任務(wù)的運行環(huán)境
.asmfunc
OSIntCtxSw:
CALLA #OSTaskSwHook
MOV.B &OSPrioHighRdy, R13
MOV.B R13, &OSPrioCur
MOVX.A &OSTCBHighRdy, R13
MOVX.A R13, &OSTCBCur
MOVX.A @R13, SP ; 堆棧寄存器指向任務(wù)PCB
POPM.A #12, R15 ;從任務(wù)PCB中恢復(fù)寄存器內(nèi)容,程序開始執(zhí)行
RETI ; 中斷返回
.endasmfunc
;中斷服務(wù)程序中會執(zhí)行OSTimeTick()
;每進行一次中斷,OSTimeTick()都會遍歷所有掛起任務(wù)然后對有延時的任務(wù)控制塊TCB中的OSTCBDly減1
;這樣,當(dāng)延時減為0時,就會把減為0的任務(wù)在就緒表中進行注冊登記。
.sect ".text:_isr" ; 這個函數(shù)在中斷向量空間
.asmfunc
;
OSTickISR: ;看門狗時鐘中斷
PUSHM.A #12, R15 ;保存寄存器內(nèi)容
BIC.W #0x01, &SFRIE1 ;禁止看門狗中斷
CMP.B #0, &OSIntNesting ;無中斷嵌套,跳轉(zhuǎn)
JNE OSTickISR1 ;跳轉(zhuǎn)到下面的模塊
MOVX.A &OSTCBCur, R13 ;保存任務(wù)堆棧
MOVX.A SP, 0(R13)
MOVX.A &OSISRStkPtr, SP ;加載中斷堆棧
;只有當(dāng)中斷全部執(zhí)行完畢,
OSTickISR1:
INC.B &OSIntNesting ;產(chǎn)生了一個時鐘中斷
BIS.W #0x01, &SFRIE1 ; 禁止看門狗
NOP
EINT ; 允許中斷嵌套
NOP
CALLA #OSTimeTick ; 調(diào)用節(jié)拍處理函數(shù)
DINT ; 一般禁用中斷之前調(diào)用OSIntExit()
NOP
CALLA #OSIntExit ;退出中斷
CMP.B #0, &OSIntNesting ;中斷無嵌套時,跳轉(zhuǎn)
JNE OSTickISR2
MOVX.A &OSTCBHighRdy, R13 ;恢復(fù)任務(wù)堆棧寄存器
MOVX.A @R13, SP
OSTickISR2:
POPM.A #12, R15
RETI ; 從中斷中返回
.endasmfunc
.sect WDT_VECTOR
.short OSTickISR ; 中斷向量,看門狗定時器模式
.end
OS_CPU_A.ASM中與MSP430硬件機制相關(guān)的部分
1.MSP430單片機有R0~R15十六個通用寄存器,其中PC占用R0,SP占用R1,SR占用R3,因此,切換任務(wù)時有16個寄存器值需要保存。
2.MSP430開關(guān)中斷
_EINT開總中斷
DINT關(guān)總中斷
3.中斷處理流程
任何當(dāng)前執(zhí)行的指令完成。
指向下一條指令的PC 被壓入堆棧。
SR 被壓入堆棧。
如果在最后一個指令執(zhí)行期間由多個中斷出現(xiàn),那么具有最高優(yōu)先級的中斷被選中并等待被處理。
在單一源標(biāo)志上,中斷請求標(biāo)志自動復(fù)位。對于軟件處理,多個源標(biāo)志保持被設(shè)定。
SR 被清除。這將終止任何低功耗模式。由于GIE 位被清除,之后的中斷被禁用。
中斷矢量的內(nèi)容被載入到PC:程序繼續(xù)在中斷處理例程所處的地址上執(zhí)行。
4.中斷處理程序由以下指令終止:
RETI(從中斷處理例程返回)
5.時鐘中斷源時鐘的選擇
在這里使用的是看門狗時鐘那么相應(yīng)的也要打開看門時鐘的中斷,但是不要錯誤的把看門狗設(shè)置成安全模式,這樣會造成系統(tǒng)反復(fù)重啟
6.MSP430為16位單片機,堆棧是向下生長
os_cpu_c.c文件的改寫
μC/OS-II 的移植需要用戶改寫OS_CPU_C.C中的六個函數(shù):
OSTaskStkInit()
OSTaskCreateHook()
OSTaskDelHook()
OSTaskSwHook()
OSTaskStatHook()
OSTimeTickHook()
實際需要修改的只有OSTaskStkInit()函數(shù),其他五個函數(shù)需要聲明,但不一定有實際內(nèi)容。這五個函數(shù)都是用戶定義的對操作系統(tǒng)功能的擴展
其他的鉤子函數(shù)已經(jīng)嵌入到系統(tǒng),會在操作系統(tǒng)執(zhí)行某些操作時被調(diào)用,可以通過os_cfg.h來配置讓系統(tǒng)不使用這些鉤子
/*
* os_cpu.c
*
* Created on: 2016年11月20日
* Author: Tom
*/
#define OS_CPU_GLOBALS
#include "ucos_ii.h"
#if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
void OSInitHookBegin (void) //進入OSInit()函數(shù)后,OSInitHookBegin就會被調(diào)用
{
}
#endif
#if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
void OSInitHookEnd (void) //:OSInitHookEnd與OSInitHookBegin相似,
{
}
#endif
#if OS_CPU_HOOKS_EN > 0
void OSTaskCreateHook (OS_TCB *ptcb) //OS_TCBInit會調(diào)用OSTaskCreateHook
{
ptcb = ptcb; /* 防止編譯警告 */
}
#endif
#if OS_CPU_HOOKS_EN > 0
void OSTaskDelHook (OS_TCB *ptcb) //OSTaskDel()會調(diào)用OSTaskDelHook(ptcb)
{
ptcb = ptcb; /* 防止編譯警告 */
上一篇:MSP430時鐘模塊詳解
下一篇:MSP430F149學(xué)習(xí)筆記——時鐘
推薦閱讀
史海拾趣
Amphion Semiconductor Ltd 成立于 1995 年,是一家總部位于英國劍橋的半導(dǎo)體設(shè)計公司,專注于數(shù)字信號處理器(DSP)和嵌入式系統(tǒng)解決方案。以下是關(guān)于 Amphion Semiconductor Ltd 公司發(fā)展的五個相關(guān)故事:
創(chuàng)立與早期階段:Amphion Semiconductor Ltd 公司由 David Belbin 和 Richard Smith 共同創(chuàng)立于 1995 年,起初專注于開發(fā)用于音頻和視頻處理的數(shù)字信號處理器。公司總部設(shè)立在英國劍橋,這個地區(qū)是全球半導(dǎo)體設(shè)計和科技創(chuàng)新的重要中心之一。
技術(shù)創(chuàng)新與產(chǎn)品發(fā)展:Amphion Semiconductor Ltd 公司在數(shù)字信號處理領(lǐng)域進行了持續(xù)的技術(shù)創(chuàng)新和產(chǎn)品開發(fā)。公司的DSP技術(shù)在音頻和視頻處理、通信、圖像處理等領(lǐng)域得到了廣泛應(yīng)用。除了開發(fā)自有的DSP芯片,公司還提供定制化的嵌入式系統(tǒng)解決方案,滿足客戶特定的應(yīng)用需求。
業(yè)務(wù)擴展與市場拓展:隨著技術(shù)的成熟和市場需求的增長,Amphion Semiconductor Ltd 公司逐漸擴大了業(yè)務(wù)規(guī)模,并在國際市場上取得了一定的份額。公司與全球各種行業(yè)的客戶建立了合作關(guān)系,包括消費電子、汽車、通信、工業(yè)控制等領(lǐng)域,拓展了市場覆蓋范圍。
收購與合并:Amphion Semiconductor Ltd 公司在發(fā)展過程中進行了一些收購和合并,以擴大業(yè)務(wù)范圍和提升競爭力。其中,2013年公司被丹麥半導(dǎo)體公司 Nordic Semiconductor 收購,成為其子公司,為 Nordic Semiconductor 擴展了音頻和視頻處理領(lǐng)域的技術(shù)能力。
變革與發(fā)展方向:Amphion Semiconductor Ltd 公司隨著技術(shù)和市場的發(fā)展不斷調(diào)整發(fā)展方向,加大在新興領(lǐng)域的投入和研發(fā)力度。公司積極探索人工智能、物聯(lián)網(wǎng)、自動駕駛等領(lǐng)域的應(yīng)用,致力于提供更加智能化和高效的嵌入式系統(tǒng)解決方案,以適應(yīng)不斷變化的市場需求。
這些故事展示了 Amphion Semiconductor Ltd 公司從創(chuàng)立初期到如今在技術(shù)創(chuàng)新、產(chǎn)品發(fā)展、業(yè)務(wù)拓展、收購與合并以及發(fā)展方向等方面取得的重要進展。
在國內(nèi)市場取得一定成績后,ACI開始尋求國際合作,以進一步拓寬市場。公司與國際知名電子企業(yè)建立了戰(zhàn)略合作關(guān)系,共同研發(fā)新產(chǎn)品,開拓新市場。這些合作不僅提升了ACI的技術(shù)水平,還為其帶來了更多的國際訂單。
通過國際合作,ACI的產(chǎn)品逐漸進入國際市場,公司的影響力不斷擴大。同時,ACI也積極參與國際電子行業(yè)的交流活動,與同行分享經(jīng)驗,學(xué)習(xí)先進技術(shù),不斷提升自身實力。
在國內(nèi)市場取得一定成績后,ACI開始尋求國際合作,以進一步拓寬市場。公司與國際知名電子企業(yè)建立了戰(zhàn)略合作關(guān)系,共同研發(fā)新產(chǎn)品,開拓新市場。這些合作不僅提升了ACI的技術(shù)水平,還為其帶來了更多的國際訂單。
通過國際合作,ACI的產(chǎn)品逐漸進入國際市場,公司的影響力不斷擴大。同時,ACI也積極參與國際電子行業(yè)的交流活動,與同行分享經(jīng)驗,學(xué)習(xí)先進技術(shù),不斷提升自身實力。
在追求經(jīng)濟效益的同時,F(xiàn)lambeau公司始終不忘履行社會責(zé)任和環(huán)保使命。公司積極響應(yīng)全球可持續(xù)發(fā)展號召,將環(huán)保理念融入產(chǎn)品研發(fā)、生產(chǎn)和銷售的各個環(huán)節(jié)。通過采用環(huán)保材料、優(yōu)化生產(chǎn)工藝、推廣循環(huán)經(jīng)濟等措施,F(xiàn)lambeau有效降低了產(chǎn)品生命周期中的環(huán)境影響。此外,公司還積極參與環(huán)保公益活動和社會責(zé)任項目,為推動電子行業(yè)的綠色可持續(xù)發(fā)展貢獻力量。
隨著產(chǎn)品的廣泛應(yīng)用和市場的不斷拓展,愛普特微電子逐漸獲得了業(yè)界的廣泛認可。公司屢獲殊榮,包括“國家級專精特新小巨人”、“中國IC獨角獸”、“中國TOP 50國產(chǎn)MCU廠商”等。這些榮譽的獲得,不僅是對公司技術(shù)實力和市場表現(xiàn)的肯定,更是對公司未來發(fā)展的鼓勵和期待。
內(nèi)容包括: 第01,2章 傳感與檢測基礎(chǔ),概述 24頁 第03章 應(yīng)變式傳感器 57頁 第04章 電感式傳感器 89頁 第05章 電容式傳感器 58頁 第06章 壓電式傳感器 43頁 第07章 磁電式傳感器 12頁 第08章 光電式傳感器 109頁 第09章 半導(dǎo)體傳感器 69頁 ...… 查看全部問答∨ |
系統(tǒng)是 2440 + PB5.0 構(gòu)成的 在拷貝文件時候 關(guān)機重啟就會產(chǎn)生file0000.chk 。。。。。。文件 要如何才能修復(fù)吶 ? 等高手指點迷經(jīng) … 查看全部問答∨ |
現(xiàn)在我要寫串口的驅(qū)動,我看了串口驅(qū)動的相關(guān)資料,發(fā)現(xiàn)COM_IOControl、COM_Open、COM_Close,等函數(shù)都在MDD層里定義了,那我現(xiàn)在還要寫什么函數(shù)呢?是不是配置GPIO口為串口,時鐘設(shè)置,判斷那個串口然后調(diào)用MDD里的相關(guān)函數(shù)呢?… 查看全部問答∨ |
|
WGM-12864B單色圖形點陣液晶顯示模塊 出售 練手,作產(chǎn)品俱佳?。。?! 從程序員走向經(jīng)商,第一仗就敗了 變賣自己的 一點血汗,希望能重振旗鼓 近來的 兄弟麻煩幫忙頂一下 沒什么好回報的 只能給您一點微不足道的分數(shù) 家里有將近2萬塊WGM-12864B單色圖形點陣液晶顯示模塊(牌子是“風(fēng)華”的) 適用于 嵌入式設(shè)計的小 ...… 查看全部問答∨ |
|
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 阿里黑科技落地!夸克AI眼鏡全球首發(fā),高德、淘寶、支付寶都能用
- 化繁為簡, 適配復(fù)雜磁場環(huán)境,MT73xx 3D雙路輸出霍爾鎖存器賦能車規(guī)電機精準控制
- 9.5億美元收購恩智浦MEMS傳感器業(yè)務(wù),意法半導(dǎo)體 在傳感器領(lǐng)域的地位再升級
- 高性能電動滑板車 BLDC 電機驅(qū)動器:技術(shù)解析與應(yīng)用展望
- 5G工業(yè)網(wǎng)關(guān)的“邊緣計算+AI推理”一體化設(shè)計,PLC協(xié)議解析與缺陷檢測的實時聯(lián)動
- AR眼鏡的“工業(yè)指令投射”系統(tǒng),SLAM的空間定位、PLC數(shù)據(jù)實時疊加顯示
- 多光譜氣體傳感器的抗交叉干擾設(shè)計
- 多模態(tài)融合感知的“語義-幾何”聯(lián)合建模
- 工業(yè)觸摸屏的“壓感-手勢”多模態(tài)交互設(shè)計
- 工業(yè)機器人高精度力控的“雙模融合”傳感器設(shè)計
- 將低功耗設(shè)計進行到底——評論、轉(zhuǎn)發(fā)贏大禮!
- 芯幣競拍:感恩教師節(jié)專場
- Keysight示波器主題月有獎系列活動之 注冊大獎天天抽 搶樓踩中亦有獎
- Microchip有獎直播:VectorBlox™ SDK 報名中
- 有獎直播|ADI 慣性MEMS應(yīng)用那些事
- 借助 Microchip 生態(tài)系統(tǒng)中的 PIC® 和 AVR® 單片機開啟嵌入式到云端之旅 系列在線研討會
- 帶你零起點入門STM32(專為嵌入式應(yīng)用而開發(fā)的內(nèi)核)
- 福祿克首款熱成像萬用表Fluke-279FC 即將上市!填寫問卷贏好禮嘍!
- EEWorld Datasheet 伴你同行!快來領(lǐng)取200芯積分福利啦~
- 泰克福袋:示伴功倍,萬能福袋派送中
- 助力新能源汽車革命,羅姆有大招
- Genesys與谷歌云新一代聯(lián)絡(luò)中心AI集成合作
- ADI公司與B-Secur攜手開發(fā)面向汽車工業(yè)的生物特征識別技術(shù)
- 勞斯萊斯利用機器蛇及機器昆蟲探查及修復(fù)發(fā)動機故障
- 中國“人臉識別技術(shù)”居世界第一梯隊
- “芯片門”繼續(xù)發(fā)酵 英特爾遭多起集體訴訟
- 高通表示正努力修復(fù)芯片漏洞 很快發(fā)布更新
- Gartner發(fā)布2017年十大半導(dǎo)體廠商,三星雖奪魁但估計坐不穩(wěn)
- 三星芯片銷量擠掉英特爾成全球第一 寶座能坐多久?
- 臺媒:臺積電將獨家代工蘋果A12處理器,采用7nm工藝