在iar环境下,把一个普通的stm32工程上移植入ucosii

我根据上一篇我转载的博客,整理了一下内容。精简了一下

当已经建立好了一个普通的工程时,例如一个led亮灯工程,且能正常运行的情况下。如何加入ucosii?


1 下载好ucosii官方代码

   你的 工程加入文件 ports和source和它的包含的文件

   将os_cpu_c.h文件中的最后的三个函数void OS_CPU_SysTickHandler(void);void OS_CPU_SysTickInit(void);INT32U OS_CPU_SysTickClkFreq(void);注释掉


2 在启动文件中,用OS_CPU_PendSVHandler把所有出现PendSV_Handler的地方替换掉
   至于OS_CPU_SysTickHandler,采用的方法是自己重新写一个(现在不管它),避免对启动文件的修改


3 在include目录下建立一个新的app_cfg.h文件,

  拷贝Micrium\Software\EvalBoards\ST\STM32F103ZE-SK\IAR\OS-Probe-LCD目录下的os_cfg.h到include目录下,将这两个文件添加到工程中。

修改os_cfg.h中的
#define OS_APP_HOOKS_EN           0
#define OS_DEBUG_EN               0
#define OS_EVENT_MULTI_EN         0
#define OS_SCHED_LOCK_EN          0
#define OS_TICK_STEP_EN           0
#define OS_TASK_CHANGE_PRIO_EN    0 
#define OS_TASK_QUERY_EN          0 
#define OS_TASK_STAT_EN           0
#define OS_TASK_STAT_STK_CHK_EN   0
#define OS_TASK_SUSPEND_EN        0 
#define OS_FLAG_EN                0
#define OS_MBOX_EN                0 
#define OS_TIME_DLY_HMSM_EN       0 
#define OS_TIME_DLY_RESUME_EN     0
#define OS_TIME_GET_SET_EN        0
#define OS_TIME_TICK_HOOK_EN      0


编写app_cfg.h
#ifndef _APP_CFG_
#define _APP_CFG_
#define OS_TASK_TMR_PRIO                         3
/* task priority */ 
#define STARTUP_TASK_PRIO                           6 
/* task stack size */ 
#define STARTUP_TASK_STK_SIZE                   80
#define                  Task1_Stk_Size             64
#define                  Task1_Prio                   11
#endif


4 编写系统SysTick中断和任务:
工程里加入stm32f10x_it.c文件
 在stm32f10x_it.c中添加SysTick中断处理函数和#include "ucos_ii.h"
 void SysTick_Handler(void)
{
       OS_CPU_SR cpu_sr;
       OS_ENTER_CRITICAL();
       OSIntNesting++;
       OS_EXIT_CRITICAL();
    OSTimeTick(); 
    OSIntExit();
}


main.c
#include "ucos_ii.h" 
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
static OS_STK       Task1_stk[Task1_Stk_Size];

static void Task1(void *p_arg) 

    for (;;) 
    { 
        GPIO_ResetBits(GPIOF,GPIO_Pin_8);  
        OSTimeDly(500); 
        GPIO_SetBits(GPIOF,GPIO_Pin_8); 
        OSTimeDly(500);   
     } 
}

static void systick_init(void) 

    SysTick_Config(SystemCoreClock/OS_TICKS_PER_SEC); 
}
 
int main(void) 
{        
       RCC_Configuration_t();
       GPIO_Config();
       systick_init(); 

       OSInit(); 
       OSTaskCreate(Task1, (void *)0,&Task1_stk[Task1_Stk_Size-1], Task1_Prio);
       OSStart(); 
       return 0; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值