基于stm32的ucosii系统移植Word格式.docx

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

基于stm32的ucosii系统移植Word格式.docx

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

基于stm32的ucosii系统移植Word格式.docx

,概念一些用户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,一般和任务优先级相同*/

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);

}02d\r\n"

OSVersion()/100,OSVersion()%100);

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

printf("

TickRate:

%d\r\n"

OS_TICKS_PER_SEC);

/*打印CPU占用率*/

CPUUsage:

%02d%%\r\n"

OSCPUUsage);

/*打印CPU速度*/

CPUSpeed:

%dMHz\r\n"

BSP_CPU_ClkFreq()/1000000L);

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

滴答)*/

#Ticks:

OSTime);

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

#CtxSw:

OSCtxSwCtr);

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

staticvoidDispTaskInfo(void)

OS_TCB*ptcb;

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

OS_STK_DATAstk;

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

ptcb=&

OSTCBTbl[0];

/*指向第1个任务控制块(TCB)*/

/*打印题目*/

MicriumuC/OS-II\r\n"

);

STSTM32(Cortex-M3)\r\n"

PrioUsedFreePerTaskname\r\n"

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

while(ptcb!

=NULL)

/*

ptcb->

OSTCBPrio:

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

OSTCBTaskName:

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

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

OSTaskNameSet(APP_TASK_USER_IF_PRIO,"

UserI/F"

&

*/

OSTaskStkChk(ptcb->

OSTCBPrio,&

stk);

/*获得任务栈已用空间*/

%2d%5d%5d%02d%%%s\r\n"

ptcb->

OSTCBPrio,

,*100)/+,

OSTCBTaskName);

ptcb=ptcb->

OSTCBPrev;

/*指向上一个任务控制块*/

}

5.系统功能

系统上电后,流水灯以100ms的周期“从左到右流动”→“从右到左流动”→“四个灯同时闪烁”;

用户界面任务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