【iCore4 双核心板_uC/OS-II】例程九:消息队列
一、实验说明:
前面介绍通过信息传递可以进行任务间的交流,信息也可以直接发送给一个任务,在uC/OS-II中每一个任务在它们内部都有一个消息队列,也即任务消息队列,用户可以直接给一个任务发送消息,不需要额外的消息队列,这样不公优化了代码,而且比用一个单独的外部消息队列更有效率。任务消息队列建立在每一个任务的内部,如下图。
二、实验截图:
三、源代码下载链接:
链接:https://pan.baidu.com/s/1ggDoXYr 密码:lm3y
四、核心代码:
/** Name : main* Description : ---* Author : liu.** History* --------------------* Rev : 0.00* Date : 07/12/2017* * create.* --------------------*/ /*实验现象:打开串口工具putty.exe,终端显示当前消息队列大小,按下ARM.KEY按键,显示消息队列大小和消息。*/ int main(void) {system_clock.initialize(); //系统时钟初始化led.initialize(); //LED初始化usart6.initialize(115200); //串口初始化 key.initialize();usart6.printf("\x0c"); //清屏 usart6.printf("\033[1;32;40m"); //设置字体终端为绿色usart6.printf("\r\n Hello, I am iCore4!\r\n\r\n");LED_RED_ON;OSInit(); //UCOS初始化OSTaskCreate(start_task, //创建开始任务(void*)0, //任务参数(OS_STK*)&START_TASK_STK[START_STK_SIZE-1], //任务堆栈START_TASK_PRIO); //任务优先级OSStart(); //开启UCOS }
/** Name : start_task* Description : ---* Author : liu.** History* --------------------* Rev : 0.00* Date : 07/12/2017* * create.* --------------------*/ void start_task(void *pdata) {OS_CPU_SR cpu_sr;TaskQ = OSQCreate(&msg[0], 10);//创建消息队列 OSStatInit();//初始化统计任务 OS_ENTER_CRITICAL();//关中断 OSTaskCreate(AppTask1_task,(void*)0,(OS_STK*)&AppTask1_TASK_STK[AppTask1_STK_SIZE-1],AppTask1_TASK_PRIO);//创建AppTask1任务OSTaskCreate(AppTask2_task,(void*)0,(OS_STK*)&AppTask2_TASK_STK[AppTask2_STK_SIZE-1],AppTask2_TASK_PRIO);//创建AppTask2任务OSTaskSuspend(OS_PRIO_SELF);//挂起start_task任务 OS_EXIT_CRITICAL();//开中断 }
/** Name : AppTask1_task* Description : ---* Author : liu.** History* --------------------* Rev : 0.00* Date : 07/12/2017* * create.* --------------------*/ void AppTask1_task(void *pdata) {u8 err;int i = 0;INT8U buf[2];while(1){i++;buf[0] = i;buf[1] = i + 1;if(ARM_KEY_STATE == KEY_DOWN){ //按键按下err = OSQPost(TaskQ, (void *)&buf[0]);//发送消息队列switch(err){ case OS_ERR_NONE: break; case OS_ERR_Q_FULL: break; }}OSTimeDlyHMSM(0,0,0,500); //延时500ms } } /** Name : AppTask2_task* Description : ---* Author : liu.** History* --------------------* Rev : 0.00* Date : 07/12/2017* * create.* --------------------*/ void AppTask2_task(void *pdata) {u8 err;INT8U *s;while(1){usart6.printf("The queue size : %d\r\n",((OS_Q*)(TaskQ->OSEventPtr))->OSQEntries);//消息队列当前的大小s = OSQPend(TaskQ, 100, &err); //请求消息队列if(err == OS_ERR_NONE){ usart6.printf("maseege[0] = %d\r\n",s[0]);usart6.printf("maseege[1] = %d\r\n",s[1]);} OSTimeDlyHMSM(0,0,0,500); //延时500ms } }
iCore4链接:
【iCore4 双核心板_uC/OS-II】例程九:消息队列相关推荐
- 【iCore4 双核心板_uC/OS-II】例程一:认识 uC/OS-II
一.实验说明: 本例程移值入uC/OS-II,建立三个任务,红色和绿色LED分别以固定频率闪烁,并且打开串口工具, 输出浮点数据. 二.源代码下载链接: 链接:https://pan.baidu.co ...
- 【iCore4 双核心板_FPGA】例程八:乘法器实验——乘法器使用
实验现象: 程序运行时,绿色led闪烁(目前,具体的乘法器调用请参考iCore3乘法器例程) 核心代码: module multiplier_ctrl(input clk_25m,input rst_ ...
- 【iCore4 双核心板_ARM】例程十七:USB_MSC实验——读/写U盘(大容量存储器)
实验方法: 1.将跳线冒跳至USB_UART,通过Micro USB 线将iCore4 USB-UART接口与电脑相连. 2.打开PUTTY软件. 3.通过读U盘转接线将U盘(或者读卡器)与iCore ...
- 【iCore4 双核心板_ARM】例程五:SYSTICK定时器 实验——定时点亮LED
实验原理: 通过STM32的三个GPIO口驱动三色LED的三个通道,设定GPIO为推挽输出模式,采 用灌电流方式与LED连接,输出高电平LED灭,输出低电平LED亮,通过系统定时器实现 1s定时,每秒 ...
- 【iCore4 双核心板_FPGA】例程七:状态机实验——状态机使用
实验现象: 按键每按下一次,三色LED改变一次状态. 核心代码: //--------------------module_rst_n---------------------------// mod ...
- 【iCore4 双核心板_ARM】例程三十八:DSP MATH库测试
实验现象: 核心代码: int main(void) {/* USER CODE BEGIN 1 */int i,j;int res;float time[2];static int error_fl ...
- 【iCore4 双核心板_ARM】例程二十:LWIP_TCP_CLIENT实验——以太网数据传输
实验现象: 核心代码: int main(void) { system_clock.initialize(); //ϵͳʱÖÓ³õʼ»¯led.initialize(); //LED³õʼ» ...
- 【iCore4 双核心板_FPGA】例程十六:基于双口RAM的ARM+FPGA数据存取实验
实验现象: 核心代码: int main(void) {/* USER CODE BEGIN 1 */int i;int address,data;char error_flag = 0;char r ...
- 【iCore4 双核心板_FPGA】例程十一:FSMC总线通信实验——独立地址模式
实验原理: STM32F767上自带FMC控制器,本实验将通过FMC总线的地址独立模式实现STM32与FPGA 之间通信,FPGA内部建立RAM块,FPGA桥接STM32和RAM块,本实验通过FSMC ...
最新文章
- emwin之基于某个事件或标志创建某个界面的一种方法
- python用一行代码编写一个回声程序_一行python代码实现树结构
- 谁还期待iPhone 13?
- lame,把ios录音转换为mp3格式
- font-size:100%理解
- Java 中 10 大坑爹功能!
- 卷积核旋转180度理解
- Qt笔记-Q_UNUSED解决编译器unused paramenter告警
- Android 常见adb命令
- GStreamer 编写一个简单的MP3播放器
- Linux - Ubuntu下JDK配置
- Ubuntu安装完后设置root密码-转
- lsdyna如何设置set中的node_list_详解MySQL数据库如何实现类似Oracle的序列?
- iphoneX 订单生成器 - 装 b 神器 - 生成虚拟 iphoneX 订单,满足你装 b 的愿望
- react多个网络请求_react中网络请求的优化!
- 搞科研身体才是革命的本钱。
- SOFA 应用架构详解
- 【游记】CQOI2021
- SDR软件移步BG1ICA.vicp.net:8888
- Excel导入poi、导出poi
热门文章
- 微信的成功,坚信美好偏执狂的回馈(有追求的人必修课)
- 弘辽科技:好评对淘宝新店的重大影响!如何提升店铺好评?
- 如何保护 RFID 内部信息
- 无锡设计类——CAD设计在机械制图中的优势
- 施耐德PLC如何进行远程维护?
- 【建议收藏】超详细ArcGIS中制作剖面图讲解(附练习数据)
- 解决ADT大量出现Unexpected value from nativeGetEnabledTags: 0的问题
- 互联网运营面试题_互联网运营、产品岗一定要看的面试题
- C语言:用冒泡排序对数组进行升序排序
- 英语的OF FOR TO....的介词怎么用