脚起皮干裂是什么原因| 三岁看小七岁看老是什么意思| 小孩放臭屁是什么原因| 7月30日是什么日子| 狂风暴雨是什么生肖| 为什么吃火龙果会拉肚子| 一个山一个脊念什么| 沙特是什么教派| 小孩一到晚上就发烧是什么原因| 鲁肃是一个什么样的人| 检查幽门螺旋杆菌挂什么科| 为什么射出的精子里有淡红色| 十二生肖排第七是什么生肖| pa是什么材质| 亚甲炎吃什么药效果好| 喝酒后胃不舒服吃什么药| 量词是什么意思| 透析病人磷高了吃什么降磷| 什么症状吃保心丸| 他不懂你的心假装冷静是什么歌| 月经颜色发黑是什么原因| 肺部有结节要注意什么| 卡马西平是什么药| 血压低有什么办法| 什么叫心肌桥| 点痣去医院挂什么科| 气促是什么意思| 梅西踢什么位置| 学海无涯苦作舟的上一句是什么| 什么车不能开| 后代是什么意思| 血压低吃什么食物| 女人吃什么补充胶原蛋白| 吃什么可以提高免疫力和抵抗力| 什么是会车| 鸡蛋黄发红是什么原因| 掌纹多而乱代表什么| spa是什么意思| 咖啡加牛奶叫什么| 用盐水洗脸有什么好处和坏处| 蜘蛛侠叫什么| 暂住证需要什么材料| 抚琴是什么意思| 女属蛇的和什么属相最配| sss是什么意思| 细胞质由什么组成| 宝宝拉肚子吃什么药好| 黄瓜不能和什么食物一起吃| 网球肘用什么药最有效| 摸摸头是什么意思| 什么是深海鱼| 方言是什么意思| 晚上喝什么茶有助于睡眠| 宇宙之外是什么| 黄体功能不足是什么原因造成的| 什么样的柳条| 腿抽筋吃什么| 丢包是什么意思| 红茶有什么功效| 供观音菩萨有什么讲究| 执行标准是什么意思| 烟酸是什么| 青蛙趴有什么好处| 家有喜事是什么生肖| 风热感冒用什么药| 梦见吃蜂蜜是什么预兆| 肠胃炎有什么症状| 贾赦和贾政是什么关系| lsa是什么胎位| 勾芡用什么粉| nike是什么意思| 肌酐是什么指标| 二战时期是什么时候| 布衣是什么意思| 蚂蚁的触角有什么作用| 甲钴胺有什么作用| 康乃馨的花语代表什么| 医院查过敏源挂什么科| insun是什么牌子| 崩溃是什么意思| 拈花一笑什么意思| 装清高是什么意思| 儿童节送老婆什么礼物| 什么是甲减| 漏尿是什么原因| 什么什么分明的成语| 半套是什么意思| 奥美拉唑是什么药| 瞳字五行属什么| 立春有什么讲究| scarves是什么意思| 什么是考生号| china的形容词是什么| 小姑子是什么关系| 头痛去医院挂什么科| crp什么意思| 海米是什么| 水土不服吃什么药管用| 冒菜为什么叫冒菜| 荷叶有什么功效和作用| 95属什么生肖| 膝盖内侧疼吃什么药| 私房照是什么| 冰恋是什么| 安吉白茶属于什么茶| 口干舌燥是什么意思| 龙象征着什么| 吃什么除湿气| 脑死亡是什么原因引起的| 为什么老长口腔溃疡| 公务员和事业编有什么区别| 刺激性干咳是什么症状| 狗狗湿疹用什么药膏最有效| 七夕节什么时候| 1983年是什么年| 寸脉弱是什么原因| 头顶痛吃什么药效果好| dsa检查是什么| 大堤是什么意思| 什么汤养胃| 刺史相当于现在什么官| 相性是什么意思| 一个口一个我念什么| 阴血亏虚吃什么中成药| 怀孕初期分泌物是什么样的| 眼镜框什么材质的好| 泡芙是什么| 臭宝是什么意思| 血糖高可以吃什么| 2018属什么生肖| 扦脚是什么意思| 鸿字五行属什么| 什么邮箱最好用最安全| 什么水果含维c最多| 羲什么意思| 宫腔少量积液是什么意思| 女性吃什么降低雄激素| 嗓子疼看什么科室| 尿痛是什么原因| 胶囊壳是什么原料做的| red什么颜色| 牛什么饭| 胃阴虚吃什么中成药| 九月底是什么星座| 经期喝什么好| 彩蛋是什么意思| 八纲辨证中的八纲是什么| 星座上升是什么意思| 挺舌反应是什么| 奠是什么意思| 端着是什么意思| 1991年什么命| 澳门买什么最便宜| 血尿是什么原因引起的男性| 前额头疼是什么原因引起的| 回执单是什么| 气血不足吃什么| 被马蜂蛰了用什么药| 喝酒胃疼吃什么药| 起床眼睛肿是什么原因| 卫生巾有什么用| 久坐伤什么| 横店是什么| 什么牌子皮带结实耐用| 肠胃不好挂什么科| 性生活是什么意思| yrc是什么牌子的鞋| 肝肾挂什么科| 猕猴桃什么时候成熟| 脸上发红是什么原因| 坐高铁不能带什么| 消化不良吃什么中药| 为什么胸部会胀痛| 卵巢囊肿挂什么科| 吃什么补硒最快最好| 肉蒲团是什么| 口腔溃疡是缺少什么维生素| 20度穿什么衣服| 一直不射精是什么原因| 米线是什么材料做的| 不吃肉对身体有什么影响| 人参和什么泡酒壮阳| 什么是肝癌| 牛子什么意思| 海螺姑娘是什么意思| 半青皮是什么意思| 三个火念什么| 胆汁反流吃什么药最好| 痛风吃什么蔬菜| 人大代表是什么| 意义是什么意思| 抗坏血酸是什么| prada是什么档次| 杏花什么季节开| 吃红枣有什么好处| dia是什么意思| est什么意思| 赵构为什么杀岳飞| 乳头瘤病毒是什么病| 什么药一吃就哑巴了| 6月25是什么星座| 可吸收线是什么颜色| 老放屁是什么病的征兆| 喉咙痛买什么药| 悉心栽培什么意思| 你从什么时候不再爱我| 烂漫是什么意思| 阳历1月份是什么星座| 胆碱能性荨麻疹吃什么药| 习是什么结构的字| 淀粉酶测定是查什么| 见风使舵是什么生肖| 武将是什么生肖| 老鼠长什么样子图片| 倭瓜是什么瓜| 壮志凌云是什么生肖| 眼睛感染用什么眼药水| 胃肠功能紊乱是什么意思| 血压太低有什么危害| 泌乳素高是什么意思| 左眼皮跳是什么预兆女| 拉肚子不能吃什么| 肺部肿瘤3cm什么期| 一什么永什么成语| 黄柏泡水喝有什么功效| 什么是发物| 身上带什么可以辟邪| 什么治胃胀气| lively是什么意思| 妄语是什么意思| 血小板上升是什么原因| 2003年是什么命| lancome是什么牌子的| 覆盆子是什么东西| 血热是什么原因| 孕早期生气对胎儿有什么影响| 庆生是什么意思| 为什么人会打喷嚏| MS医学上是什么意思| 发烧时不宜喝什么饮料| 六月十三日是什么日子| 甲鱼炖什么好吃| 鸡为什么喜欢吃泡沫| 端粒是什么| 百合花语是什么意思| 月亮什么颜色| 儿童节送老婆什么礼物| 辩证是什么意思| 铁皮石斛有什么功效| 什么是埋线减肥| 安五行属性是什么| 利可君片是治什么病| 平均血红蛋白含量偏低是什么意思| 肾虚什么意思| pc什么意思| 晕车的人是什么体质| 拔完智齿吃什么食物好| 民政局局长什么级别| au999是什么意思| 大学挂科是什么意思| 什么人不能喝绿豆汤| 阴茎不硬是什么原因| 什么叫丁克| 胚芽是什么意思| 百度

新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > μC/OS-II在S3C44BOX处理器上的移植

魔法少女爱上丑陋神兽!《龙武2》版美女与野兽

作者: 时间:2025-08-04 来源:网络 收藏
摘要:介绍实时操作系统μ的特点和内核结构,给出μ在Samsung嵌入式 ARM7微上的的步骤及详细相关代码,同时阐述μ在应用中应注意的问题。百度 违者本报将依法追究法律责任。

关键词:μC/OS-II 实时操作系统

μC/OS-II功能强大,支持56个用户任务,其内核为占先式,支持信号量、邮箱、消息队列等多种常用的进程间通信机制,现已成功应用到众多商业嵌入式系统中,是一个成熟稳定的实时内核。与大多商用RTOS不同的是,μC/OS-II公开所有的源代码,90%的代码使用标准的ANSI C语言书写,程序可读性强、性好;同时它可免费获得,即使商业应用也只收取少量的许可费用。因此,对μC/OS-II实时操作系统的学习研究、开发、应用具有重要意义。

Samsung S3C44B0X微是三星公司专为手持设备和其它嵌入式应用提供的高性价比的微控制器解决方案。它使用ARM公司的16位/32位RISC结构,内核是ARM7TDMI,工作在66MHz,片上集成了以下部件:8K Cache、外部存储器控制器、LCD控制器、4个DMA通道、2个UART、1个多主I2C总线控制器、1个I2C总线控制器,以及5通道PWM定时器和1个内部定时器、8通道12位ADC等,能够与常用的外围设备实现无缝连接,功能强大。目前,国内应用较为广泛。

1
μC/OS-II实时操作系统结构

图1说明了μC/OS-II的软硬件体系结构。应用程序处于整个系统的顶层,每个任务都可以认为自已独占了CPU,因而可以设计成为一个无限循环。μC/OS-II无关的代码提供了μC/OS-II的系统服务,应用程序可以使用这些API函数进行内存管理、任务间通信及创建、删除任务等。

大部分的μC/OS-II代码是使用ANSI C语言书写的,因此μC/OS-II的可移植性好,然而仍需要使用C和汇编语言写一些处理器相关代码。μC/OS-II的移植需要满足以下要求:

①处理器的C编译器可以产生可重入代码;

②可以使用C调用进入和退出临界区代码;

③处理器必须支持硬件中断,并且需要一个定时中断源;

④ 处理器需要能够容纳一定数据的硬件堆栈;

⑤处理器需要有能够在CPU寄存器与内核和堆栈交换数据的指令。

S3C44B0X处理器完全满足上述要求。

2 实时内核μC/OS-II在S3C44B0X上的移植

我们使用ARM SDT编译器,移植μC/OS-II主要包括以下几个步骤。

(1)设置OS_CPU.H中与处理器和编译器相关的代码

*************************************************

与编译器相关的数据类型

*************************************************

typedef unsigned char BOOLEAN;

typedef unsigned char INT8U; /*8位无符号整数*/

typedef signed char INT8S; /*8位有符号整数*/

typedef unsigned short INT16U; /*16位有符号整数*/

typedef signed short INT16S; /*16位无符号整数*/

typedef unsigned long INT32U; /*32位无符号整数*/

typedef signed long INT32S; /*32位有符号整数*/

typedef float FP32; /*单精度浮点数*/

typedef double FP64; /*双精度浮点数*/

typedef unsigned int OS_STK;/*堆栈入口宽度为16位*/与ARM处理器相关的代码:

#define OS_ENTER_CRITICAL () ARMEnableInt() /*开启中断*/

#define OS_STK_GROWTH 1 /*堆栈由高地址向低地址增长*/

(2)用C语言编写6个操作系统相关的函数(OS_CPU_C.C)

void OSTaskStkInit(void(task)(void *pd),void *pdata,void *ptos,INT16U opt)

{ unsigned int *stk;

opt =opt; /*因“opt”变量没有用到,防止编译器产生警告*/

stk =(unsigned int *)ptos; /*装载堆栈指针*/

/*为新任务创建上下文*/

*--stk=(unsigned int)task; /*lr*/

*--stk=(unsigned int)task /*pc*/

*--stk=0; /*r12*/

*--stk=0; /*r11*/

*--stk=0; /*r10*/

*--stk=0; /*r9*/

*--stk=0; /*r8*/

*--stk=0; /*r7*/

*--stk=0; /*r6*/

*--stk=0; /*r5*/

*--stk=0; /*r4*/

*--stk=0; /*r3*/

*--stk=0; /*r2*/

*--stk=0; /*r1*/

*--stk=(unsigned int)pdata; /*r0*/

*--stk=(SVC32MODE|0x0|); /*cpsr IRQ,

*--stk=(SVC32MODE|0x0); /*spsr IRQ,关闭FIQ*/

return((void*)stk);

}

后5个函数是钩子函数,可以不加代码:

void OSTaskCreateHook(OS_TCB *ptcb)

void OSTaksDelHool (OS_TCB *ptcb)

void OSTaskSwHook(void)

void OSTaskStatHook(void)

(3)用汇编语言编写4个与处理器相关的函数(OS_CPU.ASM)

OSStartHighRdy() ;运行优先级最高的就绪任务

LDR r4,addr_OSTCBCur ;得到当前任务的TCB地址

LDR r5,addr_OSTCBHighRdy ;得到高优先级任务的TCB地址

LDR r5,addr_OSTCBHighRdy ;得到高优先级任务的TCB地址

LDR r5,[r5] ;得到堆栈指针

LDR sp,[r5] ;切换到新的堆栈

STR r5,[r4] ;设置新的当前任务的TCB地址

LDMFD sp!,{r4}

MSR CPSR_cxsf,r4

LDMFD sp!,{r0-r12,lr,pc} ;开始新的任务

END

OSCtxsw() 任务级的任务切换函数

STMFD sp!,{lr} ;保存PC指针

STMFD sp!,{lr} ;保存lr指针

STMFD sp!,{r0-r12} ;保存寄存器文件和返回地址

MRS r4,CPSR

STMFD sp!,{r4} ;保存当前PSR

MRS r4,SPSR

STMFD sp!,{r4}

;OSPrioCur=OSPrioHighRdy

LDR r4,addr_OSPrioCur

LDR r5,addr_OSPrioHighRdy

LDRB r6,[r5]

STRB r6,[r4]

;得到当前任务的TCB地址

LDR r4,addr_OSTCBCur

LDR r5,[r4]

STR sp,[r5] ;保存栈指针在占先任务的TCB上

;取得高优先级任务的TCB地址

LDR r6,addr_OSTCBHighRdy

LDR r6,[r6]

LDR sp,[r6] ;得到新任务的堆栈指针

;OSTCBCur=OSTCBHighRdy

STR r6,[r4]

;得到当前新任务的TCB地址

LDMFD sp!,{r4}

MSR SPSR_cxsf,r4

LDMFD sp!,{r4}

MSR SPSR_cxsf,r4

LDMFD sp!,{r0-r12,lr pc}

OSIntCtxSw() ;中断级的任务切换函数

LDMIA sp!,{al-vl,lr}

SUBS pc,lr,#4

SUB lr,lr,#4

MOV r12,lr

MRS lr,SPSR

AND lr,lr,#0XFFFFFE0

ORR lr,lr,#0XD3

MSR CPSR_CXSF,lr

OSTickISR() ;中断服务函数

STMDB sp!,{r0-r11,lr}

MRS r0,CPSR

ORR r0,r0,#0x80; ;设置中断禁止标志

MSR CPSR_cxsf,r0 ;中断结束

LDR r0,I_ISPC

LDR r1,=BIT_TIMER0

STR r1,{r0}

BL IrqStart

BL osTimeTick

BL IrqFinish

LDR r0,=need_to_swap_context

LDR R2,[R0]

CMP r2,#1

LDREQ pc,=_CON_SW

完成上述工作后,μC/OS-II就可以运行在ARM处理器上了。

3 使用μC/OS-II系统应注意的问题

μC/OS-II和Linux等分时操作系统不同,不支持时间片轮转法。它是一个基于优先级的实时操作系统。每一个任务的优先级必须不同(分析它的源码会发现,μC/OS-II把任务的优先级当作任务在标识来使用,如果优先级相同,任务将无法区分)。进入就绪态的优先级最高的任务首先得到CPU的使用权,只有等它交出CPU的使用权后,其它任务才可以被执行。所以,它只能就是多任务,不能就是多进程,至少不是我们所熟悉的那种多进程。

μC/OS-II对共享资源提供了保护的机制。μC/OS-II是一个支持多任务的操作系统。我们可以把一个完整的程序划分成几个任务,不同的任务执行不同的功能。对于共享资源(比如串口),μC/OS-II也提供了很好的解决办法,一般情况下使用的是信号量方法。我们创建一个信号量并对它进行初始化,当一个任务需要使用一个共享资源时,它必须先申请得到这个信号量。在这个过程中即使有优先权更高的任务进入了就绪态,因为无法得到信号量,也不能使用该资源。在μC/OS-II中称为优先级反转。简单地说,就是高优先级任务必须等待低优先级任务的完成。在上述情况下,在两个任务之间发生优先级后转是无法避免的。所以不在使用μC/OS-II时,必须对所开发的系统了解清楚才能选择对于某种共享资源是否使用信号量。

μC/OS-II内存管理不够完善。在分析许多μC/OS-II的应用实例中发现,任务栈空间和内存分区的创建采用了定义全局数组的方法,这样实现起来固然简单,但不够灵活有效。

编译器会将全局数组作为未初始化的全局变量,放到应用程序映像的数据段。数组的大小是固定的,生成映像后不可能在使用中动态地改变。对于任务栈空间来说,数组定义大了会造成内存浪费;定义小了任务栈溢出,会造成系统崩溃。对于内存分区,在不知道系统初始化后给用户留下了多少自由内存空间的情况下,很难定义内存分区所使用数组的大小。此外,现在μC/OS-II只支持固定大小的内存分区,容易造成内存浪费。μC/OS-II将来应该被改进以支持可变大小的内存分区。因此,系统初始化后能清楚地掌握自由内存空间的情况是很重要的。所以,应避免使用全局数组分配内存空间,关键是要知道整个应用程序在编译、链接后代码段和数据段的大小,在目标板内存中是如何定位,以及目标板内存的大小。

总之,随着各种智能嵌入式系统的复杂化和系统实时性需求的提高,伴随应用软件朝着系统化发展的加速,功能强大的实时操作系统μC/OS-II将会有更大的发展。



评论


相关推荐

技术专区

关闭
石钟乳是什么意思 多种维生素什么牌子的效果最好 跳梁小丑指什么生肖 腹部淋巴结肿大是什么原因 长沙有什么大学
湿热喝什么茶可以调理 属羊的什么命 mc什么意思 男生一般什么时候停止长高 后脑勺长白头发是什么原因
心口窝疼挂什么科 黄山毛峰是什么茶 烂好人什么意思 子宫在肚脐眼什么位置 三情六欲是什么意思
生龙活虎是什么生肖 世界上最大的湖是什么湖 五行黑色属什么 口腔有味道是什么原因 什么人容易得脑溢血
丑时是什么时辰hcv8jop7ns4r.cn 深海鱼油的作用是什么hcv7jop5ns5r.cn 憔悴是什么意思hcv9jop2ns3r.cn pa是什么ff14chat.com 8月14日是什么星座hcv9jop2ns8r.cn
暄字五行属什么hcv8jop6ns3r.cn 乙肝第二针最晚什么时候打hcv8jop8ns1r.cn 什么减肥最快不反弹hcv8jop7ns4r.cn 情人节送什么礼物好0297y7.com 豌豆什么时候种最好hcv9jop1ns7r.cn
骨折吃什么恢复的快hcv8jop2ns4r.cn 上午12点是什么时候hcv9jop0ns3r.cn 毛滴虫病是什么病hcv8jop4ns6r.cn 1945属什么生肖hcv8jop2ns1r.cn 晚上吃什么hcv8jop3ns7r.cn
松子吃多了有什么害处hcv9jop3ns9r.cn 反骨是什么意思cl108k.com 挂帅是什么意思hcv7jop6ns2r.cn 强硬是什么意思hcv9jop4ns7r.cn 缪读什么hcv9jop8ns1r.cn
百度