uC/OS-II在S3C44B0X微处理器上的移植
日期:2007年9月2日 作者: 查看:[大字体 中字体 小字体]-
设置includes.h中与处理器&编译器相关的代码
用C语言编写与OS相关的函数(OS_CPU_C.C)以下是引用片段:
#define INT8U unsigned char
#define INT16U unsigned short
#define INT32U unsighed long
#define OS_STK unsigned long
#define BOOLEAN int
#define OS_CPU_SR unsighed long
#define INT8S char
extern int INTS_OFF(void);
extern void INTS_ON(void);
#define OS_ENTER_CRITICAL() { cpu_sr = INTS_OFF() }
#define OS_EXIT_CRITICAL() { if(cpu_st == 0) INTS_ON(); }
#define OS_STK_GROWTH 1
#define STACKSIZE 256
INTS_OFF
mrs r0, cpsr ;当前CSR
mov r1, r0 ;复制屏蔽
orr r1, r1, #0xC0 ;屏蔽中断位
msr CPSR, r1 ;关中断(IRQ and FIQ)
and r0, r0, #0x80 ;从初始CSR返回FIQ位
mov pc, lr ;返回
INTS_ON
mrs r0, cpsr ;当前CSR
bic r0, r0, #0xC0 ;屏蔽中断
msr CPSR, r0 ;开中断(IRQ and FIQ)
mov pc, lr ;返回
用汇编与处理器相关的函数(OS_CPU.ASM)以下是引用片段:
OSTaskStkInit——初始化任务堆栈
OS_STK * OSTaskStkInit(void (*task) (void *pd), void *pdata, OS_STK *ptos,
INT16U opt)
{
unsighed int *stk;
stk = (unsighed int *)ptos; /*装载堆栈指针*/
opt++;
/*为新任务建立堆栈*/
*--stk = (unsigned int) task; /*pc*/
*--stk = (unsigned int) task; /*lr*/
*--stk = 12; /*r12*/
*--stk = 11; /*r11*/
*--stk = 10; /*r10*/
*--stk = 9; /*r9*/
*--stk = 8; /*r8*/
*--stk = 7; /*r7*/
*--stk = 6; /*r6*/
*--stk = 5; /*r5*/
*--stk = 4; /*r4*/
*--stk = 3; /*r3*/
*--stk = 2; /*r2*/
*--stk = 1; /*r1*/
*--stk = (unsigned int) pdata; /*r0*/
*--stk = (SUPMODE) /*cpsr*/
*--stk = (SUPMODE) /*spsr*/
return ((OS_STK *) stk);
}
void OSTaskCreateHook(OS_TCB *ptcb) 创建任务
void OSTasdDelHook(OS_TCB *ptcb) 删除任务
void OSTaskSwHook(void) 切换任务
void OSTaskStatHook(void) 任务执行状态
void OSTimeTickHook(void) 时钟节拍1.OSStartHighRdy( ); 运行优先级最高的就绪任务
2.OS_TASK_SW( ); 任务级的任务切换函数以下是引用片段:
OSStartHighRdy
LDR r4, addr_OSTCBCur ;得到当前任务TCB地址
LDR r5, addr_OSTCBHighRdy ;得到最高优先级任务TCB地址
LDR r5, [r5] ;获得堆栈指针
LDR sp, [r5] ;转移到新的堆栈中
STR r5, [r4] ;设置新的当前任务的TCB地址
LDMFD sp!, {r4} ;从栈顶获取新的状态
MSR SPSR, r4
LDMFD sp!, {r4} ;从栈顶获取新的状态
MSR CPSR, r4 ;CPSR处于SVC32Mode模式
LDMFD sp!, {r0-r12, 1r, pc} ;运行新的任务
3. OSIntCtxSw(); 中断级的任务切换函数以下是引用片段:
OS_TASK_SW
STMFD sp!, {pc} ;保存pc
STMFD sp!, {1r} ;保存1r
STMFD sp!, {r0-r12} ;保存寄存器&返回地址
MRS r4, CPSR
STMFD sp!, {r4} ;保存当前的的PSR
MRS r4, SPSR
STMFD sp!, {r4} ;保存SPSR
; OSRrioCur = OSPrioHighRdy
LDR r4, addr_OSPrioCur
LDR r5, addr_OSPrioHighRdy
LDRB r6, [r5]
STRB r6, [r4]
;得到当前任务地址
LDR r4, addr_OSTCBCur
LDR r5, [r4]
STR sp, [r5] ;保存sp在被占先的任务的TCB
;得到最高优先级任务TCB地址
LDR r6, addr_OSTCBHighRdy
LDR r6, [r6]
LDR sp, [r6] ;得到新任务堆栈地址
; OSTCBCur = OSTCBHighRdy
STR r6, [r4]
;保存任务方式寄存器
LDMFD sp!, {r4}
MSR SPSR, r4
LDMFD sp!, {r4}
MSR CPSR, r4
;返回到新任务的上下文
LDMFD sp!, {r0-r12, 1r, pc}以下是引用片段:
OSIntCtxSw
Add r7, sp, #16 ;保存寄存器指针
LDR sp, =IRQStack ;FIQ_STACK
mrs r1, SPSR ;得到暂停的SPR
orr r1, r1, #0xC0 ;(出处:急速软件下载学院)
-
- uC/OS-II在S3C44B0X微处理器上的移植 相关文章:
- ·Photoshop给美女带上美丽彩瞳隐形眼镜
- ·CSS实例布局:上中下三行 中间自适应
- ·上网冲浪选谁更好 七款主流网页浏览器评测
- ·Photoshop制作树叶上的露珠
- ·Sandboxie隔离病毒木马 上网下载安装再无忧
- ·SuSE Linux10上安装Oracle数据库方法
- ·用木马取得远程电脑上QQ聊天纪录
- ·Windows Vista修复无法上网技巧
- ·微软Live Search地图服务中文版上线
- ·QQ龙珠连锁之20连以上的创造方法
- uC/OS-II在S3C44B0X微处理器上的移植 相关软件
- ·当辣妹遇上恶魔
- ·爱上单身妈妈
- ·上海知青部落
- ·《黑名单上的人》05蘑菇行动(198303版)
- ·《黑名单上的人》04地下印刷所(198212版)
- ·《黑名单上的人》03叛徒(198210版)
- ·《黑名单上的人》02夜袭车库(198209版)
- ·《黑名单上的人》01特别行动小组(198208版)
- ·冰上歼敌
- ·《冰封王座》地图:台海风系列之海上争霸V1.00
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
精品推荐
热点TOP10
- ·图象处理中的边缘检测------canny算子
- ·EZ-USB 68013A开发指南
- ·数值计算程序大放送-特征值和特征向量
- ·ARM的嵌入式Linux移植体验之BootLoader
- ·Visual C++ ADO数据库编程入门
- ·智能手机Smartphone开发导语
- ·利用 wordXP 实现自动排班
- ·[分形]DLA团簇模型的摸拟
- ·DENX U-Boot及Linux使用手册
- ·Visual FoxPro 9.0 SP2正式版下载
- ·VS2005控件的问题解决办法
- ·Cookie是什么?用法是怎样?与SESSION有什么区别?
- ·J2SE API读取Properties文件的六种方法
- ·Silverlight、JavaFX、Flex技术比较
- ·Silverlight将不再支持ArrayList类型
- ·教程:XSLT Designer快速入门指南
- ·创建Web应用和Struts框架配置文件实例
- ·Spring入门指引:理解Spring的打包方式
- ·UDT协议-基于UDP的可靠数据传输协议
- ·解析KJava在移动设备开发中的应用
