历史上的今天

今天是:2024年10月12日(星期六)

正在发生

2020年10月12日 | ucos-ii示例5:消息队列测试

发布者:大伊山人 来源: eefocus关键字:ucos-ii  消息队列测试  stm32f103VE 手机看文章 扫描二维码
随时随地手机看文章

环境:

主机: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);

}

}


关键字:ucos-ii  消息队列测试  stm32f103VE 引用地址:ucos-ii示例5:消息队列测试

上一篇:ucos-ii示例7:内存管理测试
下一篇:ucos-ii示例3:互斥型信号量测试

推荐阅读

观察今年美国电动汽车市场的情况,非常有意思。在电动汽车的市场,也出现了一款爆款Model 3,有以下的特征。 1)市场开始进一步集聚了传统汽车企业之前的产品开始进一步滞销,消费者对于电动汽车的要求开始提高了,如下所示,前八台车型超过了75%,其中Model 3 拉量以后已经超过1/3了。 累计全年的市场份额 如下图所示,差距越拉越大,几台PHEV由于...
第三季度新能源汽车产业大事盘点:一、博郡与一汽夏利合资公司落地9月28日上午,天津一汽夏利汽车股份有限公司对外公布《天津一汽夏利汽车股份有限公司关于出资设立合资公司暨重大资产重组的公告》(以下简称《公告》)。《公告》称,将与南京博郡新能源汽车有限公司(简称“博郡汽车”)在一汽夏利所在地设立合资公司天津博郡汽车有限公司(暂定名,最终名...
#include "MSP430x11x1.h" #define uint unsigned int #define uchar unsigned char //器件地址 uchar PCF8576=0x70; //内存数据定义 uchar ByteCnt; //I2C 数据字节计数器 uchar SlvAdr; //被控器地址 uchar SubAdr; //被控器单元地址 uchar XmtDat[5]; //发送数据缓冲区 //uchar MODE1=0x45; uchar MODE2=0x...
7月24日,瑞丰光电Mini/Micro LED湖北生产基地项目(湖北瑞华光电有限公司,系瑞丰光电旗下全资子公司)正式开工。瑞丰光电消息显示,目前,项目进度按照规定时间紧罗密布的进行,预计2022年上半年一期项目将建成投产。瑞华光电一期项目新增土地约68.022亩,预计总投资约15亿元,建设工期6个月,一期项目建成达产后可实现年营业收入超过13亿元。据悉,湖...

史海拾趣

问答坊 | AI 解惑

现金求购IC

深圳市瑞琦电子科技有限公司专业从事台式计算机主板、笔记本电脑、工控机主板等主芯片IC的配套推广与销售服务。。“价格合理,用户至上”是我们一惯的宗旨。多年来,已为国内多家知名企业进行配套服务,并获得一致好评。主营产品包括各类电脑主板芯 ...…

查看全部问答∨

直接接在普通开关两端的延时开关电路

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 如题。直接接在普通开关两端的延时开关电路,不用改变目前的布线方式直接接与开关两端, 可用原开关两端引出两个线作为一个控制信号,也可以加上声控,光控功能, 下图这个电路当可控硅导通 ...…

查看全部问答∨

关于布线

2层,做到名片大小是没问题的, 但必须调线。 给大家贴个例子, 基本完成的板子 名片大小,功能差不多, 多了lcd控制,cpu换at91sam7s64 咱这个,用两个名片大小都没关系,没必要做这么小。 我这个有商业用途,才做这么小的。而且,将来可能 ...…

查看全部问答∨

请教C调用汇编的问题.

在C调用汇编时,往往在汇编入口处要保存与C兼容的FP,DP等.不知道这些参数是怎么设定的.有人知道相关的DATASHEET在哪儿下载吗?谢先. …

查看全部问答∨

MSP430单片机的双机串口通讯

求有关MSP430单片机的双机串口通讯的资料,最好能有程序,急~谢谢啦…

查看全部问答∨

关于ise

请问老师,怎么在ise中查看vhdl的程序包文件??…

查看全部问答∨

LMP90100LMP91000 传感器模拟前端概览

本帖最后由 dontium 于 2015-1-23 12:47 编辑 Chuck向您介绍美国国家半导体的LMP90100/LMP91000可配置传感器模拟前端产品,以及可加快产品上市的精简集成式软硬件开发平台。 片段中介绍的产品为:LMP90100/LMP91000。 LMP90100 – 多通道24位传 ...…

查看全部问答∨

你对变压器知识了解多少?来吧!有关变压器的好资料在这里!

要学电源知识,要做电源产品,变压器是必须要了解的,那你对变压器知识了解多少?来吧!这里有个变压器的好资料 …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved