zoukankan      html  css  js  c++  java
  • 【iCore4 双核心板_uC/OS-II】例程十:信号量集

    一、实验说明:

      在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式。UCOSII为了实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集。

    二、实验截图:

    三、源代码下载链接:

    链接:https://pan.baidu.com/s/13USFy25QX-e3WjFGmGClfA 密码:jgmj

    四、核心代码:

    /*
     * Name                : main
     * Description         : ---
     * Author              : liu.
     *
     * History
     * --------------------
     * Rev                 : 0.00
     * Date                : 07/12/2017
     * 
     * create.
     * --------------------
     */
    /*实验现象:
      打开串口工具putty.exe,按下按键ARM.KEY,终端显示信号量集的状态;松开按键,停止显示。
      信号量的16位分别循环置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)
    {
        u8 err;
        OS_CPU_SR cpu_sr;
    
        TaskFlag = OSFlagCreate(0,&err);//创建信号量集
    
        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;
        while(1){
            if(ARM_KEY_STATE == KEY_DOWN){                   //按键按下
                i++;
                if(i < OS_FLAGS_NBITS){
                    OSFlagPost(TaskFlag,i,OS_FLAG_SET,&err);     //设置第0位的信号为1     
                }else{
                    i=0;
                }                
            }
            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;
        u16 flag;
    
        while(1){
            flag = OSFlagQuery(TaskFlag,&err);                     //查询信号量集的状态
            if(flag != 0){
                usart6.printf("The %d bit is set to high.
    ",flag);             
                OSFlagPost(TaskFlag,(OS_FLAGS)flag,OS_FLAG_CLR,&err);//信号置0
            }
            OSTimeDlyHMSM(0,0,0,500);                              //延时500ms        
        }
    }

    iCore4链接:

  • 相关阅读:
    html_py
    PHP-FPM详解
    nginx 虚拟主机配置
    正确配置Nginx+PHP
    centos7安装Nginx
    如何让浏览器关闭后session失效
    微擎中消息响应回复 代码流程
    在vue组件库中不能使用v-for
    微信分享前面
    php接受axios数据
  • 原文地址:https://www.cnblogs.com/xiaomagee/p/8520377.html
Copyright © 2011-2022 走看看