博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【iCore4 双核心板_uC/OS-II】例程八:消息邮箱
阅读量:6464 次
发布时间:2019-06-23

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

一、实验说明:

  消息邮箱是uC/OS-II中的另一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。通常该指针指向一个包含了“消息”的特定数据结构。
 
二、实验截图:
 
三、源代码下载链接:
链接: 密码:psk3
 
四、核心代码:
/* * Name                : main * Description         : --- * Author              : liu. * * History * -------------------- * Rev                 : 0.00 * Date                : 07/12/2017 *  * create. * -------------------- *//*实验现象:  打开串口工具putty.exe,按下ARM.KEY按键,终端显示此时任务1的运行次数;松开按键,停止显示。  */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;    TaskMbox = OSMboxCreate(0);//创建邮箱    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){    int timer = 0;    char cnt[20];    while(1){        if(ARM_KEY_STATE == KEY_DOWN){            timer++;            sprintf(cnt,"%d",timer);        //数据转换            OSMboxPost(TaskMbox, &cnt);     //发送邮箱        }        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;    u8 *s;    while(1){        s = (INT8U *)OSMboxPend(TaskMbox,OS_TICKS_PER_SEC,&err);        if(err == OS_ERR_NONE){            usart6.printf("\r\nThe number of task1 : %s\r\n",s);           //打印出邮箱的值            }        OSTimeDlyHMSM(0,0,0,500);                                        //延时500ms            }}

iCore4链接:

转载地址:http://ughzo.baihongyu.com/

你可能感兴趣的文章
幸福框架:可扩展的、动态的、万能的 编号生成器
查看>>
黄聪:PHP 防护XSS,SQL,代码执行,文件包含等多种高危漏洞
查看>>
svn status 显示 ~xx
查看>>
常用HiveQL总结
查看>>
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
查看>>
POJ 3311 Hie with the Pie(状压DP + Floyd)
查看>>
HDU 1402 A * B Problem Plus FFT
查看>>
[CareerCup] 17.3 Factorial Trailing Zeros 求阶乘末尾零的个数
查看>>
Security updates and resources
查看>>
深入理解JavaScript系列(25):设计模式之单例模式
查看>>
DNS为什么通常都会设置为14.114.114.114
查看>>
给定一个序列,判断该序列是否为二叉树查找树的后序遍历序列
查看>>
Sqoop架构(四)
查看>>
golang copy函数
查看>>
《你有多少问题要请示》精华集粹
查看>>
深度 | 机器学习敲门砖:任何人都能看懂的TensorFlow介绍【转】
查看>>
leveldb学习:DBimpl
查看>>
MySQL存储引擎--MYSIAM和INNODB引擎区别
查看>>
[Recompose] Stream Props to React Children with RxJS
查看>>
打印图片
查看>>