1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
最近在百度上看了uCOS-III 的介绍后,诸多功能有很大的提升和改进,感觉有必要升级一下开发环境。百度介绍:http://baike.baidu.com/view/8531313.htm
环境:
官网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。 1.uCOS-III下新建三个文件 Source, Ports, Cfg 复制KRN-K3XX-000000MicriumSoftwareuCOS-IIISource下所有文件到Source; 复制KRN-K3XX-000000MicriumSoftwareuCOS-IIICfgTemplate下所有文件到Cfg; 复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIOMicriumSoftwareuCOS-IIIPortsARM-Cortex-M3GenericRealVie下所有文件到 Ports。 2. uC-LIB下新建三个文件 Source, Ports, Cfg 复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIOMicriumSoftwareuC-LIB文本文件到Source 复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIOMicriumSoftwareuC-LIBCfgTemplate下 lib_cfg.h 到Cfg 复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIOMicriumSoftwareuC-LIBPortsARM-Cortex-M3RealView 下lib_mem_a.asm 到Ports 3. uC-CPU下新建三个文件 Source, Ports,Cfg 复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIOMicriumSoftwareuC-CPU下三个文本文件到Source 复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIOMicriumSoftwareuC-CPUARM-Cortex-M3GNU下三个文件到 Ports 复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIOMicriumSoftwareEvalBoardsMicriumuC-Eval-STM32F107AtollicuCOS-IIIAPP下cpu_cfg.h 到Cfg 4.复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIOMicriumSoftwareEvalBoardsMicriumuC-Eval-STM32F107AtollicuCOS-IIIAPP下app_cfg.h 到Main中。 好了, 到这里工程文件以复制完了。 1.把工程引用文件路径指定 参图: 2.添加工程文件: Main.c, Kernel.c,Kernel.h,Config.c,Config.h代码如下提供。 Main.c 1 #include "os.h" 2 #include "Kernel.h" 3 #include "Config.h" 4 5 int main() 6 { 7 SystemConfigInit(); 8 KeranlTask(); 9 10 return 0;11 } 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.18 11:48:23 36 *******************************************************************************/ 37 void StartTask(void) 38 { 39 40 led_init(); 41 SysTickInit(); 42 43 OSTaskCreate( (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 57 OSTaskCreate( (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 72 OSTaskCreate( (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 86 OSSemCreate( (OS_SEM *)&taskSem, 87 (CPU_CHAR *)"taskSem", 88 (OS_SEM_CTR)0, 89 (OS_ERR *)err); 90 91 OSTaskDel( (OS_TCB *)&taskStartTCB, 92 (OS_ERR *)&err); 93 } 94 95 static void task1(void *p_arg) 96 { 97 98 while (1) 99 {100 led_on(LED_4);101 OSTimeDly( (OS_TICK )200, 102 (OS_OPT )OS_OPT_TIME_DLY, 103 (OS_ERR *)&err);104 105 led_off(LED_4);106 OSTimeDly( (OS_TICK )200, 107 (OS_OPT )OS_OPT_TIME_DLY, 108 (OS_ERR *)&err);109 110 OSSemPost( (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 {119 while (1)120 {121 led_on(LED_5);122 OSSemPend( (OS_SEM *)&taskSem, 123 (OS_TICK )10000, 124 (OS_OPT )OS_OPT_PEND_BLOCKING, 125 (CPU_TS *)0, 126 (OS_ERR *)&err);127 128 led_off(LED_5);129 OSSemPend( (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 141 while (1)142 {143 led_on(LED_3);144 OSTimeDly( (OS_TICK )100, 145 (OS_OPT )OS_OPT_TIME_DLY, 146 (OS_ERR *)&err);147 148 led_off(LED_3);149 OSTimeDly( (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.18 11:05:47164 *******************************************************************************/165 void KeranlTask(void)166 { 167 CPU_Init();168 OSInit((OS_ERR *)&err); 169 170 OSTaskCreate( (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 184 OSStart((OS_ERR *)&err);185 } 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 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 */ 46 GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE); 47 #endif 48 49 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | 50 RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | 51 RCC_APB2Periph_GPIOE, ENABLE); 52 53 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; 54 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 55 GPIO_Init(GPIOA, &GPIO_InitStructure); 56 GPIO_Init(GPIOB, &GPIO_InitStructure); 57 GPIO_Init(GPIOC, &GPIO_InitStructure); 58 GPIO_Init(GPIOD, &GPIO_InitStructure); 59 GPIO_Init(GPIOE, &GPIO_InitStructure); 60 61 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | 62 RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | 63 RCC_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 { 77 for(; 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 90 IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable ); 91 IWDG_SetPrescaler( IWDG_Prescaler_64); //最小 92 IWDG_SetReload( 0x138); //40KHz内部时钟 0.5s 93 IWDG_WriteAccessCmd( IWDG_WriteAccess_Disable ); 94 IWDG_Enable(); 95 IWDG_ReloadCounter(); 96 } 97 98 /******************************************************************************* 99 * Function Name :void SysTickInit(void)100 * Description :系统定时器时间配置101 * Input :102 * Output :103 * Other :时基为1ms104 * Date :2011.11.03 12:59:13105 *******************************************************************************/106 void SysTickInit(void)107 {108 SysTick_Config(SystemCoreClock / 1000); //uCOS时基1ms109 }110 /*******************************************************************************111 * Function Name :void InterruptOrder(void)112 * Description :中断向量,优先级113 * Input :114 * Output :115 * Other :116 * Date :2011.10.27 11:50:05117 *******************************************************************************/118 void NVIC_Configuration(void)119 {120 NVIC_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.27 13:14:59130 *******************************************************************************/131 void SystemConfigInit(void)132 {133 NVIC_Configuration(); //中断优先级设置134 GPIO_Configuration(); //端口初始化,所有端口关135 }136 137 138 139 140 void led_init(void)141 {142 GPIO_InitTypeDef GPIO_InitStructure;143 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);144 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;145 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;146 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;147 GPIO_Init(GPIOA, &GPIO_InitStructure);148 149 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;150 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;151 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;152 GPIO_Init(GPIOB, &GPIO_InitStructure);153 }154 155 void led_on(CPU_INT32U n)156 {157 switch (n)158 {159 case LED_0:160 GPIO_SetBits(GPIOD, GPIO_Pin_2);161 break;162 case LED_1:163 GPIO_SetBits(GPIOD, GPIO_Pin_3);164 break;165 case LED_2:166 GPIO_SetBits(GPIOD, GPIO_Pin_4);167 break;168 case LED_3:169 GPIO_SetBits(GPIOB, GPIO_Pin_9);170 break;171 case LED_4:172 GPIO_SetBits(GPIOA, GPIO_Pin_12);173 break;174 case LED_5:175 GPIO_SetBits(GPIOA, GPIO_Pin_11);176 break;177 default:178 break;179 }180 }181 182 183 void led_off(CPU_INT32U n)184 {185 switch (n)186 {187 case LED_0:188 GPIO_ResetBits(GPIOD, GPIO_Pin_2);189 break;190 case LED_1:191 GPIO_ResetBits(GPIOD, GPIO_Pin_3);192 break;193 case LED_2:194 GPIO_ResetBits(GPIOD, GPIO_Pin_4);195 break;196 case LED_3:197 GPIO_ResetBits(GPIOB, GPIO_Pin_9);198 break;199 case LED_4:200 GPIO_ResetBits(GPIOA, GPIO_Pin_12);201 break;202 case LED_5:203 GPIO_ResetBits(GPIOA, GPIO_Pin_11);204 break;205 default:206 break;207 }208 } 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 021 #define LED_1 122 #define LED_2 223 #define LED_3 324 #define LED_4 425 #define LED_5 526 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 File45 ********************************************************************************************************/app_cfg.h 追加代码 后如下: 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 #ifndef APP_CFG_MODULE_PRESENT 32 #define APP_CFG_MODULE_PRESENT 33 34 35 /* 36 ********************************************************************************************************* 37 * MODULE ENABLE / DISABLE 38 ********************************************************************************************************* 39 */ 40 41 #define APP_CFG_FS_EN DEF_DISABLED 42 #define APP_CFG_USB_DEV_EN DEF_DISABLED 43 #define APP_CFG_USB_OTG_EN DEF_DISABLED 44 #define APP_CFG_USB_HOST_EN DEF_DISABLED 45 46 47 /* 48 ********************************************************************************************************* 49 * TASKS NAMES 50 ********************************************************************************************************* 51 */ 52 53 54 55 /* 56 ********************************************************************************************************* 57 * TASK PRIORITIES 58 ********************************************************************************************************* 59 */ 60 61 #define APP_TASK_START_PRIO 2 62 63 /* 64 ********************************************************************************************************* 65 * TASK STACK SIZES 66 * Size of the task stacks (# of OS_STK entries) 67 ********************************************************************************************************* 68 */ 69 70 #define APP_TASK_START_STK_SIZE 512 71 72 /* 73 ********************************************************************************************************* 74 * uC/LIB CONFIGURATION 75 ********************************************************************************************************* 76 */ 77 78 #define LIB_MEM_CFG_OPTIMIZE_ASM_EN DEF_ENABLED 79 #define LIB_MEM_CFG_ARG_CHK_EXT_EN DEF_ENABLED 80 #define LIB_MEM_CFG_ALLOC_EN DEF_ENABLED 81 #define LIB_MEM_CFG_POOL_NBR 10 82 #define LIB_MEM_CFG_HEAP_SIZE (2 * 1024L) 83 84 /* 85 ********************************************************************************************************* 86 * BSP CONFIGURATION 87 ********************************************************************************************************* 88 */ 89 90 #define BSP_CFG_SER_COMM_SEL BSP_SER_COMM_UART_02 91 92 93 /* 94 ********************************************************************************************************* 95 * TRACE / DEBUG CONFIGURATION 96 ********************************************************************************************************* 97 */ 98 99 #define TRACE_LEVEL_OFF 0100 #define TRACE_LEVEL_INFO 1101 #define TRACE_LEVEL_DBG 2102 103 #define APP_TRACE_LEVEL TRACE_LEVEL_DBG104 #define APP_TRACE BSP_Ser_Printf105 106 #include 下面对ProjectAppuCOS_IIIuC-CPUPorts 下cpu_a.s进行修改, 因为这是GNU的汇编代码。 如下替换: ‘@’ 换为‘;’ .global 换为EXPORT 以下代码 .text .align 2 .thumb .syntax unified 换为 PRESERVE8 AREA |.text|, CODE, READONLY THUMB 把函数名上的.thumb_func 在前后添加 ‘;’注释掉; 并把函数 名后紧跟的‘:’删除。 修改后如下: 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;******************************************************************************************************** EXPORT CPU_IntDis EXPORT CPU_IntEn EXPORT CPU_SR_Save EXPORT CPU_SR_Restore EXPORT CPU_WaitForInt EXPORT CPU_WaitForExcept EXPORT CPU_CntLeadZeros EXPORT CPU_CntTrailZeros EXPORT CPU_RevBits;********************************************************************************************************; CODE GENERATION DIRECTIVES;******************************************************************************************************** PRESERVE8 AREA |.text|, CODE, READONLY THUMB;$PAGE;********************************************************************************************************; DISABLE and ENABLE INTERRUPTS;; Description : Disable/Enable interrupts.;; Prototypes : void CPU_IntDis(void);; void CPU_IntEn (void);;********************************************************************************************************;.thumb_funcCPU_IntDis CPSID I BX LR;.thumb_funcCPU_IntEn CPSIE I BX LR;********************************************************************************************************; 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_SR CPU_SR_Save (void);; void CPU_SR_Restore(CPU_SR cpu_sr);;; Note(s) : (1) These functions are used in general like this :;; void Task (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_funcCPU_SR_Save MRS R0, PRIMASK ; Set prio int mask to mask all (except faults) CPSID I BX LR;.thumb_funcCPU_SR_Restore ; See Note #2. MSR PRIMASK, R0 BX LR;$PAGE;********************************************************************************************************; WAIT FOR INTERRUPT;; Description : Enters sleep state, which will be exited when an interrupt is received.;; Prototypes : void CPU_WaitForInt (void);; Argument(s) : none.;********************************************************************************************************;.thumb_funcCPU_WaitForInt WFI ; Wait for interrupt BX LR;********************************************************************************************************; WAIT FOR EXCEPTION;; Description : Enters sleep state, which will be exited when an exception is received.;; Prototypes : void CPU_WaitForExcept (void);; Argument(s) : none.;********************************************************************************************************;.thumb_funcCPU_WaitForExcept WFE ; Wait for exception BX LR;$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_DATA CPU_CntLeadZeros(CPU_DATA val);;; Argument(s) : val Data 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 CONFIGURATION Note #1').;; (b) For 32-bit values :;; b31 b30 b29 ... b04 b03 b02 b01 b00 # Leading Zeros; --- --- --- --- --- --- --- --- ---------------; 1 x x x x x x x 0; 0 1 x x x x x x 1; 0 0 1 x x x x x 2; : : : : : : : : :; : : : : : : : : :; 0 0 0 1 x x x x 27; 0 0 0 0 1 x x x 28; 0 0 0 0 0 1 x x 29; 0 0 0 0 0 0 1 x 30; 0 0 0 0 0 0 0 1 31; 0 0 0 0 0 0 0 0 32;;; (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_funcCPU_CntLeadZeros CLZ R0, R0 ; Count leading zeros BX LR;$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_DATA CPU_CntTrailZeros(CPU_DATA val);;; Argument(s) : val Data 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 CONFIGURATION Note #1').;; (b) For 32-bit values :;; b31 b30 b29 b28 b27 ... b02 b01 b00 # Trailing Zeros; --- --- --- --- --- --- --- --- ----------------; x x x x x x x 1 0; x x x x x x 1 0 1; x x x x x 1 0 0 2; : : : : : : : : :; : : : : : : : : :; x x x x 1 0 0 0 27; x x x 1 0 0 0 0 28; x x 1 0 0 0 0 0 29; x 1 0 0 0 0 0 0 30; 1 0 0 0 0 0 0 0 31; 0 0 0 0 0 0 0 0 32;;; (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_funcCPU_CntTrailZeros RBIT R0, R0 ; Reverse bits CLZ R0, R0 ; Count leading zeros BX LR;$PAGE;********************************************************************************************************; CPU_RevBits(); REVERSE BITS;; Description : Reverses the bits in a data value.;; Prototypes : CPU_DATA CPU_RevBits(CPU_DATA val);;; Argument(s) : val Data 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 bit 0 = 'val's original bit N; 'val's final bit 1 = 'val's original bit (N - 1); 'val's final bit 2 = 'val's original bit (N - 2);; ... ...;; 'val's final bit (N - 2) = 'val's original bit 2; 'val's final bit (N - 1) = 'val's original bit 1; 'val's final bit N = 'val's original bit 0;********************************************************************************************************;.thumb_funcCPU_RevBits RBIT R0, R0 ; Reverse bits BX LR;$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。 最后修改启动文件startup_stm32f10x_hd.s ,加载不同的启动文件 时不用怕,修改的内容都是一样的: OS_CPU_PendSVHandler 替换所有的PendSV_Handler OS_CPU_SysTickHandler替换所有的SysTick_Handler 使中断执行uCos的中断函数。 到这里就全部OK了。 仿真查看端口变化 编程结果过于臃肿: 开启3级优化: 再编译看结果: 整个工程文件存到我的网盘中http://pan.baidu.com/share/link?shareid=25418&uk=118334538 希望以上资料对大家有所帮助。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 04:14 , Processed in 0.923551 second(s), Total 76, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号