博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ucos-ii示例5 消息队列测试
阅读量:3948 次
发布时间:2019-05-24

本文共 3194 字,大约阅读时间需要 10 分钟。

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!

               


ucos-ii示例5:消息队列测试

本文博客链接:,作者:jdh,转载请注明.

环境:

主机:WIN8

开发环境:MDK4.72

ucgui版本:3.90

ucos版本:ucos-ii

mcu: stm32f103VE

说明:

本示例中task1时间片为1s,task2时间片为8s。task1每秒往消息队列写入1个数据,task2全部读取出来。所以task2每次能读到8个数据。

注意:

1.消息队列需要一个指针数组指向消息

2.应该有一个固定的消息数组存储消息,不应将局部变量填入发送消息函数

3.QSQPost为先进先出函数(FIFO),QSQPostFornt为后进先出函数(LIFO)

效果图:

源码:

#define TASK_STK_SIZE  512    /**********************************************************************       静态函数**********************************************************************/static void task_start(void *pdata);static void task1(void *pdata);static void task2(void *pdata);/**********************************************************************       静态变量**********************************************************************//**********************************************************************       任务堆栈空间**********************************************************************/static OS_STK Task_Start_Stk[TASK_STK_SIZE];static OS_STK Task1_Stk[TASK_STK_SIZE];static OS_STK Task2_Stk[TASK_STK_SIZE];/**********************************************************************       信号量**********************************************************************/OS_EVENT *Semaphore;/**********************************************************************       消息队列数组**********************************************************************/void *Msg_Group[10];char Msg_Arr[10][30];uint8_t Index_Msg_Arr = 0;/**********************************************************************       函数**********************************************************************/int main(void){  //初始化内核 OSInit(); //创建任务 OSTaskCreate(task_start,(void *)0,Task_Start_Stk + TASK_STK_SIZE - 1,10);  //启动任务 OSStart();}/**********************************************************************       任务函数**********************************************************************/static void task_start(void *pdata){  //载入世界 world_load();  //设置背景色 GUI_SetBkColor(0xb07c17); GUI_Clear(); GUI_SetColor(GUI_BLACK);  Semaphore = OSQCreate(Msg_Group,10);  //新建任务 OSTaskCreate(task1,(void *)0,Task1_Stk + TASK_STK_SIZE - 1,11); OSTaskCreate(task2,(void *)0,Task2_Stk + TASK_STK_SIZE - 1,12);  while(1) {  OSTimeDlyHMSM(0,0,3,0); }}static void task1(void *pdata){ char str[30] = {
0}; uint8_t err = 0; char *mail; uint8_t i = 0; OS_Q_DATA query; while(1) {  //打印接收的消息  OSQQuery(Semaphore,&query);  for (i = 0;i < query.OSNMsgs;i++)  {   //请求信号量   mail = OSQPend(Semaphore,0,&err);   //显示   sprintf(str,"task1 receive:%s",mail);   GUI_DispStringHCenterAt(str, 120, 40 + i * 20);  }    //显示  sprintf(str,"task1 time:%ds",OSTimeGet());  GUI_DispStringHCenterAt(str, 120, 5);  WM_Exec();  OSTimeDlyHMSM(0,0,8,0); }}static void task2(void *pdata){ char str[30] = {
0}; while(1) {  //显示  sprintf(*(Msg_Arr + Index_Msg_Arr),"task2 send:%ds",OSTimeGet());  //发送信号量  OSQPost(Semaphore,*(Msg_Arr + Index_Msg_Arr));  Index_Msg_Arr++;  if (Index_Msg_Arr >= 10)  {   Index_Msg_Arr = 0;  }    //显示  sprintf(str,"task2 time:%ds",OSTimeGet());  GUI_DispStringHCenterAt(str, 120, 20);  WM_Exec();  OSTimeDlyHMSM(0,0,1,0); }}

           

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!

你可能感兴趣的文章
boost1.43在win7下的编译
查看>>
VC++工程如何脱离VSS环境
查看>>
转 hook 自绘原理
查看>>
NSIS 脚本介绍
查看>>
记录通讯日志的函数
查看>>
c++ 标准容器介绍与对比
查看>>
web DB优化思路
查看>>
敏捷笔记
查看>>
SOA业务理解与应用
查看>>
Google File System(中文翻译)
查看>>
Google's BigTable 原理 (翻译)
查看>>
MapReduce:超大机群上的简单数据处理
查看>>
设计模式笔记(转载)
查看>>
加站点加入IE的可信站点做法
查看>>
软件研发中的《破窗理论》
查看>>
敏捷的三种误区和五种改进
查看>>
用数字来看某知名B2C网站的发展内幕和隐私
查看>>
vs2010一些设置
查看>>
生活感悟语录
查看>>
用python中htmlParser实现的spider(python spider)
查看>>