首页 > 代码库 > STM32移植uC/OS-II记录

STM32移植uC/OS-II记录

#STM32移植uC/OS-II


标签(空格分隔): ARM uC/OS-II


---
##移植前相关知识介绍
###目标板与uC/OS-II的系统框架图
![](http://images.cnitblog.com/blog/665192/201408/301617582511830.jpg)
###搭建文件结构
![](http://images.cnitblog.com/blog/665192/201408/301619070633006.png)
###配置uC/OS-II

 - 修改os_cfg.h
禁用信号量、互质信号量、邮箱、队列、信号量集、定时器、内存管理、关闭调试模式、应用软件的钩子函数与多重事件的控制
```cpp
#define OS_APP_HOOKS_EN          0
#define OS_DEBUG_EN              0    /* Enable(1) debug variables*/
#define OS_FLAG_EN               0    /* Enable (1) or Disable (0) code generation for EVENT FLAGS    */
#define OS_MBOX_EN                0    /* Enable (1) or Disable (0) code generation for MAILBOXES      */
#define OS_MEM_EN                 0    /* Enable (1) or Disable (0) code generation for MEMORY MANAGER */
#define OS_MUTEX_EN               0   /* Enable (1) or Disable (0) code generation for MUTEX          */
#define OS_Q_EN                   0    /* Enable (1) or Disable (0) code generation for QUEUES         */
#define OS_SEM_EN                 0   /* Enable (1) or Disable (0) code generation for SEMAPHORES     */
#define OS_TMR_EN                 0    /* Enable (1) or Disable (0) code generation for TIMERS         */
```
$目的:减少内核体积,便于调试$

 - 修改os_cpu_c.c

 - 修改os_cpu.h
 - 修改os_cpu_a.asm
 - 修改startup_stm32f10x_hd.s





###一个完整的uC/OS-II的应用核心文件

**main.c**
```cpp
 OS_STK startup_task_stk[STARTUP_TASK_STK_SIZE];       //定义栈    
       
 int main(void)    
 {    
     BSP_Init();    
     OSInit();    
     OSTaskCreate(Task_Start,(void *)0,    
        &startup_task_stk[STARTUP_TASK_STK_SIZE-1], STARTUP_TASK_PRIO);    
     OSStart();    
     return 0;    
  }    
  
```
**BSP.c**
 * 函数名:BSP_Init   
 * 描述  :时钟初始化、硬件初始化   

```cpp
void BSP_Init(void)    
{    
    SystemInit();     /* 配置系统时钟为72M */ 
     SysTick_init();    /* 初始化并使能SysTick定时器 */ 
    LED_GPIO_Config();  /* LED 端口初始化 */   
}    

```
**app.c**
定义三个任务

 - 主任务 **Task_Start**
 - 任务2 **Task_Led2**
 - 任务3 **Task_led3**

```
OS_STK task_led2_stk[TASK_LED2_STK_SIZE];         //定义栈    
OS_STK task_led3_stk[TASK_LED3_STK_SIZE];         //定义栈    
 
 //主任务 
void Task_Start(void *p_arg)    
{    
    (void)p_arg;                           // ‘p_arg‘ 并没有用到,防止编译器提示警
 
        
    OSTaskCreate(Task_LED2,(void *)0,           //创建任务2    
                 &task_led2_stk[TASK_LED2_STK_SIZE-1], TASK_LED2_PRIO);    
        
    OSTaskCreate(Task_LED3,(void *)0,           //创建任务3    
                 &task_led3_stk[TASK_LED3_STK_SIZE-1], TASK_LED3_PRIO);    
        
    while (1)    
    {    
    LED1( ON );    
         OSTimeDlyHMSM(0, 0,0,100);    
         LED1( OFF);       
         OSTimeDlyHMSM(0, 0,0,100);         
     }    
 }    
       //任务2 
 void Task_LED2(void *p_arg)    
 {    
     (void)p_arg;                        
             
     while (1)    
     {    
         LED2( ON );    
         OSTimeDlyHMSM(0, 0,0,200);    
         LED2( OFF);    
         OSTimeDlyHMSM(0, 0,0,200);      
     }    
 }    
    
 //任务3 
 void Task_LED3(void *p_arg)    
 {    
     (void)p_arg;          
         
     while (1)    
     {    
         LED3( ON );    
         OSTimeDlyHMSM(0, 0,0,300);    
         LED3( OFF);    
         OSTimeDlyHMSM(0, 0,0,300);            
     }    
}

```
###整体运行流程
![](http://images.cnitblog.com/blog/665192/201408/301618096415648.jpg)


待续...



来自为知笔记(Wiz)


STM32移植uC/OS-II记录