找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2597|回复: 0
收起左侧

stm32f103ze,UCOSIII+菜单+时钟任务 源程序

[复制链接]
ID:581602 发表于 2019-12-15 15:44 | 显示全部楼层 |阅读模式
相互学习一下。

单片机源程序如下:
  1. #include "includes.h"


  2. /*********************定义任务控制块************************************************/

  3. static  OS_TCB        MENU_TCB;                                                           //定义MENU任务控制块
  4. static  OS_TCB        RTC_TCB;                                                           //定义RTC任务控制块
  5. static  OS_TCB        CLOCK_TCB;                                                           //定义CLOCK任务控制块



  6. /********************* 定义任务栈****************************************************/
  7. static        CPU_STK        MENU_Stk[TASK_MENU_STK_SIZE];                   //定义任务堆栈
  8. static        CPU_STK        RTC_Stk[TASK_RTC_STK_SIZE];                   //定义任务堆栈
  9. static        CPU_STK        CLOCK_Stk[TASK_RTC_STK_SIZE];                   //定义任务堆栈



  10. /********************* 任务函数****************************************************/

  11. void  AppTaskStart (void *p_arg)
  12. {
  13.     CPU_INT32U  cpu_clk_freq;                                                                                                                                                //CPU内核时钟
  14.     CPU_INT32U  cnts;                                                                                                                                                                                // 根据用户设定的时钟节拍频率计算 SysTick 定时器的计数值
  15.     OS_ERR      err;


  16.     (void)p_arg;

  17.     BSP_Init();                                                 //板级初始化
  18.     CPU_Init();                                                 //初始化 CPU 组件(时间戳、关中断时间测量和主机名)

  19.     cpu_clk_freq = BSP_CPU_ClkFreq();                           //获取 CPU 内核时钟频率(SysTick 工作时钟)
  20.     cnts = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz;        //根据用户设定的时钟节拍频率计算 SysTick 定时器的计数值
  21.     OS_CPU_SysTickInit(cnts);                                   //调用 SysTick 初始化函数,设置定时器计数值和启动定时器

  22. //    Mem_Init(); 有内存管理代替                                 //初始化内存管理组件(堆内存池和内存池表)

  23. #if OS_CFG_STAT_TASK_EN > 0u                                    //如果使能(默认使能)了统计任务
  24.     OSStatTaskCPUUsageInit(&err);                               //计算没有应用任务(只有空闲任务)运行时 CPU 的(最大)
  25. #endif                                                          //容量(决定 OS_Stat_IdleCtrMax 的值,为后面计算 CPU
  26.                                                                 //使用率使用)。
  27.     CPU_IntDisMeasMaxCurReset();                                //复位(清零)当前最大关中断时间

  28.    

  29. /*---------------------------------------------------------------------------------------------------------------------------------------*/
  30.                 /* 创建 munu 任务 */
  31.           OSTaskCreate((OS_TCB     *)&MENU_TCB,                                        //任务控制块指针         
  32.                  (CPU_CHAR   *)"MENU",                                                //任务名称
  33.                  (OS_TASK_PTR )Task_MENU,                                        //任务代码指针
  34.                  (void       *)0,                                                        //传递给任务的参数parg
  35.                  (OS_PRIO     )TASK_MENU_PRIO,                                //任务优先级
  36.                  (CPU_STK    *)&MENU_Stk[0],                                //任务堆栈基地址
  37.                  (CPU_STK_SIZE)TASK_MENU_STK_SIZE/10,                //堆栈剩余警戒线
  38.                  (CPU_STK_SIZE)TASK_MENU_STK_SIZE,                        //堆栈大小
  39.                  (OS_MSG_QTY  )0,                                                        //可接收的最大消息队列数
  40.                  (OS_TICK     )0,                                                        //时间片轮转时间
  41.                  (void       *)0,                                                        //任务控制块扩展信息
  42.                  (OS_OPT      )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),         //任务选项
  43.                  (OS_ERR     *)&err);                                                //返回值     
  44.         /* 创建 RTC 任务 */
  45.           OSTaskCreate((OS_TCB     *)&RTC_TCB,                                        //任务控制块指针         
  46.                  (CPU_CHAR   *)"RTC",                                                //任务名称
  47.                  (OS_TASK_PTR )Task_RTC,                                        //任务代码指针
  48.                  (void       *)0,                                                        //传递给任务的参数parg
  49.                  (OS_PRIO     )TASK_RTC_PRIO,                                //任务优先级
  50.                  (CPU_STK    *)&RTC_Stk[0],                                //任务堆栈基地址
  51.                  (CPU_STK_SIZE)TASK_RTC_STK_SIZE/10,                //堆栈剩余警戒线
  52.                  (CPU_STK_SIZE)TASK_RTC_STK_SIZE,                        //堆栈大小
  53.                  (OS_MSG_QTY  )0,                                                        //可接收的最大消息队列数
  54.                  (OS_TICK     )0,                                                        //时间片轮转时间
  55.                  (void       *)0,                                                        //任务控制块扩展信息
  56.                  (OS_OPT      )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),         //任务选项
  57.                  (OS_ERR     *)&err);                                                //返回值                                                                           
  58.    /* 创建 CLOCK 任务 */
  59.           OSTaskCreate((OS_TCB     *)&CLOCK_TCB,                                        //任务控制块指针         
  60.                  (CPU_CHAR   *)"CLOCK",                                                //任务名称
  61.                  (OS_TASK_PTR )Task_CLOCK,                                        //任务代码指针
  62.                  (void       *)0,                                                        //传递给任务的参数parg
  63.                  (OS_PRIO     )TASK_CLOCK_PRIO,                                //任务优先级
  64.                  (CPU_STK    *)&CLOCK_Stk[0],                                //任务堆栈基地址
  65.                  (CPU_STK_SIZE)TASK_CLOCK_STK_SIZE/10,                //堆栈剩余警戒线
  66.                  (CPU_STK_SIZE)TASK_CLOCK_STK_SIZE,                        //堆栈大小
  67.                  (OS_MSG_QTY  )0,                                                        //可接收的最大消息队列数
  68.                  (OS_TICK     )0,                                                        //时间片轮转时间
  69.                  (void       *)0,                                                        //任务控制块扩展信息
  70.                  (OS_OPT      )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),         //任务选项
  71.                  (OS_ERR     *)&err);                                                //返回值                                                                           
  72. //   OSTaskSuspend (&CLOCK_TCB, & err );                    //挂起CLOCK



  73. /*------------------------------------------------------------------------------------------------------------------------------------------*/  
  74.                 OSTaskDel ( 0, & err );                     //删除起始任务本身,该任务不再运行
  75.                
  76.                
  77.                
  78. }


  79. void Task_RTC(void *p_arg)
  80. {
  81.         OS_ERR err;
  82.         u8 t;

  83.        
  84.        
  85.         while(1)
  86.         {       
  87.                 t=calendar.sec;
  88.                 RTC_Get();               
  89.         if(t!=calendar.sec)
  90.                 {
  91.                         t=calendar.sec;
  92.                         LCD_ShowString(20,2,80,16,16,"  :  :  ");
  93.                        
  94.                        
  95.                         LCD_ShowxNum(20,2,calendar.hour,2,16,0);//显示数字,高位为0,还是显示,mode:0,不填充;1,填充0.
  96.                         LCD_ShowxNum(44,2,calendar.min,2,16,0);
  97.                         LCD_ShowxNum(68,2,calendar.sec,2,16,0);
  98.                 }       
  99.                        
  100.         OSTimeDlyHMSM(0, 0,0,1,OS_OPT_TIME_HMSM_STRICT,&err);
  101.         }
  102. }
复制代码

所有资料51hei提供下载:
2.3 OSok - 菜单 -时钟.7z (720.42 KB, 下载次数: 89)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表