基于stm32的ucosii系统移植.docx

上传人:b****6 文档编号:8549226 上传时间:2023-01-31 格式:DOCX 页数:34 大小:335.13KB
下载 相关 举报
基于stm32的ucosii系统移植.docx_第1页
第1页 / 共34页
基于stm32的ucosii系统移植.docx_第2页
第2页 / 共34页
基于stm32的ucosii系统移植.docx_第3页
第3页 / 共34页
基于stm32的ucosii系统移植.docx_第4页
第4页 / 共34页
基于stm32的ucosii系统移植.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

基于stm32的ucosii系统移植.docx

《基于stm32的ucosii系统移植.docx》由会员分享,可在线阅读,更多相关《基于stm32的ucosii系统移植.docx(34页珍藏版)》请在冰豆网上搜索。

基于stm32的ucosii系统移植.docx

基于stm32的ucosii系统移植

基于STM32的u/COS-II系统移植

【摘要】本文硬件平台采纳ARM公司基于ARMV7架构的Cortex-M3系列处置器STM32F103,利用安富来公司现有的开发板,移植一个基于u/COS-II操作系统的应用程序框架(系统移植);创建多个任务,并通过利用消息邮箱进行两个任务之间的通信。

本文重点是把u/COS-II系统移植到程序中来,进而把各个大体功能模块化,并划分为几个主任务,以便实现嵌入式系统的操作。

【关键字】u/COS-IISTM32系统移植消息邮箱串口通信

【引言】随着人类社会经济的不断进展,科研领域不断的拓宽,嵌入式系统产品渐渐完善,并在全世界各行业取得普遍应用。

通过移植嵌入式操作系统,运算性能够更好地治理内存,而且在专门大程度上提高系统的实时性。

本设计通过在STM32上移植u/COS-II操作系统,实现了流水灯闪烁,利用消息邮箱实现多任务间的通信,并通过串口将信息打印到PC终端等功能。

加深了笔者对嵌入式操作系统的明白得。

【正文】

1U/COS-II的简介

U/COS-II的前身是UCOS,最先出自于1992年美国嵌入式系统专家Jean在《嵌入式系统编程》杂志的5月和6月刊上刊登的文章连载,并把UCOS的源码发布在该杂志的BBS上。

目前最新的版本:

U/COS-lll已经出来,可是此刻利用最为普遍的仍是U/COS-II,本章咱们要紧针对U/COS-II进行介绍。

U/COS-II是一个能够基于ROM运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,专门适合于微处置器和操纵器,是和很多商业操作系统性能相当的实时操作系统(RTOS)。

为了提供最好的移植性能,U/COS-II最大程度上利用ANSIC语言进行开发,而且已经移植到近40多种处置器体系上,涵盖了从8位到64位各类CPU(包括DSP)。

U/COS-II是专门为运算机的嵌入式应用设计的,绝大部份代码是用C语言编写的。

CPU硬件相关部份是用汇编语言编写的,总量约200行的汇编语言部份被紧缩到最低限度,为的是便于移植到任何一种其它的CPU上。

用户只要有标准的ANSI的C交叉编译器,有汇编器、连接器等软件工具,就能够够将U/COS-II嵌人到开发的产品中。

U/COS-II具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB。

U/COS-II已经移植到了几乎所有知名的CPU上。

U/COS-II构思巧妙。

结构简练精练,可读性强,同时又具有了实时操作系统的全数功能,尽管它只是一个内核,但超级适合第一次接触嵌入式实时操作系统者,能够说是麻雀虽小,五脏俱全。

U/COS-II(版本)体系结构如图1所示:

图1:

U/COS-II体系结构图

本设计利用的是U/COS-II的最新版本:

版本,该版本U/COS-II比初期的U/COS-II(如)多了很多功能(比如多了软件按时器,支持任务数最大达到255个等),而且修正了很多已知BUG。

从上图能够看出,U/COS-II的移植,只需要修改:

、和等三个文件即可,其中:

,进行数据类型的概念,和处置器相关代码和几个函数原型;,是移植进程中需要汇编完成的一些函数,要紧确实是任务切换函数;,概念一些用户HOOK函数。

图中按时器的作用是为U/COS-II提供系统时钟节拍,实现任务切换和任务延时等功能。

那个时钟节拍由OS_TICKS_PER_SEC(中概念)设置,一样设置U/COS-II的系统时钟节拍为1ms~100ms,具体依照所用途理器和利用需要来设置。

本设计中,我利用STM32的SYSTICK按时器来提供U/COS-II时钟节拍。

U/COS-II初期版本只支持64个任务,可是从版本开始,支持任务数提高到255个,只是对一样利用者来讲一样64个任务都是足够多了,一样很难用到这么多个任务。

U/COS-II保留了最高4个优先级和最低4个优先级的总共8个任务,用于拓展利用,但事实上,U/COS-II一样只占用了最低2个优先级,别离用于空闲任务(倒数第一)和统计任务(倒数第二),因此剩下给咱们利用的任务最多可达255-2=253个()。

所谓的任务,其实确实是一个死循环函数,该函数实现必然的功能,一个工程能够有很多如此的任务(最多255个),U/COS-II对这些任务进行调度治理,让这些任务能够并发工作(注意不是同时工作!

并发只是各任务连番占用CPU,而不是同时占用,任何时候仍是只有1个任务能够占用CPU),这确实是U/COS-II最大体的功能。

U/COS-II的任何任务都是通过一个叫任务操纵块(TCB)的东西来操纵的,每一个任务治理块有3个最重要的参数:

1,任务函数指针;2,任务堆栈指针;3,任务优先级;任务操纵块确实是任务在系统里面的身份证(U/COS-II通过优先级识别任务)。

在U/COS-II中,利用CPU的时候,优先级高(数值小)的任务比优先级低的任务具有优先利用权,即任务就绪表中老是优先级最高的任务取得CPU利用权,只有高优先级的任务让出CPU利用权(比如延时)时,低优先级的任务才能取得CPU利用权。

U/COS-II不支持多个任务优先级相同,也确实是每一个任务的优先级必需不一样。

任务的调度其实确实是CPU运行环境的切换,即:

PC指针、SP指针和寄放器组等内容的存取进程。

U/COS-II的每一个任务都是一个死循环。

每一个任务都处在以下5种状态之一的状态下,这5种状态是:

睡眠状态、就绪状态、运行状态、等待状态(等待某一事件发生)和中断效劳状态。

在U/COS-II中,与任务相关的几个重要函数:

1)创建任务函数

若是想让U/COS-II治理用户的任务,必需先成立任务。

U/COS-II提供了2个成立任务的函数:

OSTaskCreat和OSTaskCreatExt,咱们一样用OSTaskCreat函数来创建人任务,该函数的原型为OSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK*ptos,INTUprio)。

该函数包括4个参数:

task:

是指向任务代码的指针;pdata:

是任务开始执行时,传递给任务的参数的指针;ptos:

是分派给任务的堆栈的栈顶指针;prio是分派给任务的优先级。

每一个任务都有自己的堆栈,堆栈必需申明为OS_STK类型,而且由持续的内存空间组成。

能够静态分派堆栈空间,也能够动态分派堆栈空间。

OSTaskCreatExt也能够用来创建任务。

2)改变任务的优先级函数

U/COS-II在成立任务时,会分派给任务一个优先级,可是那个优先级并非是一成不变的,而是能够通过挪用U/COS-II提供的函数修改。

U/COS-II提供的任务优先级修改函数原型为:

INT8UOSTaskChangePrio(INT8Uoldprio,INT8Unewprio)。

3)任务挂起函数

任务挂起只是将被挂起任务的就绪标志删除,并做任务挂起记录,并无将任务操纵块任务操纵块链内外面删除,也不需要释放其资源。

被挂起的任务,在恢复(解挂)后能够继续运行。

U/COS-II提供的任务挂起函数原型为:

INT8UOSTaskSuspend(INT8Uprio)。

4)任务恢复函数

有任务挂起函数,就有任务恢复函数,通过该函数将被挂起的任务恢复,让调度器能够从头调度该函数。

U/COS-II提供的任务恢复函数原型为:

INT8UOSTaskResume(INT8Uprio)。

2.U/COS-II信号量和邮箱简介

系统中的多个任务在运行时,常常需要相互无冲突地访问同一个共享资源,或需要相互支持和依托,乃至有时还要相互加以必要的限制和制约,才保证任务的顺利运行。

因此,操作系统必需具有对任务的运行进行和谐的能力,从而使任务之间能够无冲突、流畅地同步运行,而不致致使灾难性的后果。

例如,任务A和任务B共享一台打印机,若是系统已经把打印机分派给了任务A,那么任务B因不能取得打印机的利用权而应该处于等待状态,只有当任务A把打印机释放后,系统才能唤醒任务B使其取得打印机的利用权。

若是这两个任务不如此做,那么会造成极大的混乱。

任务间的同步依托于任务间的通信。

在U/COS-II中,是利用信号量、邮箱(消息邮箱)和消息队列这些被称作事件的中间环节来实现任务之间的通信的。

两个任务通过事件进行通信的示用意如图2所示:

图2:

两个任务利用事件进行通信的示用意

在图2中任务1是发信方,任务2是收信方。

任务1负责把信息发送到时刻上,这项操作叫做发送事件。

任务2通过读取事件操作对事件进行查询:

若是有信息那么读取,不然等待。

读事件操作叫做请求事件。

为了把描述事件的数据结构统一路来,U/COS-II利用叫做事件操纵块(ECB)的数据结构来描述诸如信号量、邮箱(消息邮箱)和消息队列这些事件。

事件操纵块中包括包括等待任务表在内的所有有关事件的数据,事件操纵块结构体概念如下:

typedefstruct

{

INT8UOSEventType;硬件部份

本实验功能简介:

本程序共创建了6个任务:

1)u/COS-IIIdle任务,这是由操作系统创建的空闲任务,优先级最低

2)u/COS-IIStat任务,这是由操作系统创建的统计任务,统计CPU运行时刻、CPU占用率等

3)u/COS-IITmr任务,这是由操作系统创建的按时器任务,为应用程序提供软件按时器

4)AppTaskStart任务,这是由用户创建的启动任务,完成如下工作:

(a)初始化BSP

(b)创建1个邮箱AppUserIFMbox

(c)创建2个任务,1个是用户界面任务AppTaskUserIF,1个是按键检测任务AppTaskKbd

(d)以后操纵LED1指示灯依照100ms的周期闪烁

5)AppTaskKbd任务,这是由AppTaskStart创建的按键检测任务

按键检测任务AppTaskKbd实时检测USER键和TAMPER键的状态,当有键按下时,那么向邮箱AppUserIFMbox发送一条消息,消息内容为按键码变量的指针。

6)AppTaskUserIF任务,这是由AppTaskStart创建的用户界面任务户界面任务AppTaskUserIF等待邮箱中的消息,若是USER键按下的消息那么打印u/COS-II系统信息,若是收到TAMPER键按下那么打印所有的任务名称和任务优先级;若是没有收到任何信息那么打印一个旋转的字符和CPU运行时刻(单位为1个滴答)。

所要用到的硬件资源如下:

(1)指示灯LD1,LD2,LD3,LD4

(2)2个按键(USER/TAMPER)

(3)RS232串口

安富来开发板CPU对应的GPIO:

a)PB15连接了LED1指示灯,输出低电平点亮LED

b)PE1连接了USER键,低电平表示按下

c)PC13连接了TAMPER键,低电平表示按下

CPU的USART1:

a)PA9用于USART1的TX,连接到板子上的RS232芯片(SP3232)

b)PA10用于USART1的RX,连接到板子上的RS232芯片(SP3232)

c)串口为2线模式,无硬件流控,即无CTS和RTS口线

d)波特率为115200bps

e)8个数据位、1个起始位、1个停止位、无校验位、bit0先传输

f)软件查询方式,未用中断

CPU的中断

a)PendSVHandler用于u/COS-II内核,中断向量等于OSPendSV()函数地址

b)SysTick_Handler用于u/COS-II滴答,挪用了Tmr_TickISR_Handler()函数

4.软件部份

(1)main()函数

功能说明:

标准C函数入口

intmain(void)

{

CPU_INT08Uerr;

SystemInit();

/*禁止所有的中断*/

BSP_IntDisAll();

/*初始化"uC/OS-II"内核*/

OSInit();

/*创建一个启动任务(也确实是主任务)。

启动任务会创建所有的应用程序任务*/

OSTaskCreateExt(AppTaskStart,/*启动任务函数指针*/

(void*)0,/*传递给任务的参数*/

(OS_STK*)&AppTaskStartStk[APP_TASK_START_STK_SIZE-1],/*指向任务栈栈顶的指针*/

APP_TASK_START_PRIO,/*任务的优先级,必须唯一,数字越低优先级越高*/

APP_TASK_START_PRIO,/*任务ID,一般和任务优先级相同*/

(OS_STK*)&AppTaskStartStk[0],/*指向任务栈栈底的指针。

OS_STK_GROWTH决定堆栈增加方向*/

APP_TASK_START_STK_SIZE,/*任务栈大小*/

(void*)0,/*一块用户内存区的指针,用于任务控制块TCB的扩展功能

(如任务切换时保留CPU浮点寄放器的数据)。

一样不用,填0即可*/

OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);/*任务选项字*/

/*概念如下:

OS_TASK_OPT_STK_CHK使能检测任务栈,统计任务栈已用的和未用的

OS_TASK_OPT_STK_CLR在创建任务时,清零任务栈

OS_TASK_OPT_SAVE_FP若是CPU有浮点寄放器,那么在任务切换时保留浮点寄放器的内容

*/

/*指定任务的名称,用于调试。

那个函数是可选的*/

OSTaskNameSet(APP_TASK_START_PRIO,APP_TASK_START_NAME,&err);

/*启动多任务系统,操纵权交给uC/OS-II*/

OSStart();

}

(2)任务启动函数AppTaskStart()

功能说明:

这是一个启动任务,在多任务系统启动后,必需初始化滴答计数器(在BSP_Init中实现)在该任务中操纵流水灯的闪烁程序如下:

/*任务主体,必需是一个死循环*/

while

(1)

{

for(j=0;j<4;j++)

{

for(i=1;i<=4;i++)

{

bsp_LedOn(i);

OSTimeDlyHMSM(0,0,0,50);

bsp_LedOff(i);

OSTimeDlyHMSM(0,0,0,50);

}02d\r\n",OSVersion()/100,OSVersion()%100);

/*打印滴答(心跳)速度,即每秒多少次心跳*/

printf("TickRate:

%d\r\n",OS_TICKS_PER_SEC);

/*打印CPU占用率*/

printf("CPUUsage:

%02d%%\r\n",OSCPUUsage);

/*打印CPU速度*/

printf("CPUSpeed:

%dMHz\r\n",BSP_CPU_ClkFreq()/1000000L);

/*打印CPU已运行时刻(单位:

滴答)*/

printf("#Ticks:

%d\r\n",OSTime);

/*打印上下文切换次数(contextswitches)*/

printf("#CtxSw:

%d\r\n",OSCtxSwCtr);

}

(7)任务信息打印函数DispTaskInfo()

staticvoidDispTaskInfo(void)

{

OS_TCB*ptcb;/*定义一个任务控制块指针,TCB=TASKCONTROLBLOCK*/

OS_STK_DATAstk;/*用于读取任务栈使用情况*/

ptcb=&OSTCBTbl[0];/*指向第1个任务控制块(TCB)*/

/*打印题目*/

printf("MicriumuC/OS-II\r\n");

printf("STSTM32(Cortex-M3)\r\n");

printf("PrioUsedFreePerTaskname\r\n");

/*遍历任务操纵块列表(TCBlist),打印所有的任务的优先级和名称*/

while(ptcb!

=NULL)

{

/*

ptcb->OSTCBPrio:

任务操纵块中保留的任务的优先级

ptcb->OSTCBTaskName:

任务操纵块中保留的任务名称,需要在创建任务的时候

挪用OSTaskNameSet()指定任务名称,比如:

OSTaskNameSet(APP_TASK_USER_IF_PRIO,"UserI/F",&err);

*/

OSTaskStkChk(ptcb->OSTCBPrio,&stk);/*获得任务栈已用空间*/

printf("%2d%5d%5d%02d%%%s\r\n",ptcb->OSTCBPrio,

,*100)/+,

ptcb->OSTCBTaskName);

ptcb=ptcb->OSTCBPrev;/*指向上一个任务控制块*/

}

}

5.系统功能

系统上电后,流水灯以100ms的周期“从左到右流动”→“从右到左流动”→“四个灯同时闪烁”;按键检测任务AppTaskKbd实时检测USER键和TAMPER键的状态,当有键按下时,那么向邮箱AppUserIFMbox发送一条消息,消息内容为按键码变量的指针。

用户界面任务AppTaskUserIF等待邮箱中的消息,若是USER键按下的消息那么打印u/COS-II系统信息,若是收到TAMPER键按下那么打印所有的任务名称和任务优先级。

具体运行结果如以下图(图3-图6)所示:

图3:

流水灯流动

图4:

流水灯闪烁

 

图5:

TAMPER键按下打印所有的任务名称和任务优先级

 

图6:

USER键按下打印u/COS-II系统信息

6心得体会

《嵌入式测控系统》是一门实践性很强的课,专门U/COS-II操作系统,关于一名仪器科学与技术的学生来讲,扎实把握该操作系统是一项必备的专业技术。

我关于这门课的学习,很多知识是从课件上看来的,而且看完以后,感觉自己已经把握的专门好了,但实际真正做东西的时候,仍是会感觉困难重重,而此时再去参考课件,便有了对知识的更深层次的明白得。

其实在这方面最应该感激的是网络给咱们带来的方便,通过上网搜索,很多问题都能够迎刃而解,而且很多网友都有自己独特的观点,在他们的讨论中看到了很多有效的东西。

“学以促用,用以促学,而且带着问题学习才能学到真正的知识”,这是这门专业课带给我的重要熟悉。

在这学期的学习中我学到了很多,也熟悉到我需要学习的东西更多,仅凭此刻学到的东西是远远不够的,要想在这方面作出一些成绩,必需继续尽力学下去。

7参考文献

1.《嵌入式实时操作系统uC/OS-II原理及应用》北京航空航天大学出版社出版,任哲编著

2.《UCOSII在STM32的移植详解.pdf》战舰开发板配套资料

3.《ucosII实时操作系统》北京航空航天大学出版社出版,任哲编著

4.《STM32开发指南-库函数版本.pdf》安富来开发板配套资料

毕业设计(论文)治理规定

及相关表格汇编

 

本科生毕业设计(论文)治理规定……………………1

毕业论文(设计)工作实施细那么(草案)……………2

优秀毕业论文评选方法………………………………7

毕业论文的写作与排版标准…………………………10

毕业设计(论文)写作模板…………………………14

毕业设计(论文)答辩提问记录表………………21

毕业设计第周工作总结……………………22

毕业设计(论文)进程跟踪表……………………23

毕业设计(论文)课题申请表………………………24

毕业设计(论文)任务书…………………………25

毕业设计(论文)开题报告…………………………26

毕业设计工作中期检查Ⅰ…………………………27

毕业设计工作中期检查Ⅱ……………………………28

 

大学

本科生毕业设计(论文)治理规定

为提高本科生毕业设计(论文)质量,增强毕业生毕业设计治理工作,特制定如下规定:

1.本科毕业设计工作从第七学期(四年级第一学期)考试周前,完成教师选题、师生见面及指导教师向学生下达任务书(见附表一)。

毕业设计从第八学期开学正式开始,十六周内完成。

2.毕业设计开始时,教师必需填写毕业设计课题申请表、并由系汇总后交院毕业设计领导小组审核。

(见附表)。

3.指导教师必需按期对学生辅导(每周至少两次),并将确信的周辅导时刻上报教学办,教学办将按期和不按期进行检查。

4.指导教师自行组织学生的开题报告,并填写开题报告表(见附表二)

5.增强中期的监督与检查,第一次检查时刻定在第五周,检查内容含学生资料阅读,方案论证情形。

第二次检查定在第十周,形式为:

由指导教师组织,院毕业设计领导小组成员旁听,学生口头汇报。

要紧检查学生的时期性结果。

两次检查学生均应填写中期检查报告表格(见附表三、四),指导教师或系对检查情形写出书面评语。

6.学生需上交一篇与本专业有关很多于5000字的外文文章翻译,并将原文和译文用A4打印加自设计封皮一路装订成册。

7.论文答辩前,指导教师必需给出评语及评分,然后由各系主任指定其他评阅人对论文进行评阅及评分(请参考毕业论文书面成绩评分表规定的评分标准评分)。

8.论文答辩由各系组织,并成立答辩委员会对所有学生论文进行答辩。

答辩必需给出答辩委员会意见及评分并填写相应表格。

答辩委员会成员必需按评分表中各项指标标准进行评分,然后由各成员给出的分数计算出得分。

9.毕业设计(论文)最终成绩计算:

指导教师评分x30%+评阅人评分x30%+答辩委员会评分x40%=总分

10.毕业设计(论文)提交的文档及装订要求

(1)毕业论文一份(包括封皮、目录、中英文摘要、内容及参考文献)

(2)很多于5000汉字的科技翻译资料一份(并将原文和译文用A4打印加自设计封皮一路装订成册)

(3)毕业论文简介(A4纸打印1~2页)(包括题目、专业、年级、姓名、指导教师、毕业论文所做的工作、解决的问题、创新的地方等)

(4)毕业设计任务书(加在毕业论文目录之前和毕业论文一路装订,)

(5)开题报告(加在毕业论文目录之前和毕业论文一路装订,)

(6)毕业设计工作中期检查表Ⅰ、Ⅱ

注(4)(5)(6)加在毕业论文目录之前和毕业论文一路装订。

11.毕业设计(论文)随正式论文一概附交电子文档(光盘或软盘)。

被推荐参加学校优秀毕业设计(论文)3%评选的,还要另附(符合发表格式要求的)修改成5000字左右的电子文档。

     

 2005年12月修订

大学

毕业设计(论文)工作实施细那么(试行)

依照《毕业设计(论文)工作暂行规定》,为了进一步标准毕业设计(论文)工作的各个环节,结合我院实际情形,经院教学指导委员会讨论,院长办公联席会议通过,对我院毕业设计(论文)工作特制订以下实施细那么。

一、指导教师资格

毕业设计(论文)的指导教师原那么上应由各专业具有中级(含中级)以上专业技术职务的教师担任。

也能够聘用具有相应职称、学术水平高的工程技术人员担任。

指导教师名

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1