zoukankan      html  css  js  c++  java
  • 【iCore4 双核心板_uC/OS-II】例程八:消息邮箱

    一、实验说明:

      消息邮箱是uC/OS-II中的另一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。通常该指针指向一个包含了“消息”的特定数据结构。
     
    二、实验截图:
     
    三、源代码下载链接:
    链接:https://pan.baidu.com/s/1o9JMmxG 密码: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("33[1;32;40m");                          //设置字体终端为绿色
        usart6.printf("
     Hello, I am iCore4!
    
    ");
        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("
    The number of task1 : %s
    ",s);           //打印出邮箱的值    
            }
            OSTimeDlyHMSM(0,0,0,500);                                        //延时500ms        
        }
    }

    iCore4链接:

  • 相关阅读:
    Redis学习
    MySQL索引
    细数 Java 线程池的原理
    红黑树学习
    HashMap学习
    Java集合框架
    Java性能优化的45个细节
    MyBatis理解
    jenkins+git+maven+tomcat+jdk本地部署windows版
    windows版docker安装nginx,并设置目录挂载
  • 原文地址:https://www.cnblogs.com/xiaomagee/p/8486824.html
Copyright © 2011-2022 走看看