• Keil uCos 2.52 stm32 【worldsing笔记】


    1、uCOSii V2.52
       a、加了7个可以配置的钩子函数宏
        #define OS_TASK_CREATE_HOOK_EN    0    /* 任务创建时调用钩子函数      使能 1 / 禁止 0                    */
        #define OS_TASK_STAT_HOOK_EN      0    /* 统计任务运行时调用钩子函数  使能 1 / 禁止 0                    */
        #define OS_TASK_SW_HOOK_EN        1    /* 任务调度时调用钩子函数      使能 1 / 禁止 0                    */
        #define OS_TIME_TICK_HOOK_EN      1    /* 滴答中断时调用钩子函数      使能 1 / 禁止 0                    */
        #define OS_TCB_INIT_HOOK_EN       0    /* TCB初始化时调用钩子函数     使能 1 / 禁止 0                    */
        #define OS_TASK_IDLE_HOOK_EN      0    /* 统计任务运行时调用钩子函数  使能 1 / 禁止 0                    */
        #define OS_INIT_BEGIN_HOOK_EN     0    /* OS初始化开始时调用钩子函数  使能 1 / 禁止 0                    */
        #define OS_INIT_END_HOOK_EN       0    /* OS初始化结束时调用钩子函数  使能 1 / 禁止 0                    */
        b、加了创建任务是自动分配栈接口OSSetupTask和宏,也可以用原生的OSTaskCreate(),OSSetupTask(任务名, 优先级);
        #define  OS_TASK_AUTO_STK_SIZE   128  /* 默认用户任务栈大小 单位类型:OS_STK                             */
        #define  OS_MAX_TASK_AUTO_STK      2  /* 使用默认栈的任务数,0 不使用,必须小于等于 OS_MAX_TASKS          */
                                              /* 使用默认分配栈,每个栈大小都是OS_TASK_STK_SIZE                  */
        OS_MAX_TASK_AUTO_STK 定义为0要自行定按照uCos标准接口写应用代码;
        c、应用程序无需定义main(),无需对SysTick初始化(在OS_CPU_C.c中完成),定义MainTask即可
        void  MainTask (void *pArg)
        {
            //这里放入板子硬件初始化代码
            //创建其他任务
            OSSetupTask(Task0, 2);
            while(1)
            {
                OSTimeDly(100);
                pArg = pArg;
            }
        }
        d、系统默认开启任务调度时调用钩子函数和滴答中断时调用钩子函数
        当LED在任务正常调度时以10:90 个Tick闪烁
        当LED在任务非正常调度时以1:1 个Tick闪烁
        #define LED_GPIO        GPIOE                               /*LED IO口                                 */
        #define LED_GPIO_PIN    GPIO_Pin_12                         /*LED IO口引脚号                            */
        #define LED_GPIO_CLK    RCC_APB2Periph_GPIOE                               /*LED IO时钟名                   */
        #define LED_ON()        LED_GPIO->ODR &= ~LED_GPIO_PIN      /*LED开 低电平                              */
        #define LED_OFF()       LED_GPIO->ODR |=  LED_GPIO_PIN      /*LED开 高电平                              */
        #define LED_REV()       RevBit(LED_GPIO->ODR, 12)           /*LED 状态反转                              */
    2、stm32 Lib V3.5
        a.startup_stm32f10x_md.s 把默认的软件中断和定时器中断名改为: OS_CPU_PendSVHandler  和  OS_CPU_SysTickHandler
        b、stm32f10x.h库检测关闭,定义为:#define assert_param(a)

    3、在工程设置选项卡C/C++ 定义cpu类型 STM32F10X_MD

    4、测试环境Keil MDK 4.7a  stm32f103vb

    应用Demo:

    #include "includes.h"
    void Task0 (void *pArg);

    /*   主任务
    */
    void  MainTask (void *pArg)
    {
         OSSetupTask(Task0, 2);
        while(1)
        {
             OSTimeDly(100);
            pArg = pArg;
        }
    }

    /*   其他任务
    */
    void Task0 (void *pArg)
    {
        int cnt;
      cnt = 0;
        while(1)
        {
            OSTimeDly(10);
            pArg = pArg;
            cnt++;
            if(cnt == 100)
                while(1);
        }
    }

    源码下载:点击下载

  • 相关阅读:
    架构的上层是系统,是系统要素的组织形式
    计数与方法论、哲学
    网络编程--会话层、表示层、应用层
    面向中间件编程--草稿
    泛型:基于类型组合的算法和结构构建---数据结构与算法
    面向对象:消息机制更适合描述;
    类型的连接:实连接、虚连接
    数据库 = filesystem + transcation + dsl + dslengine
    一文看透浏览器架构
    代码的结合性:继承 扩展 组合 变换--swift暗含的四根主线
  • 原文地址:https://www.cnblogs.com/worldsing/p/3401100.html
Copyright © 2020-2023  润新知