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。
实验过程:

  1. 编写可运行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秒}
}

信号量集实验

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

  1. 编写可运行uC/OS-II环境
  2. 基于实例代码,编写任务
  3. 运行,并得出结论
#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理论解析—任哲版教材相关推荐

  1. CUMT学习日记——软件工程考前速成记录

    CUMT学习日记--软件工程考前速成记录 系列第一篇 计算机网络复习 系列第二篇 计算机组成原理复习 系列第三篇 微机原理与接口技术复习 系列第四篇 计算机操作系统复习 系列第五篇 数据库原理复习 系 ...

  2. CUMT学习日记——Verilog课程学习全记录

    CUMT学习日记--Verilog课程学习全记录 系列第一篇 计算机网络复习 系列第二篇 计算机组成原理复习 系列第三篇 微机原理与接口技术复习 系列第四篇 计算机操作系统复习 系列第五篇 数据库原理 ...

  3. CUMT学习日记——计算机网络之面向考题复习

    CUMT学习日记--计算机网络之面向考题复习 系列第一篇 计算机网络复习 文章目录 CUMT学习日记--计算机网络之面向考题复习 写在前面 一.计网复习攻略 二.笔记 写在前面 复习一天半,并非我本意 ...

  4. CUMT学习日记——信号与系统之考试复习的记录

    CUMT学习日记--信号与系统之考试复习的记录 系列第一篇 计算机网络复习 系列第二篇 计算机组成原理复习 系列第三篇 微机原理与接口技术复习 系列第四篇 计算机操作系统复习 系列第五篇 数据库原理复 ...

  5. CUMT学习日记——计算机操作系统之面向考题复习

    CUMT学习日记--计算机操作系统之面向考题复习 系列第一篇 计算机网络复习 系列第二篇 计算机组成原理复习 系列第三篇 微机原理与接口技术复习 系列第四篇 计算机操作系统复习 文章目录 CUMT学习 ...

  6. CUMT学习日记——计算机组成原理之面向考题复习

    CUMT学习日记--计算机组成原理之面向考题复习 系列第一篇 计算机网络复习 系列第二篇 计算机组成原理复习 文章目录 CUMT学习日记--计算机组成原理之面向考题复习 写在前面 一.计算机组成原理复 ...

  7. 计算机原理学习指导第3版,计算机组成原理学习指导与习题解析(第3版)(21世纪大学本科计算机...

    摘要: 这本<计算机组成原理学习指导与习题解析(第3版)>由蒋本珊编著,是与"十二五"普通高等教育本科国家级规划教材<计算机组成原理(第3版)>完全配套的学 ...

  8. oracle工作日记,Oracle学习日记【4】

    1.查询所返回的列数以及列的类型必须匹配,列名可以不同. 2.只有UNION ALL不会去重.其他三个都需要排序后去重,性能比较差. 2.连接查询 2.1.内连接(INNER JOIN):INNER可 ...

  9. ffmpeg学习日记701-报错-co located POCs unavailable

    ffmpeg学习日记701-报错-co located POCs unavailable h264 co located POCs unavailable 出现该报错,是由于直接解析的帧是非关键帧,没 ...

最新文章

  1. Python 基础 二
  2. python3入门-终于懂得python3快速入门教程
  3. 我的四年建站故事(X)
  4. 6.Spring Cloud Alibaba教程:Sentinel流量防卫兵的介绍与基本使用
  5. python爬虫源码附注解_Python小白写的三个入门级的爬虫(附代码和注释)
  6. 安装VS2013的离线MSDN帮助文档
  7. Asp.Net就业课之案例实践第二次课
  8. 【代码笔记】iOS-点击城市中的tableView跳转到旅游景点的tableView,下面会有“显示”更多。...
  9. 工作流实战_24_flowable 全局监听
  10. KVM之初体验——QEMU安装虚拟机
  11. python 文件管理_python 文件操作
  12. docker强制删除none的image镜像
  13. 在Vim中将DOS行尾转换为Linux行尾
  14. IOS--CALayer实现,界限、透明度、位置、旋转、缩放组合动画(转)
  15. 伽罗华有限域_有限域 伽罗瓦域
  16. PHP方法,传入的参数前带三个点是什么意思?
  17. mac部署rabbitmq流程与异常总结
  18. 游戏《迷你世界》如何吸引小鸡到鸡窝里?这些道具很重要!
  19. tooth的用法_tooth的复数和用法例句
  20. php个人空间源码,PHP安装 - 牛牛牛大棚的个人空间 - OSCHINA - 中文开源技术交流社区...

热门文章

  1. 海外微信、支付宝、银联国际、海外信用卡及海外支付本地化
  2. [每天get点新技能]搜商——寻找“免费”的资源
  3. 【待更新】北京大学肖臻老师《区块链技术与应用》公开课笔记【04-BTC-协议】
  4. ubuntu下conda在bash和zsh终端下的自动补全设置
  5. 聚类算法(四)—— 基于词语相似度的聚类算法(含代码)
  6. java 就业前景 ppt_Java 利用POI操作PPT
  7. r76800h参数 r7 6800h核显锐龙r7 6800h什么水平
  8. Layui表格-复杂表头
  9. 北京的一些P2P网贷平台整理
  10. 【听】乌合之众,团队or团伙