100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > CUMT学习日记——ucosII理论解析—任哲版教材

CUMT学习日记——ucosII理论解析—任哲版教材

时间:2023-12-01 10:51:33

相关推荐

CUMT学习日记——ucosII理论解析—任哲版教材

CUMT学习日记——ucosII课程学习全记录

系列第一篇 计算机网络复习

系列第二篇 计算机组成原理复习

系列第三篇 微机原理与接口技术复习

系列第四篇 计算机操作系统复习

系列第五篇 数据库原理复习

系列第六篇 数字系统设计基础(VHDL)复习

系列第七篇 单片机原理及应用复习

系列第八篇 信号与系统复习

系列第九篇 算法导论复习

系列第十篇 Verilog复习

系列第十一篇 ucosII复习


文章目录

CUMT学习日记——ucosII课程学习全记录一、ucos复习回忆二、笔记课后作业练习代码多任务调度实验利用消息队列进行任务间通信信号量集实验写在最后

一、ucos复习回忆

因为我是嵌入式方向的,所以这门课学得很认真,基本上源码都看了两遍,对这个系统也有了一定的认识,勉强算是入门了,学习过程中最重要的资料是钟常慰老师的ucosII代码中文注释(csdn有相关资源),其次是教材,教材其实感觉一般,在不看源码的情况不太容易懂得系统内部逻辑。

最后考试成绩很理想,接近满分。

二、笔记

课后作业

练习代码

ucos环境csdn有,用vc6环境。

多任务调度实验

编写延时分别为3s、1s和1s的三个任务,观察任务之鉴的交替运行次序,熟悉任务调度的过程。要求三个任务的输出分别为:M、Y和H,连续不换行显示

实验过程:

1.编写可运行uC/OS-II环境

2.编写MyTask,YouTask,HerTask,分别填入输出MYH和延时3s,1s,1s

3.运行,并显示

/******************************Test*******************************/#include "includes.h"#define TASK_STK_SIZE 512//任务堆栈长度OS_STK MyTaskStk[TASK_STK_SIZE];//定义任务堆栈区OS_STK YouTaskStk[TASK_STK_SIZE];//定义任务堆栈区OS_STK HerTaskStk[TASK_STK_SIZE];//定义任务堆栈区INT16S key;//用于退出uCOS_II的键INT8U x=0,y=0;//字符显示位置BOOLEAN InterKey=FALSE;void MyTask(void *data);//声明任务void YouTask(void *data);//声明任务void HerTask(void *data);//声明任务/************************主函数*********************************/void main(void){char*s_M="M";char*s_Y="Y";char*s_H="H";OSInit();OSTaskCreate(MyTask,s_M,&MyTaskStk[TASK_STK_SIZE-1],0);OSTaskCreate(YouTask,s_Y,&YouTaskStk[TASK_STK_SIZE-1],1);OSTaskCreate(HerTask,s_H,&HerTaskStk[TASK_STK_SIZE-1],2);OSStart();}/*******************任务MyTask**********************************/void MyTask (void *pdata){//OS_ENTER_CRITICAL();for(;;){printf("M");OSTimeDlyHMSM(0, 0, 3, 0);//等待3秒}//OS_EXIT_CRITICAL();}/************************任务YouTask******************************/void YouTask (void *pdata){//OS_ENTER_CRITICAL();for(;;){printf("Y");OSTimeDlyHMSM(0, 0, 1, 0);//等待1秒}//OS_EXIT_CRITICAL();}/***********************InterTask*******************************/char*s="运行了中断所要求运行的任务InterTask。";void HerTask (void *pdata){//OS_ENTER_CRITICAL();for(;;){printf("H");OSTimeDlyHMSM(0, 0, 1, 0);//等待1秒}//OS_EXIT_CRITICAL();}/************************End************************************/

利用消息队列进行任务间通信

仿照例5-9,利用先进先出的方式组织消息,由任务一发送消息,任务二和任务三请求消息,三个任务的延时时间均为1s。

实验过程:

编写可运行uC/OS-II环境

2.基于实例代码,编写任务

3.运行,并显示

/************************Test*************************************/#include "includes.h"#define TASK_STK_SIZE 512//任务堆栈长度OS_STK StartTaskStk[TASK_STK_SIZE];//定义任务堆栈区OS_STK MyTaskStk[TASK_STK_SIZE];//定义任务堆栈区OS_STK YouTaskStk[TASK_STK_SIZE];//定义任务堆栈区char*ss;char*s100;char*s0;char*s1;char*s500;#define N_MESSAGES128//定义消息队列长度void *MsgGrp[N_MESSAGES];//定义消息指针数组INT8U err; OS_EVENT *Str_Q;//定义事件控制块void StartTask(void *data);//声明起始任务void MyTask(void *data);//声明任务void YouTask(void *data);//声明任务/************************主函数*********************************/void main (void){OSInit( );//初始化uCOS_IIStr_Q = OSQCreate (&MsgGrp[0],N_MESSAGES);//创建消息队列OSTaskCreate(StartTask,//创建任务StartTask(void*)0,//给任务传递参数&StartTaskStk[TASK_STK_SIZE - 1],//设置任务堆栈栈顶0);//使任务的优先级别为0OSTaskCreate(MyTask,(void*)0,&MyTaskStk[TASK_STK_SIZE - 1],3);OSTaskCreate(YouTask,(void*)0,&YouTaskStk[TASK_STK_SIZE - 1],4);OSStart( );//启动多任务管理}/***********************任务StartTask*******************************/void StartTask (void *pdata){pdata = pdata; s0="这个串能收到几次?";OSQPost(Str_Q,s0); //发送消息for (;;) {if(OSTimeGet()>0 && OSTimeGet()<200) //可以满足两次条件{s100="现在OSTime的值在0到200之间";OSQPost(Str_Q,s100);//发送消息s1="这个串是哪个任务收到的?";OSQPost(Str_Q,s1);//发送消息}if(OSTimeGet()>2000 && OSTimeGet()<2300){s500="现在OSTime的值在2000到2300之间";OSQPost(Str_Q,s500);//发送消息}OSTimeDlyHMSM(0, 0, 1, 0);//等待1秒}}/************************任务MyTask*******************************/void MyTask (void *pdata){pdata = pdata;for (;;) {ss=OSQPend(Str_Q,0,&err); //请求消息队列 printf("%s\n", ss);printf("task2 is running\n");OSTimeDlyHMSM(0, 0, 1, 0);//等待1秒}}/************************任务YouTask******************************/void YouTask (void *pdata){pdata = pdata; for (;;) {ss=OSQPend(Str_Q,0,&err); //请求消息队列 printf("%s\n", ss);printf("task3 is running\n");OSTimeDlyHMSM(0, 0, 1, 0);//等待1秒}}

信号量集实验

实验目的:熟悉信号量集的基本概念及其结构

实验过程:

编写可运行uC/OS-II环境基于实例代码,编写任务运行,并得出结论

#include <includes.h>#define TASK_STK_SIZE 512OS_STK StartTaskStk[TASK_STK_SIZE];//定义任务堆栈区OS_STK MyTaskStk[TASK_STK_SIZE];//定义任务堆栈区OS_STK YouTaskStk[TASK_STK_SIZE];//定义任务堆栈区OS_STK HerTaskStk[TASK_STK_SIZE];//定义任务堆栈区char*s1 ="mytask";char*s2 ="youtask";char*s3 ="hertask";INT8U err;OS_FLAG_GRP*Sem_F;void StartTask(void*data);void MyTask(void*data);void YouTask(void*data);void HerTask(void*data);void main(void){OSInit();Sem_F=OSFlagCreate(0,&err);OSTaskCreate(StartTask,(void*)0,&StartTaskStk[TASK_STK_SIZE-1],0);OSStart();}void StartTask(void *pdata){#if OS_CRITICAL_METHOD == 3OS_CPU_SR cpu_sr;#endifpdata = pdata;OSStatInit();OSTaskCreate(MyTask,(void*)0,&MyTaskStk[TASK_STK_SIZE-1],3);OSTaskCreate(YouTask,(void*)0,&YouTaskStk[TASK_STK_SIZE-1],4);OSTaskCreate(HerTask,(void*)0,&HerTaskStk[TASK_STK_SIZE-1],5);for(;;){OSTimeDlyHMSM(0, 0, 3, 0);}}void MyTask (void *pdata){pdata = pdata;for (;;){OSFlagPend( //请求信号量集Sem_F,(OS_FLAGS)3, //请求第0位和第1位信号OS_FLAG_WAIT_SET_ALL, //第0位和第1位信号都为1为有效0,&err);printf(s1);printf("\n");OSTimeDlyHMSM(0, 0, 2, 0); //等待2秒}}void YouTask (void *pdata){pdata = pdata;for (;;){printf(s2);printf("\n");OSTimeDlyHMSM(0, 0, 8, 0); //延时8秒OSFlagPost( Sem_F,(OS_FLAGS)2, OS_FLAG_SET, &err);OSTimeDlyHMSM(0, 0, 2, 0); //等待2秒}}void HerTask (void *pdata){pdata = pdata;for (;;){printf(s3);printf("\n");OSFlagPost( //发送信号量集Sem_F,(OS_FLAGS)1, //给第0位发信号OS_FLAG_SET, //信号置1&err);OSTimeDlyHMSM(0, 0, 1, 0);//等待1秒}}

写在最后

ucos很有意思,最近想捣腾freertos,学过ucos之后就感觉很像。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。