OSIntCtxSw_1
;獲取新任務堆棧指針
LDR R4, [R6]
ADD SP, R4, #68 ;17寄存器CPSR,OsEnterSum,R0-R12,LR,SP
LDR LR, [SP, #-8]
MSR CPSR_c, #(NoInt | SVC32Mode) ;進入管理模式
MOV SP, R4 ;設置堆棧指針
LDMFD SP!, {R4, R5} ;CPSR,OsEnterSum
;恢復新任務的OsEnterSum
LDR R3, =OsEnterSum
STR R4, [R3]
MSR SPSR_cxsf, R5 ;恢復CPSR
LDMFD SP!, {R0-R12, LR, PC }^ ;運行新任務
;/*****************************************************************************************
;** 函數名稱: __OSStartHighRdy
;** 功能描述: uC/OS-II啟動時使用OSStartHighRdy運行第一個任務,
;** OSStartHighRdy會調用__OSStartHighRdy
;** 輸 入: 無
;** 輸 出 : 無
;** 全局變量: OSRunning,OSTCBCur,OSTCBHighRdy,OsEnterSum
;** 調用模塊: OSTaskSwHook
;** 作 者: 吳友強
;** 日 期: 2009年7月29日
;**----------------------------------------------------------------------------------------
;*****************************************************************************************/
__OSStartHighRdy
MSR CPSR_c, #(NoInt | SYS32Mode)
;告訴uC/OS-II自身已經運行
LDR R4, =OSRunning
MOV R5, #1
STRB R5, [R4]
BL OSTaskSwHook ;調用鉤子函數
LDR R6, =OSTCBHighRdy
LDR R6, [R6]
B OSIntCtxSw_1
AREA SWIStacks, DATA, NOINIT,ALIGN=2
SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;管理模式堆棧空間
END
(4)IRQ.INC定義了一個宏匯編,并且是uC/OS-II for ARM7通用的中斷服務程序的匯編與C語言接口代碼,需要自己編寫。源代碼如下:
;/****************************************Copyright (c)************************************
;** FreshAir嵌入式軟件開發團隊
;** 軟件開發團隊
;** 技術部
;** http://www.freshiair.com
;**--------------文件信息------------------------------------------------------------------
;**文 件 名: irq.inc
;**創 建 人: 吳友強
;**最后修改日期: 2009年7月28日
;**描 述: 定義IRQ匯編接口代碼宏
;**--------------歷史版本信息--------------------------------------------------------------
;** 創建人: 吳友強
;** 版 本: v1.0
;** 日 期: 2009年7月29日
;*****************************************************************************************/
NoInt EQU 0x80
USR32Mode EQU 0x10
SVC32Mode EQU 0x13
SYS32Mode EQU 0x1f
IRQ32Mode EQU 0x12
FIQ32Mode EQU 0x11
;引入的外部標號在這聲明
IMPORT OSIntCtxSw ;任務切換函數
IMPORT OSIntExit ;中斷退出函數
IMPORT OSTCBCur
IMPORT OSTCBHighRdy
IMPORT OSIntNesting ;中斷嵌套計數器
IMPORT StackUsr
IMPORT OsEnterSum
CODE32
AREA IRQ,CODE,READONLY
MACRO
$IRQ_Label HANDLER $IRQ_Exception_Function
EXPORT $IRQ_Label ; 輸出的標號
IMPORT $IRQ_Exception_Function ; 引用的外部標號
$IRQ_Label
SUB LR, LR, #4 ; 計算返回地址
STMFD SP!, {R0-R3, R12, LR} ; 保存任務環境
MRS R3, SPSR ; 保存狀態
STMFD SP, {R3, SP, LR}^ ; 保存用戶狀態的R3,SP,LR,注意不能回寫
; 如果回寫的是用戶的SP,所以后面要調整SP
LDR R2, =OSIntNesting ; OSIntNesting++
LDRB R1, [R2]
ADD R1, R1, #1
STRB R1, [R2]
SUB SP, SP, #4*3
MSR CPSR_c, #(NoInt | SYS32Mode) ; 切換到系統模式
上一篇:Windows CE6.0中斷實驗過程
下一篇:arm linux 移植 mtd-utils 1.x
推薦閱讀最新更新時間:2025-05-10 08:14





設計資源 培訓 開發板 精華推薦
- 使用 Richtek Technology Corporation 的 RT9986A 的參考設計
- 適用于STM32F439ZI MCU的STM32 Nucleo-144開發板,支持Arduino,ST Zio和morpho連接
- NCP1251GEVB,用于筆記本電腦的 25W、5V、12V AC 到 DC 多輸出電源的評估板
- 使用 Analog Devices 的 LT4276AHUFD 的參考設計
- 負載開關IC TCK321G、TCK322G、TCK323G應用&電路
- ADP2120 降壓穩壓器評估板
- RT9288A LED Driver with PWM Brightness Control (12V to 60V) 典型應用
- SILINKPS-EVB,用于電纜調制解調器應用的 Si3225 用戶線接口的評估板
- 用于線性歐姆表的 TL431A 可編程精密基準的典型應用
- 基于VIPer013BLS的5V/100mA高壓優化降壓轉換器
- 南芯科技推出高集成度多口移動電源解決方案,助力充電寶市場穩健發展
- 英飛凌推出具有超低導通電阻的CoolSiC? MOSFET 750 V G2,適用于汽車和工業功率電子應用
- DigiKey 慶祝 B 站賬號粉絲突破 10 萬,贈送驚喜禮包
- 碳化硅企業 Wolfspeed 啟動破產重組,預計 2025 年三季度末完成司法重整
- 蘋果被曝考慮放棄自研模型 轉而與Anthropic或OpenAI合作
- ?百度文心4.5來襲!英特爾Day0即支持端側部署
- 【廣瀨電機】關于中國發明專利侵權訴訟達成和解的公告
- 英飛凌BMS解決方案推動電動汽車創新
- 地平線的L3判斷與實踐路徑
- 汽車網絡升級攻略:CAN-CAN FD-車載以太網