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_MESSAGES 128 //定义消息队列长度
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 512
OS_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之后就感觉很像。
CUMT学习日记——ucosII理论解析—任哲版教材相关推荐
- CUMT学习日记——软件工程考前速成记录
CUMT学习日记--软件工程考前速成记录 系列第一篇 计算机网络复习 系列第二篇 计算机组成原理复习 系列第三篇 微机原理与接口技术复习 系列第四篇 计算机操作系统复习 系列第五篇 数据库原理复习 系 ...
- CUMT学习日记——Verilog课程学习全记录
CUMT学习日记--Verilog课程学习全记录 系列第一篇 计算机网络复习 系列第二篇 计算机组成原理复习 系列第三篇 微机原理与接口技术复习 系列第四篇 计算机操作系统复习 系列第五篇 数据库原理 ...
- CUMT学习日记——计算机网络之面向考题复习
CUMT学习日记--计算机网络之面向考题复习 系列第一篇 计算机网络复习 文章目录 CUMT学习日记--计算机网络之面向考题复习 写在前面 一.计网复习攻略 二.笔记 写在前面 复习一天半,并非我本意 ...
- CUMT学习日记——信号与系统之考试复习的记录
CUMT学习日记--信号与系统之考试复习的记录 系列第一篇 计算机网络复习 系列第二篇 计算机组成原理复习 系列第三篇 微机原理与接口技术复习 系列第四篇 计算机操作系统复习 系列第五篇 数据库原理复 ...
- CUMT学习日记——计算机操作系统之面向考题复习
CUMT学习日记--计算机操作系统之面向考题复习 系列第一篇 计算机网络复习 系列第二篇 计算机组成原理复习 系列第三篇 微机原理与接口技术复习 系列第四篇 计算机操作系统复习 文章目录 CUMT学习 ...
- CUMT学习日记——计算机组成原理之面向考题复习
CUMT学习日记--计算机组成原理之面向考题复习 系列第一篇 计算机网络复习 系列第二篇 计算机组成原理复习 文章目录 CUMT学习日记--计算机组成原理之面向考题复习 写在前面 一.计算机组成原理复 ...
- 计算机原理学习指导第3版,计算机组成原理学习指导与习题解析(第3版)(21世纪大学本科计算机...
摘要: 这本<计算机组成原理学习指导与习题解析(第3版)>由蒋本珊编著,是与"十二五"普通高等教育本科国家级规划教材<计算机组成原理(第3版)>完全配套的学 ...
- oracle工作日记,Oracle学习日记【4】
1.查询所返回的列数以及列的类型必须匹配,列名可以不同. 2.只有UNION ALL不会去重.其他三个都需要排序后去重,性能比较差. 2.连接查询 2.1.内连接(INNER JOIN):INNER可 ...
- ffmpeg学习日记701-报错-co located POCs unavailable
ffmpeg学习日记701-报错-co located POCs unavailable h264 co located POCs unavailable 出现该报错,是由于直接解析的帧是非关键帧,没 ...
最新文章
- Python 基础 二
- python3入门-终于懂得python3快速入门教程
- 我的四年建站故事(X)
- 6.Spring Cloud Alibaba教程:Sentinel流量防卫兵的介绍与基本使用
- python爬虫源码附注解_Python小白写的三个入门级的爬虫(附代码和注释)
- 安装VS2013的离线MSDN帮助文档
- Asp.Net就业课之案例实践第二次课
- 【代码笔记】iOS-点击城市中的tableView跳转到旅游景点的tableView,下面会有“显示”更多。...
- 工作流实战_24_flowable 全局监听
- KVM之初体验——QEMU安装虚拟机
- python 文件管理_python 文件操作
- docker强制删除none的image镜像
- 在Vim中将DOS行尾转换为Linux行尾
- IOS--CALayer实现,界限、透明度、位置、旋转、缩放组合动画(转)
- 伽罗华有限域_有限域 伽罗瓦域
- PHP方法,传入的参数前带三个点是什么意思?
- mac部署rabbitmq流程与异常总结
- 游戏《迷你世界》如何吸引小鸡到鸡窝里?这些道具很重要!
- tooth的用法_tooth的复数和用法例句
- php个人空间源码,PHP安装 - 牛牛牛大棚的个人空间 - OSCHINA - 中文开源技术交流社区...