一、实验说明:

  前面介绍通过信息传递可以进行任务间的交流,信息也可以直接发送给一个任务,在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】例程九:消息队列相关推荐

  1. 【iCore4 双核心板_uC/OS-II】例程一:认识 uC/OS-II

    一.实验说明: 本例程移值入uC/OS-II,建立三个任务,红色和绿色LED分别以固定频率闪烁,并且打开串口工具, 输出浮点数据. 二.源代码下载链接: 链接:https://pan.baidu.co ...

  2. 【iCore4 双核心板_FPGA】例程八:乘法器实验——乘法器使用

    实验现象: 程序运行时,绿色led闪烁(目前,具体的乘法器调用请参考iCore3乘法器例程) 核心代码: module multiplier_ctrl(input clk_25m,input rst_ ...

  3. 【iCore4 双核心板_ARM】例程十七:USB_MSC实验——读/写U盘(大容量存储器)

    实验方法: 1.将跳线冒跳至USB_UART,通过Micro USB 线将iCore4 USB-UART接口与电脑相连. 2.打开PUTTY软件. 3.通过读U盘转接线将U盘(或者读卡器)与iCore ...

  4. 【iCore4 双核心板_ARM】例程五:SYSTICK定时器 实验——定时点亮LED

    实验原理: 通过STM32的三个GPIO口驱动三色LED的三个通道,设定GPIO为推挽输出模式,采 用灌电流方式与LED连接,输出高电平LED灭,输出低电平LED亮,通过系统定时器实现 1s定时,每秒 ...

  5. 【iCore4 双核心板_FPGA】例程七:状态机实验——状态机使用

    实验现象: 按键每按下一次,三色LED改变一次状态. 核心代码: //--------------------module_rst_n---------------------------// mod ...

  6. 【iCore4 双核心板_ARM】例程三十八:DSP MATH库测试

    实验现象: 核心代码: int main(void) {/* USER CODE BEGIN 1 */int i,j;int res;float time[2];static int error_fl ...

  7. 【iCore4 双核心板_ARM】例程二十:LWIP_TCP_CLIENT实验——以太网数据传输

    实验现象: 核心代码: int main(void) { system_clock.initialize(); //ϵͳʱÖÓ³õʼ»¯led.initialize(); //LED³õʼ» ...

  8. 【iCore4 双核心板_FPGA】例程十六:基于双口RAM的ARM+FPGA数据存取实验

    实验现象: 核心代码: int main(void) {/* USER CODE BEGIN 1 */int i;int address,data;char error_flag = 0;char r ...

  9. 【iCore4 双核心板_FPGA】例程十一:FSMC总线通信实验——独立地址模式

    实验原理: STM32F767上自带FMC控制器,本实验将通过FMC总线的地址独立模式实现STM32与FPGA 之间通信,FPGA内部建立RAM块,FPGA桥接STM32和RAM块,本实验通过FSMC ...

最新文章

  1. emwin之基于某个事件或标志创建某个界面的一种方法
  2. python用一行代码编写一个回声程序_一行python代码实现树结构
  3. 谁还期待iPhone 13?
  4. lame,把ios录音转换为mp3格式
  5. font-size:100%理解
  6. Java 中 10 大坑爹功能!
  7. 卷积核旋转180度理解
  8. Qt笔记-Q_UNUSED解决编译器unused paramenter告警
  9. Android 常见adb命令
  10. GStreamer 编写一个简单的MP3播放器
  11. Linux - Ubuntu下JDK配置
  12. Ubuntu安装完后设置root密码-转
  13. lsdyna如何设置set中的node_list_详解MySQL数据库如何实现类似Oracle的序列?
  14. iphoneX 订单生成器 - 装 b 神器 - 生成虚拟 iphoneX 订单,满足你装 b 的愿望
  15. react多个网络请求_react中网络请求的优化!
  16. 搞科研身体才是革命的本钱。
  17. SOFA 应用架构详解
  18. 【游记】CQOI2021
  19. SDR软件移步BG1ICA.vicp.net:8888
  20. Excel导入poi、导出poi

热门文章

  1. 微信的成功,坚信美好偏执狂的回馈(有追求的人必修课)
  2. 弘辽科技:好评对淘宝新店的重大影响!如何提升店铺好评?
  3. 如何保护 RFID 内部信息
  4. 无锡设计类——CAD设计在机械制图中的优势
  5. 施耐德PLC如何进行远程维护?
  6. 【建议收藏】超详细ArcGIS中制作剖面图讲解(附练习数据)
  7. 解决ADT大量出现Unexpected value from nativeGetEnabledTags: 0的问题
  8. 互联网运营面试题_互联网运营、产品岗一定要看的面试题
  9. C语言:用冒泡排序对数组进行升序排序
  10. 英语的OF FOR TO....的介词怎么用