历史上的今天
返回首页

历史上的今天

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

正在发生

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

2020-10-12 来源:eefocus

环境:

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

}

}


推荐阅读

史海拾趣

Base Two (2) Systems公司的发展小趣事

Base Two (2) Systems公司自创立之初,便以技术创新为核心竞争力。在创始团队的带领下,公司研发团队不断攻克技术难关,成功研发出一系列具有领先水平的电子产品。这些产品不仅性能卓越,而且具有广泛的应用前景,为公司在市场上赢得了良好的口碑。

Amprobe公司的发展小趣事

Base Two (2) Systems公司自创立之初,便以技术创新为核心竞争力。在创始团队的带领下,公司研发团队不断攻克技术难关,成功研发出一系列具有领先水平的电子产品。这些产品不仅性能卓越,而且具有广泛的应用前景,为公司在市场上赢得了良好的口碑。

天钰(FITIPOWER)公司的发展小趣事

Base Two (2) Systems深知技术创新的重要性,因此不断加大对研发的投入。公司引进了一批高端研发人才和先进设备,为研发团队提供了强有力的支持。在研发团队的努力下,公司不断推出新产品,并对现有产品进行升级改进,以满足市场的不断变化和客户的多样化需求。

Diconex公司的发展小趣事

品质是电子行业的生命线。Diconex公司深知品质的重要性,因此从原材料采购到生产制造的每一个环节都严格把控品质。公司建立了完善的质量管理体系,对每一道生产工序都进行严格的检测和评估。这种对品质的执着追求使得Diconex的产品在市场上具有很高的口碑和竞争力。

光磊(GL)公司的发展小趣事

品质是电子行业的生命线。Diconex公司深知品质的重要性,因此从原材料采购到生产制造的每一个环节都严格把控品质。公司建立了完善的质量管理体系,对每一道生产工序都进行严格的检测和评估。这种对品质的执着追求使得Diconex的产品在市场上具有很高的口碑和竞争力。

DUCATI公司的发展小趣事

品质是电子行业的生命线。Diconex公司深知品质的重要性,因此从原材料采购到生产制造的每一个环节都严格把控品质。公司建立了完善的质量管理体系,对每一道生产工序都进行严格的检测和评估。这种对品质的执着追求使得Diconex的产品在市场上具有很高的口碑和竞争力。

问答坊 | AI 解惑

我过去收藏的一些运放资料

这几天为了寻找一些资料,把过去刻录的光盘找了出来。其中有些资料是关于运放的,想到也许能对大家有些参考价值,拿出来共享吧。也算是我响应号召吧。 这些是比较器资料。…

查看全部问答>

mobile 6,一个最前端显示的程序隐藏了OK和×按钮,但是 × 按钮经常还是会出现,恳请大家帮忙看看

mobile 6,一个最前端显示的程序隐藏了OK和×按钮,但是 × 按钮经常还是会出现,点击开始中其他程序之后有消失了,怀疑是被我关闭的“信息”收件箱留下,点击之后我的程序就再也启动不起来了。 点击自己添加的返回按钮之后,屏幕最上面还显示我的 ...…

查看全部问答>

帮忙找个语法错误

  下面有标注的地方有错误,提示信息是“syntax error near \'else\'”,出错的地方在下文中标出,请大家帮忙找一下,谢谢了 #include unsigned char keyboard[]={0x7E,0xBE,0xDE,0xEE,  //0,1,2,3      &nb ...…

查看全部问答>

!!销售/收购/维修agilent 8714et hp8714et,agilent 8714et509239856

!!销售/收购/维修agilent 8714et hp8714et,agilent 8714et09239856 银通仪器有限公司 手机:13509239856 TEL:0769-87912629 FAX:0769-87912842 QQ:350534337 E-MAIL:yonglin__2007@126.com(下划线两横) 地址:广东省东莞市塘厦镇东方花 ...…

查看全部问答>

请教:摄像头为什么在光线比较暗时帧率会下降?

手边的摄像头都是这个德性,光线稍微暗一点帧率就降到12左右了,还拖影,比较烦 请问为什么为出现这样的情况呢 会不会是在摄像头的芯片上在做白平衡,运算量比较大,才导致了帧率下降? 我在一些应用中不想让图像被处理过,只是想获得比较高的帧率,并且 ...…

查看全部问答>

利用1121仿波特率为9600串口遇到的怪现象

我根据TI代码改写的程序:下面是TI的例子 ;****************************************************************************** ; MSP430x11x1 Demo - Timer_A, Ultra-Low Pwr UART 9600 Echo, 32kHz ACLK ; ; Description: Use Timer_A CC ...…

查看全部问答>

用pwm控制电热丝功率,用可控硅好还是固态继电器好

大家好,求问 我用pwm波控制电热丝的功率,pwm波的周期大概为33ms,那么是用可控硅好还是用固态继电器好啊,开关频率太频繁是不是会影响固态继电器的使用寿命啊 谢谢帮忙啊~…

查看全部问答>

求AD转换芯片推荐

现在想用一个AD芯片作为外设,与DSP2812相连。要求:四路模拟信号输入,12位并行数字信号输出至DSP。求推荐一个满足这个要求的AD芯片。感激不尽! [ 本帖最后由 zjufiber 于 2012-3-15 14:17 编辑 ]…

查看全部问答>

TPS54531输出干扰问题

电路图: 输入电压:7.4V,输出6V ,1A 。用示波器测得输出端波形如下: 这么大的干扰,做出来的电源根本没办法用。大家帮我看看应该怎样解决。 …

查看全部问答>

Cadence设计中的问题

我在用Cadence做电路板时,在原理图中二极管器件是2个引脚的,但是给它添加了一个3脚的封装,然后我就不可以将这个封装拉倒Allegro PCB中,怎样设置才可以将这个三角封装拉倒Allegro PCB中呢?希望大家赐教。…

查看全部问答>