嵌入式|uCos-III移植到STM32F10x

最近在百度上看了uCOS-III 的介绍后,诸多功能有很大的提升和改进,感觉有必要升级一下开发环境。百度介绍:http://baike.baidu.com/view/8531313.htm
环境:

  1. STM32F10x 3.5固件库。
  2. MDK4.23 编译器
  3. uCos-III v3.03
【嵌入式|uCos-III移植到STM32F10x】1. uCos-III 源文件KRN-K3XX-000000.zip
官网http://micrium.com/page/downloads/source_code
我的网盘:http://115.com/file/anr4r6a8#
2.uCos-III 官网 移植程序
Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO.zip
官网http://micrium.com/download/Micrium-Book-uCOS-III-STM32F107.exe
网盘http://115.com/file/dpuyusej#
一、第一步新建工程(在上一篇文章中有详解)
二、新建文件夹uCOS_III。在此文件下新建四个文件夹uC-CPU,uC-LIB, uCOS-III。
嵌入式|uCos-III移植到STM32F10x
文章图片

1.uCOS-III下新建三个文件 Source, Ports, Cfg
复制KRN-K3XX-000000\Micrium\Software\uCOS-III\Source下所有文件到Source;
复制KRN-K3XX-000000\Micrium\Software\uCOS-III\Cfg\Template下所有文件到Cfg;
复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\uCOS-III\Ports\ARM-Cortex-M3\Generic\RealVie下所有文件到 Ports。

2. uC-LIB下新建三个文件 Source, Ports, Cfg
复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\uC-LIB文本文件到Source
复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\uC-LIB\Cfg\Template下 lib_cfg.h 到Cfg
复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\uC-LIB\Ports\ARM-Cortex-M3\RealView 下lib_mem_a.asm 到Ports

3. uC-CPU下新建三个文件 Source, Ports,Cfg
复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\uC-CPU下三个文本文件到Source
复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\uC-CPU\ARM-Cortex-M3\GNU下三个文件到 Ports
复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\EvalBoards\Micrium\uC-Eval-STM32F107\Atollic\uCOS-III\APP下cpu_cfg.h 到Cfg

4.复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\EvalBoards\Micrium\uC-Eval-STM32F107\Atollic\uCOS-III\APP下app_cfg.h 到Main中。

好了, 到这里工程文件以复制完了。
1.把工程引用文件路径指定 参图:
嵌入式|uCos-III移植到STM32F10x
文章图片

2.添加工程文件:
嵌入式|uCos-III移植到STM32F10x
文章图片

嵌入式|uCos-III移植到STM32F10x
文章图片


嵌入式|uCos-III移植到STM32F10x
文章图片

嵌入式|uCos-III移植到STM32F10x
文章图片

嵌入式|uCos-III移植到STM32F10x
文章图片

Main.c, Kernel.c,Kernel.h,Config.c,Config.h代码如下提供。
嵌入式|uCos-III移植到STM32F10x
文章图片
嵌入式|uCos-III移植到STM32F10x
文章图片
Main.c
1 #include "os.h" 2 #include "Kernel.h" 3 #include "Config.h" 4 5 int main() 6 { 7SystemConfigInit(); 8KeranlTask(); 9 10return 0; 11 }

嵌入式|uCos-III移植到STM32F10x
文章图片
嵌入式|uCos-III移植到STM32F10x
文章图片
Kernel.c
1 /*------------------------------------------------------------------------- 2 3软件主体 4 5 6 -------------------------------------------------------------------------*/ 7 8 #include "os.h" 9 #include "kernel.h" 10 #include "config.h" 11 12 extern void SysTickInit(void); 13 14 static OS_TCB taskStartTCB; 15 static CPU_STK startTaskStk[STARTUP_TASK_STK_SIZE]; //启动任务的程序空间 16 17 static OS_TCB task1TCB; 18 static CPU_STK task1_stk[TASK1_STK_SIZE]; 19 20 static OS_TCB task2TCB; 21 static CPU_STK task2_stk[TASK2_STK_SIZE]; 22 23 static OS_TCB task3TCB; 24 static CPU_STK task3_stk[TASK3_STK_SIZE]; 25 26 static volatile OS_SEM taskSem; 27 static volatile OS_ERR err; 28 29 /******************************************************************************* 30 * Function Name :void StartTask(void) 31 * Description:启动任务 32 * Input: 33 * Output: 34 * Other: 35 * Date:2012.04.1811:48:23 36 *******************************************************************************/ 37 void StartTask(void) 38 { 39 40led_init(); 41SysTickInit(); 42 43OSTaskCreate((OS_TCB*)&task1TCB, 44(CPU_CHAR*)"task1", 45(OS_TASK_PTR)task1, 46(void*)0, 47(OS_PRIO)TASK1_PRIO, 48(CPU_STK*)&task1_stk[0], 49(CPU_STK_SIZE)TASK1_STK_SIZE / 10, 50(CPU_STK_SIZE)TASK1_STK_SIZE, 51(OS_MSG_QTY)0, 52(OS_TICK)0, 53(void*)0, 54(OS_OPT)(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), 55(OS_ERR*)&err); 56 57OSTaskCreate((OS_TCB*)&task2TCB, 58(CPU_CHAR*)"task2", 59(OS_TASK_PTR)task2, 60(void*)0, 61(OS_PRIO) TASK2_PRIO, 62(CPU_STK*)&task2_stk[0], 63(CPU_STK_SIZE)TASK2_STK_SIZE / 10, 64(CPU_STK_SIZE)TASK2_STK_SIZE, 65(OS_MSG_QTY)0, 66(OS_TICK)0, 67(void*)0, 68(OS_OPT)(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), 69(OS_ERR*)&err); 70 71 72OSTaskCreate((OS_TCB*)&task3TCB, 73(CPU_CHAR*)"task3", 74(OS_TASK_PTR)task3, 75(void*)0, 76(OS_PRIO)TASK3_PRIO, 77(CPU_STK*)&task3_stk[0], 78(CPU_STK_SIZE)TASK3_STK_SIZE / 10, 79(CPU_STK_SIZE)TASK3_STK_SIZE, 80(OS_MSG_QTY)0, 81(OS_TICK)0, 82(void*)0, 83(OS_OPT)(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), 84(OS_ERR*)&err); 85 86OSSemCreate((OS_SEM*)&taskSem, 87(CPU_CHAR*)"taskSem", 88(OS_SEM_CTR)0, 89(OS_ERR*)err); 90 91OSTaskDel((OS_TCB*)&taskStartTCB, 92(OS_ERR*)&err); 93 } 94 95 static void task1(void *p_arg) 96 { 97 98while (1) 99{ 100led_on(LED_4); 101OSTimeDly((OS_TICK)200, 102(OS_OPT)OS_OPT_TIME_DLY, 103(OS_ERR*)&err); 104 105led_off(LED_4); 106OSTimeDly((OS_TICK)200, 107(OS_OPT)OS_OPT_TIME_DLY, 108(OS_ERR*)&err); 109 110OSSemPost((OS_SEM*)&taskSem, 111(OS_OPT)OS_OPT_POST_ALL, 112(OS_ERR*)&err); 113 114} 115 } 116 117 static void task2(void *p_arg) 118 { 119while (1) 120{ 121led_on(LED_5); 122OSSemPend((OS_SEM*)&taskSem, 123(OS_TICK)10000, 124(OS_OPT)OS_OPT_PEND_BLOCKING, 125(CPU_TS*)0, 126(OS_ERR*)&err); 127 128led_off(LED_5); 129OSSemPend((OS_SEM*)&taskSem, 130(OS_TICK)10000, 131(OS_OPT)OS_OPT_PEND_BLOCKING, 132(CPU_TS*)0, 133(OS_ERR*)&err); 134 135} 136 } 137 138 static void task3(void *p_arg) 139 { 140 141while (1) 142{ 143led_on(LED_3); 144OSTimeDly((OS_TICK)100, 145(OS_OPT)OS_OPT_TIME_DLY, 146(OS_ERR*)&err); 147 148led_off(LED_3); 149OSTimeDly((OS_TICK)100, 150(OS_OPT)OS_OPT_TIME_DLY, 151(OS_ERR*)&err); 152 153} 154 } 155 156 157 /******************************************************************************* 158 * Function Name :void KeranlTask(void) 159 * Description:启动任务 160 * Input: 161 * Output: 162 * Other: 163 * Date:2012.04.1811:05:47 164 *******************************************************************************/ 165 void KeranlTask(void) 166 { 167CPU_Init(); 168OSInit((OS_ERR *)&err); 169 170OSTaskCreate((OS_TCB*)&taskStartTCB, 171(CPU_CHAR*)"task_start", 172(OS_TASK_PTR)StartTask, 173(void*)0, 174(OS_PRIO) STARTUP_TASK_PRIO, 175(CPU_STK*)&startTaskStk[0], 176(CPU_STK_SIZE)STARTUP_TASK_STK_SIZE / 10, 177(CPU_STK_SIZE)STARTUP_TASK_STK_SIZE, 178(OS_MSG_QTY)0, 179(OS_TICK)0, 180(void*)0, 181(OS_OPT)(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), 182(OS_ERR*)&err); 183 184OSStart((OS_ERR *)&err); 185 }

嵌入式|uCos-III移植到STM32F10x
文章图片
嵌入式|uCos-III移植到STM32F10x
文章图片
Kernel.h
1 #ifndef _kernel_h_ 2 #define _kernel_h_ 3 4 #include "os.h" 5 6 7 8 9 10 11 12 static void task1(void *p_arg); 13 static void task2(void *p_arg); 14 static void task3(void *p_arg); 15 16 void KeranlTask(void); 17 18 19 #endif

嵌入式|uCos-III移植到STM32F10x
文章图片
嵌入式|uCos-III移植到STM32F10x
文章图片
Config.c
1 /* 2 ******************************************************************************** 3 *uC/OS-II 4 * 5 *ARM Cortex-M3 Port 6 * 7 * File: Config.C 8 * Version: V1.0 9 * By: 王宏强 10 * 11 * For: Stm32f10x 12 * Mode: Thumb2 13 * Toolchain: 14 *RealView Microcontroller Development Kit (MDK) 15 *Keil uVision 16 * Description: STM32F10x 内部 系统的配置 17 * 18 *1,系统中断优先级模式设置 19 *2,系统程序启动指定 20 *3,系统时钟计时器配置 21 *4,芯片引脚初始化 22 * 23 * Date: 2012.05.22 24 *******************************************************************************/ 25 26 #include "misc.h" 27 #include "stm32f10x_gpio.h" 28 #include "stm32f10x_flash.h" 29 #include "stm32f10x_rcc.h" 30 #include "stm32f10x_iwdg.h" 31 #include "config.h" 32 33 34 GPIO_InitTypeDef GPIO_InitStructure; 35 /******************************************************************************* 36 * Function Name: GPIO_Configuration 37 * Description: Configures the different GPIO ports. 38 * Input: None 39 * Output: None 40 * Return: None 41 *******************************************************************************/ 42 void GPIO_Configuration(void) 43 { 44 #ifdef USE_STM3210B_EVAL 45/* Enable the USART2 Pins Software Remapping */ 46GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE); 47 #endif 48 49RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | 50RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | 51RCC_APB2Periph_GPIOE, ENABLE); 52 53GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; 54GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 55GPIO_Init(GPIOA, &GPIO_InitStructure); 56GPIO_Init(GPIOB, &GPIO_InitStructure); 57GPIO_Init(GPIOC, &GPIO_InitStructure); 58GPIO_Init(GPIOD, &GPIO_InitStructure); 59GPIO_Init(GPIOE, &GPIO_InitStructure); 60 61RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | 62RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | 63RCC_APB2Periph_GPIOE, DISABLE); 64 65 } 66 67 68 /******************************************************************************* 69 * Function Name: Delay 70 * Description: Inserts a delay time. 71 * Input: nCount: specifies the delay time length. 72 * Output: None 73 * Return: None 74 *******************************************************************************/ 75 void Delay(volatile CPU_INT32U nCount) 76 { 77for(; nCount != 0; nCount--); 78 } 79 80 /******************************************************************************* 81 函 数 名:void IWDG_Init(void) 82 功能描述:看门狗初始化 83 入口参数: 84 返回参数: 85 创建时间: 2011.6.24 86 ********************************************************************************/ 87 void IWDG_Init(void) 88 { 89 90IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable ); 91IWDG_SetPrescaler( IWDG_Prescaler_64); //最小 92IWDG_SetReload( 0x138); //40KHz内部时钟 0.5s 93IWDG_WriteAccessCmd( IWDG_WriteAccess_Disable ); 94IWDG_Enable(); 95IWDG_ReloadCounter(); 96 } 97 98 /******************************************************************************* 99 * Function Name :void SysTickInit(void) 100 * Description:系统定时器时间配置 101 * Input: 102 * Output: 103 * Other:时基为1ms 104 * Date:2011.11.0312:59:13 105 *******************************************************************************/ 106 void SysTickInit(void) 107 { 108SysTick_Config(SystemCoreClock / 1000); //uCOS时基1ms 109 } 110 /******************************************************************************* 111 * Function Name :void InterruptOrder(void) 112 * Description:中断向量,优先级 113 * Input: 114 * Output: 115 * Other: 116 * Date:2011.10.2711:50:05 117 *******************************************************************************/ 118 void NVIC_Configuration(void) 119 { 120NVIC_PriorityGroupConfig( NVIC_PriorityGroup_1 ); //优先级设置 121 } 122 123 /******************************************************************************* 124 * Function Name :void SystemConfig(void) 125 * Description:系统初始化 126 * Input: 127 * Output: 128 * Other: 129 * Date:2011.10.2713:14:59 130 *******************************************************************************/ 131 void SystemConfigInit(void) 132 { 133NVIC_Configuration(); //中断优先级设置 134GPIO_Configuration(); //端口初始化,所有端口关 135 } 136 137 138 139 140 void led_init(void) 141 { 142GPIO_InitTypeDef GPIO_InitStructure; 143RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); 144GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 |GPIO_Pin_12 | GPIO_Pin_13; 145GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 146GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; 147GPIO_Init(GPIOA, &GPIO_InitStructure); 148 149GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; 150GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 151GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; 152GPIO_Init(GPIOB, &GPIO_InitStructure); 153 } 154 155 void led_on(CPU_INT32U n) 156 { 157switch (n) 158{ 159case LED_0: 160GPIO_SetBits(GPIOD, GPIO_Pin_2); 161break; 162case LED_1: 163GPIO_SetBits(GPIOD, GPIO_Pin_3); 164break; 165case LED_2: 166GPIO_SetBits(GPIOD, GPIO_Pin_4); 167break; 168case LED_3: 169GPIO_SetBits(GPIOB, GPIO_Pin_9); 170break; 171case LED_4: 172GPIO_SetBits(GPIOA, GPIO_Pin_12); 173break; 174case LED_5: 175GPIO_SetBits(GPIOA, GPIO_Pin_11); 176break; 177default: 178break; 179} 180 } 181 182 183 void led_off(CPU_INT32U n) 184 { 185switch (n) 186{ 187case LED_0: 188GPIO_ResetBits(GPIOD, GPIO_Pin_2); 189break; 190case LED_1: 191GPIO_ResetBits(GPIOD, GPIO_Pin_3); 192break; 193case LED_2: 194GPIO_ResetBits(GPIOD, GPIO_Pin_4); 195break; 196case LED_3: 197GPIO_ResetBits(GPIOB, GPIO_Pin_9); 198break; 199case LED_4: 200GPIO_ResetBits(GPIOA, GPIO_Pin_12); 201break; 202case LED_5: 203GPIO_ResetBits(GPIOA, GPIO_Pin_11); 204break; 205default: 206break; 207} 208 }

嵌入式|uCos-III移植到STM32F10x
文章图片
嵌入式|uCos-III移植到STM32F10x
文章图片
Config.h
1 /****************************************Copyright (c)************************************************** 2 ** Modified by:王宏强 3 ** Modified date:2012-05-20 4 ** Version:v3.0 5 ** Descriptions:修改用于STM32F10x 6 ** 7 **------------------------------------------------------------------------------------------------------ 8 ** Modified by: 9 ** Modified date: 10 ** Version: 11 ** Descriptions: 12 ** 13 ********************************************************************************************************/ 14 #include "os.h" 15 16 17 /********************************/ 18 /*系统配置函数*/ 19 /********************************/ 20 #define LED_0 0 21 #define LED_1 1 22 #define LED_2 2 23 #define LED_3 3 24 #define LED_4 4 25 #define LED_5 5 26 27 28 void Delay(volatile CPU_INT32U nCount); 29 void IWDG_Init(void); 30 void SysTickInit(void); 31 void SystemConfigInit(void); 32 void led_init(void); 33 void led_on(CPU_INT32U n); 34 void led_off(CPU_INT32U n); 35 36 37 38 39 40 41 42 43 /******************************************************************************************************** 44 **End Of File 45 ********************************************************************************************************/

app_cfg.h 追加代码 后如下:
嵌入式|uCos-III移植到STM32F10x
文章图片
嵌入式|uCos-III移植到STM32F10x
文章图片
app_cfg.h
1 /* 2 ********************************************************************************************************* 3 *EXAMPLE CODE 4 * 5 *(c) Copyright 2003-2007; Micrium, Inc.; Weston, FL 6 * 7 *All rights reserved.Protected by international copyright laws. 8 *Knowledge of the source code may NOT be used to develop a similar product. 9 *Please help us continue to provide the Embedded community with the finest 10 *software available.Your honesty is greatly appreciated. 11 ********************************************************************************************************* 12 */ 13 14 /* 15 ********************************************************************************************************* 16 * 17 *APPLICATION CONFIGURATION 18 * 19 *ST Microelectronics STM32 20 *on the 21 * 22 *Micrium uC-Eval-STM32F107 23 *Evaluation Board 24 * 25 * Filename: app_cfg.h 26 * Version: V1.00 27 * Programmer(s) : FT 28 ********************************************************************************************************* 29 */ 30 31 #ifndefAPP_CFG_MODULE_PRESENT 32 #defineAPP_CFG_MODULE_PRESENT 33 34 35 /* 36 ********************************************************************************************************* 37 *MODULE ENABLE / DISABLE 38 ********************************************************************************************************* 39 */ 40 41 #defineAPP_CFG_FS_ENDEF_DISABLED 42 #defineAPP_CFG_USB_DEV_ENDEF_DISABLED 43 #defineAPP_CFG_USB_OTG_ENDEF_DISABLED 44 #defineAPP_CFG_USB_HOST_ENDEF_DISABLED 45 46 47 /* 48 ********************************************************************************************************* 49 *TASKS NAMES 50 ********************************************************************************************************* 51 */ 52 53 54 55 /* 56 ********************************************************************************************************* 57 *TASK PRIORITIES 58 ********************************************************************************************************* 59 */ 60 61 #defineAPP_TASK_START_PRIO2 62 63 /* 64 ********************************************************************************************************* 65 *TASK STACK SIZES 66 *Size of the task stacks (# of OS_STK entries) 67 ********************************************************************************************************* 68 */ 69 70 #defineAPP_TASK_START_STK_SIZE512 71 72 /* 73 ********************************************************************************************************* 74 *uC/LIB CONFIGURATION 75 ********************************************************************************************************* 76 */ 77 78 #defineLIB_MEM_CFG_OPTIMIZE_ASM_ENDEF_ENABLED 79 #defineLIB_MEM_CFG_ARG_CHK_EXT_ENDEF_ENABLED 80 #defineLIB_MEM_CFG_ALLOC_ENDEF_ENABLED 81 #defineLIB_MEM_CFG_POOL_NBR10 82 #defineLIB_MEM_CFG_HEAP_SIZE(2 * 1024L) 83 84 /* 85 ********************************************************************************************************* 86 *BSP CONFIGURATION 87 ********************************************************************************************************* 88 */ 89 90 #defineBSP_CFG_SER_COMM_SELBSP_SER_COMM_UART_02 91 92 93 /* 94 ********************************************************************************************************* 95 *TRACE / DEBUG CONFIGURATION 96 ********************************************************************************************************* 97 */ 98 99 #defineTRACE_LEVEL_OFF0 100 #defineTRACE_LEVEL_INFO1 101 #defineTRACE_LEVEL_DBG2 102 103 #defineAPP_TRACE_LEVELTRACE_LEVEL_DBG 104 #defineAPP_TRACEBSP_Ser_Printf 105 106 #include 107 voidBSP_Ser_Printf(CPU_CHAR *format, ...); 108 109 #defineFS_TRACE_LEVELTRACE_LEVEL_DBG 110 #defineFS_TRACEBSP_Ser_Printf 111 112 #defineAPP_TRACE_INFO(x)((APP_TRACE_LEVEL >= TRACE_LEVEL_INFO) ? (void)(APP_TRACE x) : (void)0) 113 #defineAPP_TRACE_DBG(x)((APP_TRACE_LEVEL >= TRACE_LEVEL_DBG ) ? (void)(APP_TRACE x) : (void)0) 114 115 116 117 118 /* task priority */ 119 #define STARTUP_TASK_PRIO 4 120 //#define TASK_MODBUS_PRIO 5 121 //#define TASK_SI4432_PRIO 6 122 123 #define TASK1_PRIO 10 124 #define TASK2_PRIO 13 125 #define TASK3_PRIO 14 126 127 128 /* task stack size */ 129 #define STARTUP_TASK_STK_SIZE 100 130 #define TASK_MODBUS_SIZE 80 131 #define TASK1_STK_SIZE 80 132 #define TASK2_STK_SIZE 80 133 #define TASK3_STK_SIZE 80 134 //#define TASK_SI432_SIZE 80 135 136 137 138 139 #endif



下面对Project\App\uCOS_III\uC-CPU\Ports 下cpu_a.s进行修改, 因为这是GNU的汇编代码。
如下替换:
‘@’ 换为‘; ’
.global换为EXPORT
以下代码
.text
.align 2
.thumb
.syntax unified
换为

PRESERVE8
AREA|.text|, CODE, READONLY
THUMB
把函数名上的.thumb_func在前后添加 ‘; ’注释掉;
并把函数 名后紧跟的‘:’删除。
修改后如下:
嵌入式|uCos-III移植到STM32F10x
文章图片
嵌入式|uCos-III移植到STM32F10x
文章图片
cpu_a.s
; ******************************************************************************************************** ; uC/CPU ; CPU CONFIGURATION & PORT LAYER ; ; (c) Copyright 2004-2011; Micrium, Inc.; Weston, FL ; ; All rights reserved.Protected by international copyright laws. ; ; uC/CPU is provided in source form to registered licensees ONLY.It is ; illegal to distribute this source code to any third party unless you receive ; written permission by an authorized Micrium representative.Knowledge of ; the source code may NOT be used to develop a similar product. ; ; Please help us continue to provide the Embedded community with the finest ; software available.Your honesty is greatly appreciated. ; ; You can contact us at www.micrium.com. ; ********************************************************************************************************; ******************************************************************************************************** ; ; CPU PORT FILE ; ; ARM-Cortex-M3 ; GNU C Compiler ; ; Filename: cpu_a.s ; Version: V1.29.00.00 ; Programmer(s) : JJL ; ********************************************************************************************************; ******************************************************************************************************** ; PUBLIC FUNCTIONS ; ********************************************************************************************************EXPORTCPU_IntDis EXPORTCPU_IntEnEXPORTCPU_SR_Save EXPORTCPU_SR_RestoreEXPORTCPU_WaitForInt EXPORTCPU_WaitForExceptEXPORTCPU_CntLeadZeros EXPORTCPU_CntTrailZeros EXPORTCPU_RevBits; ******************************************************************************************************** ; CODE GENERATION DIRECTIVES ; ********************************************************************************************************PRESERVE8 AREA|.text|, CODE, READONLY THUMB; $PAGE ; ******************************************************************************************************** ; DISABLE and ENABLE INTERRUPTS ; ; Description : Disable/Enable interrupts. ; ; Prototypes: voidCPU_IntDis(void); ; voidCPU_IntEn (void); ; ********************************************************************************************************; .thumb_func CPU_IntDis CPSIDI BXLR; .thumb_func CPU_IntEn CPSIEI BXLR; ******************************************************************************************************** ; CRITICAL SECTION FUNCTIONS ; ; Description : Disable/Enable interrupts by preserving the state of interrupts.Generally speaking, the ; state of the interrupt disable flag is stored in the local variable 'cpu_sr' & interrupts ; are then disabled ('cpu_sr' is allocated in all functions that need to disable interrupts). ; The previous interrupt state is restored by copying 'cpu_sr' into the CPU's status register. ; ; Prototypes: CPU_SRCPU_SR_Save(void); ; voidCPU_SR_Restore(CPU_SR cpu_sr); ; ; Note(s): (1) These functions are used in general like this : ; ; voidTask (void*p_arg) ; { ; CPU_SR_ALLOC(); /* Allocate storage for CPU status register */ ; : ; : ; CPU_CRITICAL_ENTER(); /* cpu_sr = CPU_SR_Save(); */ ; : ; : ; CPU_CRITICAL_EXIT(); /* CPU_SR_Restore(cpu_sr); */ ; : ; } ; ********************************************************************************************************; .thumb_func CPU_SR_Save MRSR0, PRIMASK; Set prio int mask to mask all (except faults) CPSIDI BXLR; .thumb_func CPU_SR_Restore; See Note #2. MSRPRIMASK, R0 BXLR; $PAGE ; ******************************************************************************************************** ; WAIT FOR INTERRUPT ; ; Description : Enters sleep state, which will be exited when an interrupt is received. ; ; Prototypes: voidCPU_WaitForInt (void) ; ; Argument(s) : none. ; ********************************************************************************************************; .thumb_func CPU_WaitForInt WFI; Wait for interrupt BXLR; ******************************************************************************************************** ; WAIT FOR EXCEPTION ; ; Description : Enters sleep state, which will be exited when an exception is received. ; ; Prototypes: voidCPU_WaitForExcept (void) ; ; Argument(s) : none. ; ********************************************************************************************************; .thumb_func CPU_WaitForExcept WFE; Wait for exception BXLR; $PAGE ; ******************************************************************************************************** ; CPU_CntLeadZeros() ; COUNT LEADING ZEROS ; ; Description : Counts the number of contiguous, most-significant, leading zero bits before the ; first binary one bit in a data value. ; ; Prototype: CPU_DATACPU_CntLeadZeros(CPU_DATAval); ; ; Argument(s) : valData value to count leading zero bits. ; ; Return(s): Number of contiguous, most-significant, leading zero bits in 'val'. ; ; Caller(s): Application. ; ; This function is an INTERNAL CPU module function but MAY be called by application ; function(s). ; ; Note(s): (1) (a) Supports 32-bit data value size as configured by 'CPU_DATA' (see 'cpu.h ; CPU WORD CONFIGURATIONNote #1'). ; ; (b) For 32-bit values : ; ; b31b30b29...b04b03b02b01b00# Leading Zeros ; --------------------------------------- ; 1xxxxxxx0 ; 01xxxxxx1 ; 001xxxxx2 ; ::::::::: ; ::::::::: ; 0001xxxx27 ; 00001xxx28 ; 000001xx29 ; 0000001x30 ; 0000000131 ; 0000000032 ; ; ; (2) MUST be defined in 'cpu_a.asm' (or 'cpu_c.c') if CPU_CFG_LEAD_ZEROS_ASM_PRESENT is ; #define'd in 'cpu_cfg.h' or 'cpu.h'. ; ********************************************************************************************************; .thumb_func CPU_CntLeadZeros CLZR0, R0; Count leading zeros BXLR; $PAGE ; ******************************************************************************************************** ; CPU_CntTrailZeros() ; COUNT TRAILING ZEROS ; ; Description : Counts the number of contiguous, least-significant, trailing zero bits before the ; first binary one bit in a data value. ; ; Prototype: CPU_DATACPU_CntTrailZeros(CPU_DATAval); ; ; Argument(s) : valData value to count trailing zero bits. ; ; Return(s): Number of contiguous, least-significant, trailing zero bits in 'val'. ; ; Caller(s): Application. ; ; This function is an INTERNAL CPU module function but MAY be called by application ; function(s). ; ; Note(s): (1) (a) Supports 32-bit data value size as configured by 'CPU_DATA' (see 'cpu.h ; CPU WORD CONFIGURATIONNote #1'). ; ; (b) For 32-bit values : ; ; b31b30b29b28b27...b02b01b00# Trailing Zeros ; ---------------------------------------- ; xxxxxxx10 ; xxxxxx101 ; xxxxx1002 ; ::::::::: ; ::::::::: ; xxxx100027 ; xxx1000028 ; xx10000029 ; x100000030 ; 1000000031 ; 0000000032 ; ; ; (2) MUST be defined in 'cpu_a.asm' (or 'cpu_c.c') if CPU_CFG_TRAIL_ZEROS_ASM_PRESENT is ; #define'd in 'cpu_cfg.h' or 'cpu.h'. ; ********************************************************************************************************; .thumb_func CPU_CntTrailZeros RBITR0, R0; Reverse bits CLZR0, R0; Count leading zeros BXLR; $PAGE ; ******************************************************************************************************** ; CPU_RevBits() ; REVERSE BITS ; ; Description : Reverses the bits in a data value. ; ; Prototypes: CPU_DATACPU_RevBits(CPU_DATAval); ; ; Argument(s) : valData value to reverse bits. ; ; Return(s): Value with all bits in 'val' reversed (see Note #1). ; ; Caller(s): Application. ; ; This function is an INTERNAL CPU module function but MAY be called by application function(s). ; ; Note(s): (1) The final, reversed data value for 'val' is such that : ; ; 'val's final bit0='val's original bitN ; 'val's final bit1='val's original bit (N - 1) ; 'val's final bit2='val's original bit (N - 2) ; ; ...... ; ; 'val's final bit (N - 2)='val's original bit2 ; 'val's final bit (N - 1)='val's original bit1 ; 'val's final bitN='val's original bit0 ; ********************************************************************************************************; .thumb_func CPU_RevBits RBITR0, R0; Reverse bits BXLR; $PAGE ; ******************************************************************************************************** ; CPU ASSEMBLY PORT FILE END ; ********************************************************************************************************END

修改os_cfg.h
OS_CFG_TS_EN宏定义改为0u
OS_CFG_SCHED_LOCK_TIME_MEAS_EN 宏定义改为0u
OS_CFG_TASK_DEL_EN 宏定义改为 1u
其它可根据自己的功能需要 先1u或ou。


这里Project\App\uCOS_III\uC-LIB\Source中lib_str.c的Str_FmtNbr_Int32 函数 的函数体内局部变量没有赋初值,不够严谨 这里赋初值如下:
CPU_CHAR*pstr_fmt = (CPU_CHAR *)0; CPU_DATAi = 0u; CPU_INT32Unbr_fmt = 0u; CPU_INT32Unbr_log = 0u; CPU_INT08Unbr_dig_max = 0u; CPU_INT08Unbr_dig_min = 0u; CPU_INT08Unbr_dig_fmtd = 0u; CPU_INT08Unbr_neg_sign = 0u; CPU_INT08Unbr_lead_char = 0u; CPU_INT08Udig_val = 0u; CPU_INT08Ulead_char_delta_0 = 0u; CPU_INT08Ulead_char_delta_a = 0u; CPU_BOOLEANlead_char_dig = 0u; CPU_BOOLEANlead_char_0 = 0u; CPU_BOOLEANfmt_invalid = 0u; CPU_BOOLEANprint_char = 0u; CPU_BOOLEANnbr_neg_fmtd = 0u;



最后修改启动文件startup_stm32f10x_hd.s ,加载不同的启动文件 时不用怕,修改的内容都是一样的:
OS_CPU_PendSVHandler 替换所有的PendSV_Handler
OS_CPU_SysTickHandler替换所有的SysTick_Handler
使中断执行uCos的中断函数。

到这里就全部OK了。

仿真查看端口变化
嵌入式|uCos-III移植到STM32F10x
文章图片

嵌入式|uCos-III移植到STM32F10x
文章图片


编程结果过于臃肿:
嵌入式|uCos-III移植到STM32F10x
文章图片


开启3级优化:
嵌入式|uCos-III移植到STM32F10x
文章图片

再编译看结果:
嵌入式|uCos-III移植到STM32F10x
文章图片


整个工程文件存到我的网盘中http://pan.baidu.com/share/link?shareid=25418&uk=118334538
希望以上资料对大家有所帮助。
转载于:https://www.cnblogs.com/hiker-blogs/archive/2012/06/13/2547176.html

    推荐阅读