- 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:47
- 164 *******************************************************************************/
- 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 }
作者: Bermanrep 时间: 2016-10-18 15:57
- Kernel.h
- #ifndef _kernel_h_
- #define _kernel_h_
- #include "os.h"
- static void task1(void *p_arg);
- static void task2(void *p_arg);
- static void task3(void *p_arg);
- void KeranlTask(void);
- #endif
- Config.c
- /*
- ********************************************************************************
- * uC/OS-II
- *
- * ARM Cortex-M3 Port
- *
- * File : Config.C
- * Version : V1.0
- * By : 王宏强
- *
- * For : Stm32f10x
- * Mode : Thumb2
- * Toolchain :
- * RealView Microcontroller Development Kit (MDK)
- * Keil uVision
- * Description : STM32F10x 内部 系统的配置
- *
- * 1,系统中断优先级模式设置
- * 2,系统程序启动指定
- * 3,系统时钟计时器配置
- * 4,芯片引脚初始化
- *
- * Date : 2012.05.22
- *******************************************************************************/
- #include "misc.h"
- #include "stm32f10x_gpio.h"
- #include "stm32f10x_flash.h"
- #include "stm32f10x_rcc.h"
- #include "stm32f10x_iwdg.h"
- #include "config.h"
- GPIO_InitTypeDef GPIO_InitStructure;
- /*******************************************************************************
- * Function Name : GPIO_Configuration
- * Description : Configures the different GPIO ports.
- * Input : None
- * Output : None
- * Return : None
- *******************************************************************************/
- void GPIO_Configuration(void)
- {
- #ifdef USE_STM3210B_EVAL
- /* Enable the USART2 Pins Software Remapping */
- GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
- #endif
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
- RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
- RCC_APB2Periph_GPIOE, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- GPIO_Init(GPIOD, &GPIO_InitStructure);
- GPIO_Init(GPIOE, &GPIO_InitStructure);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
- RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
- RCC_APB2Periph_GPIOE, DISABLE);
- }
- /*******************************************************************************
- * Function Name : Delay
- * Description : Inserts a delay time.
- * Input : nCount: specifies the delay time length.
- * Output : None
- * Return : None
- *******************************************************************************/
- void Delay(volatile CPU_INT32U nCount)
- {
- for(; nCount != 0; nCount--);
- }
- /*******************************************************************************
- 函 数 名:void IWDG_Init(void)
- 功能描述:看门狗初始化
- 入口参数:
- 返回参数:
- 创建时间: 2011.6.24
- ********************************************************************************/
- void IWDG_Init(void)
- {
- IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );
- IWDG_SetPrescaler( IWDG_Prescaler_64); //最小
- IWDG_SetReload( 0x138); //40KHz内部时钟 0.5s
- IWDG_WriteAccessCmd( IWDG_WriteAccess_Disable );
- IWDG_Enable();
- IWDG_ReloadCounter();
- }
- /*******************************************************************************
- * Function Name :void SysTickInit(void)
- * Description :系统定时器时间配置
- * Input :
- * Output :
- * Other :时基为1ms
- * Date :2011.11.03 12:59:13
- *******************************************************************************/
- void SysTickInit(void)
- {
- SysTick_Config(SystemCoreClock / 1000); //uCOS时基1ms
- }
- /*******************************************************************************
- * Function Name :void InterruptOrder(void)
- * Description :中断向量,优先级
- * Input :
- * Output :
- * Other :
- * Date :2011.10.27 11:50:05
- *******************************************************************************/
- void NVIC_Configuration(void)
- {
- NVIC_PriorityGroupConfig( NVIC_PriorityGroup_1 );//优先级设置
- }
- /*******************************************************************************
- * Function Name :void SystemConfig(void)
- * Description :系统初始化
- * Input :
- * Output :
- * Other :
- * Date :2011.10.27 13:14:59
- *******************************************************************************/
- void SystemConfigInit(void)
- {
- NVIC_Configuration(); //中断优先级设置
- GPIO_Configuration(); //端口初始化,所有端口关
- }
- void led_init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
- void led_on(CPU_INT32U n)
- {
- switch (n)
- {
- case LED_0:
- GPIO_SetBits(GPIOD, GPIO_Pin_2);
- break;
- case LED_1:
- GPIO_SetBits(GPIOD, GPIO_Pin_3);
- break;
- case LED_2:
- GPIO_SetBits(GPIOD, GPIO_Pin_4);
- break;
- case LED_3:
- GPIO_SetBits(GPIOB, GPIO_Pin_9);
- break;
- case LED_4:
- GPIO_SetBits(GPIOA, GPIO_Pin_12);
- break;
- case LED_5:
- GPIO_SetBits(GPIOA, GPIO_Pin_11);
- break;
- default:
- break;
- }
- }
- void led_off(CPU_INT32U n)
- {
- switch (n)
- {
- case LED_0:
- GPIO_ResetBits(GPIOD, GPIO_Pin_2);
- break;
- case LED_1:
- GPIO_ResetBits(GPIOD, GPIO_Pin_3);
- break;
- case LED_2:
- GPIO_ResetBits(GPIOD, GPIO_Pin_4);
- break;
- case LED_3:
- GPIO_ResetBits(GPIOB, GPIO_Pin_9);
- break;
- case LED_4:
- GPIO_ResetBits(GPIOA, GPIO_Pin_12);
- break;
- case LED_5:
- GPIO_ResetBits(GPIOA, GPIO_Pin_11);
- break;
- default:
- break;
- }
- }
作者: Bermanrep 时间: 2016-10-18 15:58
- Config.h
- /****************************************Copyright (c)**************************************************
- ** Modified by: 王宏强
- ** Modified date: 2012-05-20
- ** Version: v3.0
- ** Descriptions: 修改用于STM32F10x
- **
- **------------------------------------------------------------------------------------------------------
- ** Modified by:
- ** Modified date:
- ** Version:
- ** Descriptions:
- **
- ********************************************************************************************************/
- #include "os.h"
- /********************************/
- /* 系统配置函数 */
- /********************************/
- #define LED_0 0
- #define LED_1 1
- #define LED_2 2
- #define LED_3 3
- #define LED_4 4
- #define LED_5 5
- void Delay(volatile CPU_INT32U nCount);
- void IWDG_Init(void);
- void SysTickInit(void);
- void SystemConfigInit(void);
- void led_init(void);
- void led_on(CPU_INT32U n);
- void led_off(CPU_INT32U n);
- /********************************************************************************************************
- ** End Of File
- ********************************************************************************************************/
作者: Bermanrep 时间: 2016-10-18 15:58
下面对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 在前后添加 ‘;’注释掉;
并把函数 名后紧跟的‘:’删除。
修改后如下:
- 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_func
- CPU_IntDis
- CPSID I
- BX LR
- ;.thumb_func
- CPU_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_func
- CPU_SR_Save
- MRS R0, PRIMASK ; Set prio int mask to mask all (except faults)
- CPSID I
- BX LR
- ;.thumb_func
- CPU_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_func
- CPU_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_func
- CPU_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_func
- CPU_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_func
- CPU_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_func
- CPU_RevBits
- RBIT R0, R0 ; Reverse bits
- BX LR
- ;$PAGE
- ;********************************************************************************************************
- ; CPU ASSEMBLY PORT FILE END
- ;********************************************************************************************************
- END
作者: Bermanrep 时间: 2016-10-18 15:59
修改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_DATA i = 0u;
- CPU_INT32U nbr_fmt = 0u;
- CPU_INT32U nbr_log = 0u;
- CPU_INT08U nbr_dig_max = 0u;
- CPU_INT08U nbr_dig_min = 0u;
- CPU_INT08U nbr_dig_fmtd = 0u;
- CPU_INT08U nbr_neg_sign = 0u;
- CPU_INT08U nbr_lead_char = 0u;
- CPU_INT08U dig_val = 0u;
- CPU_INT08U lead_char_delta_0 = 0u;
- CPU_INT08U lead_char_delta_a = 0u;
- CPU_BOOLEAN lead_char_dig = 0u;
- CPU_BOOLEAN lead_char_0 = 0u;
- CPU_BOOLEAN fmt_invalid = 0u;
- CPU_BOOLEAN print_char = 0u;
- CPU_BOOLEAN nbr_neg_fmtd = 0u;
最后修改启动文件startup_stm32f10x_hd.s ,加载不同的启动文件 时不用怕,修改的内容都是一样的:
OS_CPU_PendSVHandler 替换所有的PendSV_Handler
OS_CPU_SysTickHandler替换所有的SysTick_Handler
使中断执行uCos的中断函数。
作者: Bermanrep 时间: 2016-10-18 16:00
到这里就全部OK了。
仿真查看端口变化


编程结果过于臃肿:

开启3级优化:

再编译看结果:

作者: deviceplugs 时间: 2016-10-19 20:07
楼主有没有移植到stm32F103R8的例程啊
欢迎光临 21ic电子技术开发论坛 (https://bbs.21ic.com/) |
Powered by Discuz! X3.5 |