From 2d07561118e76f685a4192d3b92cfb70407bdd6b Mon Sep 17 00:00:00 2001 From: xqq27 Date: Wed, 22 Jan 2025 13:22:25 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E7=94=A8=E4=BA=86Timer2=E4=BD=9C?= =?UTF-8?q?=E4=B8=BA=E7=A1=AC=E4=BB=B6=E5=AE=9A=E6=97=B6=E5=99=A8=E7=9A=84?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=EF=BC=8C=E7=9B=AE=E5=89=8D=E5=8F=AA=E8=AF=95?= =?UTF-8?q?=E4=BA=86=E4=B8=80=E4=B8=8B=E5=9F=BA=E6=9C=AC=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=99=A8=E7=9A=84=E5=AE=9A=E6=97=B6=E6=9B=B4=E6=96=B0=E4=B8=AD?= =?UTF-8?q?=E6=96=AD=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Code/.vscode/settings.json | 2 + Code/SmartCarV1.code-workspace | 8 +- Code/app/src/app_led.c | 63 +- Code/app/src/main.c | 12 +- Code/bsp/bsp.c | 4 +- Code/bsp/bsp.h | 4 +- Code/bsp/inc/bsp_led.h | 4 + Code/bsp/inc/bsp_timer-old.h | 6 + Code/bsp/inc/bsp_timer.h | 55 +- Code/bsp/src/bsp_led.c | 44 +- Code/bsp/src/bsp_timer-old.c | 55 ++ Code/bsp/src/bsp_timer.c | 618 ++++++++++++-- Code/isr/interrupt_handler.c | 20 +- .../DeviceSupport/ST/STM32F10x/stm32f10x.h | 2 + Code/library/stdint.h | 311 ++++++++ Project/Output/TianyunV1.hex | 317 ++++---- Project/Output/TianyunV1.map | 751 ++++++++++-------- 17 files changed, 1674 insertions(+), 602 deletions(-) create mode 100644 Code/bsp/inc/bsp_timer-old.h create mode 100644 Code/bsp/src/bsp_timer-old.c create mode 100644 Code/library/stdint.h diff --git a/Code/.vscode/settings.json b/Code/.vscode/settings.json index 2dd3415..01139cd 100644 --- a/Code/.vscode/settings.json +++ b/Code/.vscode/settings.json @@ -37,4 +37,6 @@ "public_diy.h": "c" }, "cmake.sourceDirectory": "E:/xqq/workspace/STM32F103RC-StdLibrary/Code/middleware/FreeRTOS/Kernel" + + } \ No newline at end of file diff --git a/Code/SmartCarV1.code-workspace b/Code/SmartCarV1.code-workspace index 218c968..7e8e9c7 100644 --- a/Code/SmartCarV1.code-workspace +++ b/Code/SmartCarV1.code-workspace @@ -44,6 +44,10 @@ "bsp_timer.h": "c", "bsp_led.h": "c", "stm32f10x_conf.h": "c" - } - } + }, + + + + }, + } \ No newline at end of file diff --git a/Code/app/src/app_led.c b/Code/app/src/app_led.c index 13b5dfd..f1b33ce 100644 --- a/Code/app/src/app_led.c +++ b/Code/app/src/app_led.c @@ -18,65 +18,18 @@ #include "bsp.h" -static uint8_t led_style_change_flag = 0; - -void app_led_change_style_enable(void) -{ - led_style_change_flag = 1; -} - -static uint8_t app_led_get_change_style_value(void) -{ - return led_style_change_flag; -} - -void app_led_change_style_disable(void) -{ - led_style_change_flag = 0; -} void app_led_marquee(void) { - static uint8_t tmp_state = 0; - static uint32_t tmp_tick = 0; + // static uint8_t tmp_state = 0; + // static uint32_t tmp_tick = 0; + + // if(get_systick_ms() - tmp_tick > 500) + // { + // tmp_tick = get_systick_ms(); + bsp_LedToggle(LED1); + // } - if(app_led_get_change_style_value() > 0) - { - app_led_change_style_disable(); - tmp_state = 0; - } - - switch(tmp_state) - { - case 0: - if(get_systick_ms() - tmp_tick > 500) - { - tmp_tick = get_systick_ms(); - bsp_LedOff(1); - tmp_state = 1; - } - break; - case 1: - if(get_systick_ms() - tmp_tick > 500) - { - tmp_tick = get_systick_ms(); - bsp_LedOn(1); - tmp_state = 0; - // printf("123\n"); - } - break; - - // case 2: - // // mw_get_led_obj(Led0).off(); - // if(get_systick_ms() - tmp_tick > 500) - // { - // tmp_state = 1; - // tmp_tick = get_systick_ms(); - // } - // break; - default: - break; - } } diff --git a/Code/app/src/main.c b/Code/app/src/main.c index f7b7e6d..23ef5a4 100644 --- a/Code/app/src/main.c +++ b/Code/app/src/main.c @@ -31,12 +31,16 @@ *************************************************************************************/ void bsp_init(void) { - // bsp_gpio_init(); - bsp_timer_init(); + bsp_InitTimer(); // bsp_usart_1_init(115200); bsp_Init(); } - +/************************************************************************************* + * @brief 【描述】 + * + * @warning 【不可重入,阻塞等警告】 + * @note 【重大修改】 + *************************************************************************************/ void middleware_init(void) { // led mw. init @@ -62,6 +66,6 @@ int main(void) while (1) { - app_led_marquee(); + ; } } diff --git a/Code/bsp/bsp.c b/Code/bsp/bsp.c index fbe7392..3eeed05 100644 --- a/Code/bsp/bsp.c +++ b/Code/bsp/bsp.c @@ -79,14 +79,14 @@ void bsp_RunPer1ms(void) // TimeOut--; // } - if (ubCounter < 50) + if (ubCounter < 250) { ubCounter++; } else { ubCounter = 0x00; - bsp_LedToggle(1); + bsp_LedToggle(LED1); } } diff --git a/Code/bsp/bsp.h b/Code/bsp/bsp.h index 0095da3..1e20c78 100644 --- a/Code/bsp/bsp.h +++ b/Code/bsp/bsp.h @@ -44,7 +44,7 @@ #include #include #include - +#include "stdint.h" #ifndef TRUE #define TRUE 1 #endif @@ -66,7 +66,7 @@ /* 通过取消注释或者添加注释的方式控制是否包含底层驱动模块 */ // #include "bsp_uart_fifo.h" #include "bsp_led.h" -// #include "bsp_timer.h" +#include "bsp_timer.h" // #include "bsp_key.h" // #include "bsp_uart.h" diff --git a/Code/bsp/inc/bsp_led.h b/Code/bsp/inc/bsp_led.h index dbb0772..705596d 100644 --- a/Code/bsp/inc/bsp_led.h +++ b/Code/bsp/inc/bsp_led.h @@ -14,6 +14,10 @@ #ifndef __BSP_LED_H #define __BSP_LED_H +#define LED1 (1u) +#define LED2 (2u) + + /* 供外部调用的函数声明 */ void bsp_InitLed(void); void bsp_LedOn(uint8_t _no); diff --git a/Code/bsp/inc/bsp_timer-old.h b/Code/bsp/inc/bsp_timer-old.h new file mode 100644 index 0000000..70d4272 --- /dev/null +++ b/Code/bsp/inc/bsp_timer-old.h @@ -0,0 +1,6 @@ +#ifndef __BSP_TIMER_H__ +#define __BSP_TIMER_H__ + +void bsp_timer_init(void); + +#endif diff --git a/Code/bsp/inc/bsp_timer.h b/Code/bsp/inc/bsp_timer.h index 70d4272..3db46c9 100644 --- a/Code/bsp/inc/bsp_timer.h +++ b/Code/bsp/inc/bsp_timer.h @@ -1,6 +1,55 @@ -#ifndef __BSP_TIMER_H__ -#define __BSP_TIMER_H__ +/* +********************************************************************************************************* +* +* 模块名称 : 定时器模块 +* 文件名称 : bsp_timer.h +* 版 本 : V1.2 +* 说 明 : 头文件 +* +* Copyright (C), 2014-2015, 安富莱电子 www.armfly.com +* +********************************************************************************************************* +*/ -void bsp_timer_init(void); +#ifndef __BSP_TIMER_H +#define __BSP_TIMER_H + +#include "stdint.h" +/* + 在此定义若干个软件定时器全局变量 + 注意,必须增加__IO 即 volatile,因为这个变量在中断和主程序中同时被访问,有可能造成编译器错误优化。 +*/ +#define TMR_COUNT 1 /* 软件定时器的个数 (定时器ID范围 0 - 3) */ + +/* 定时器结构体,成员变量必须是 volatile, 否则C编译器优化时可能有问题 */ +typedef enum +{ + TMR_ONCE_MODE = 0, /* 一次工作模式 */ + TMR_AUTO_MODE = 1 /* 自动定时工作模式 */ +}TMR_MODE_E; + +/* 定时器结构体,成员变量必须是 volatile, 否则C编译器优化时可能有问题 */ +typedef struct +{ + volatile uint8_t Mode; /* 计数器模式,1次性 */ + volatile uint8_t Flag; /* 定时到达标志 */ + volatile uint32_t Count; /* 计数器 */ + volatile uint32_t PreLoad; /* 计数器预装值 */ +}SOFT_TMR; + +/* 提供给其他C文件调用的函数 */ +void bsp_InitTimer(void); +void bsp_DelayMS(uint32_t n); +void bsp_DelayUS(uint32_t n); +void bsp_StartTimer(uint8_t _id, uint32_t _period); +void bsp_StartAutoTimer(uint8_t _id, uint32_t _period); +void bsp_StopTimer(uint8_t _id); +uint8_t bsp_CheckTimer(uint8_t _id); +int32_t bsp_GetRunTime(void); + +void bsp_InitHardTimer(void); +void bsp_StartHardTimer(uint8_t _CC, uint32_t _uiTimeOut, void * _pCallBack); #endif + +/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/ diff --git a/Code/bsp/src/bsp_led.c b/Code/bsp/src/bsp_led.c index 17e59ec..8fc3275 100644 --- a/Code/bsp/src/bsp_led.c +++ b/Code/bsp/src/bsp_led.c @@ -33,10 +33,14 @@ LED3 : LED4 : */ - #define RCC_ALL_LED RCC_APB2Periph_GPIOC /* 按键口对应的RCC时钟 */ + /* 按键口对应的RCC时钟 */ + #define RCC_ALL_LED (RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOB) #define GPIO_PORT_LED1 GPIOC #define GPIO_PIN_LED1 GPIO_Pin_13 + + #define GPIO_PORT_LED2 GPIOB + #define GPIO_PIN_LED2 GPIO_Pin_9 // #define GPIO_PORT_LED2 GPIOE // #define GPIO_PIN_LED2 GPIO_Pin_3 @@ -94,25 +98,19 @@ void bsp_InitLed(void) 由于将GPIO设置为输出时,GPIO输出寄存器的值缺省是0,因此会驱动LED点亮. 这是我不希望的,因此在改变GPIO为输出前,先关闭LED指示灯 */ - bsp_LedOff(1); - // bsp_LedOff(2); - // bsp_LedOff(3); - // bsp_LedOff(4); + bsp_LedOff(LED1); + bsp_LedOff(LED2); + /* LED 1*/ GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /* 设为 输出推挽模式 */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* IO口最大速度 */ - GPIO_Init(GPIO_PORT_LED1, &GPIO_InitStructure); - - // GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED2; - // GPIO_Init(GPIO_PORT_LED2, &GPIO_InitStructure); - - // GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED3; - // GPIO_Init(GPIO_PORT_LED3, &GPIO_InitStructure); - - // GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED4; - // GPIO_Init(GPIO_PORT_LED4, &GPIO_InitStructure); + /* LED 2*/ + GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED2; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /* 设为 输出推挽模式 */ + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* IO口最大速度 */ + GPIO_Init(GPIO_PORT_LED2, &GPIO_InitStructure); } /* @@ -127,7 +125,7 @@ void bsp_LedOn(uint8_t _no) { _no--; - if (_no == 0) + if (_no == (LED1-1)) { // STM32F103C8T6开发板 1是亮,0是灭 // GPIO_PORT_LED1->BRR = GPIO_PIN_LED1; @@ -159,7 +157,7 @@ void bsp_LedOff(uint8_t _no) { _no--; - if (_no == 0) + if (_no == (LED1-1)) { // STM32F103C8T6开发板 1是亮,0是灭 GPIO_PORT_LED1->BRR = GPIO_PIN_LED1; @@ -188,14 +186,14 @@ void bsp_LedOff(uint8_t _no) */ void bsp_LedToggle(uint8_t _no) { - if (_no == 1) + if (_no == (LED1)) { GPIO_PORT_LED1->ODR ^= GPIO_PIN_LED1; } - // else if (_no == 2) - // { - // GPIO_PORT_LED2->ODR ^= GPIO_PIN_LED2; - // } + else if (_no == 2) + { + GPIO_PORT_LED2->ODR ^= GPIO_PIN_LED2; + } // else if (_no == 3) // { // GPIO_PORT_LED3->ODR ^= GPIO_PIN_LED3; @@ -216,7 +214,7 @@ void bsp_LedToggle(uint8_t _no) */ uint8_t bsp_IsLedOn(uint8_t _no) { - if (_no == 1) + if (_no == (LED1-1)) { if ((GPIO_PORT_LED1->ODR & GPIO_PIN_LED1) == 0) { diff --git a/Code/bsp/src/bsp_timer-old.c b/Code/bsp/src/bsp_timer-old.c new file mode 100644 index 0000000..3fec371 --- /dev/null +++ b/Code/bsp/src/bsp_timer-old.c @@ -0,0 +1,55 @@ +#include "bsp_timer.h" +#include "stm32f10x_tim.h" +#include "stm32f10x_rcc.h" +#include "misc.h" +#include "stm32f10x.h" + +#define BSP_TIMER_USER_SYSTICK_TYPE (TIM2) +#define BSP_TIMER_USER_SYSTICK_RCC (RCC_APB1Periph_TIM2) +#define BSP_TIMER_USER_SYSTICK_IRQN (TIM2_IRQn) +#define BSP_TINER_USER_SYSTICK_PRESCALER (72 - 1) +#define BSP_TINER_USER_SYSTICK_PERIOD (1000u) + + + +static void bsp_timer_2_init(void) +{ + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* 1. 初始化时钟 */ + RCC_APB1PeriphClockCmd(BSP_TIMER_USER_SYSTICK_RCC, ENABLE); + /* 2. 初始化定时器参数,设置自动重装值,分频系数,计数方式等 */ + TIM_TimeBaseStructure.TIM_Period = BSP_TINER_USER_SYSTICK_PERIOD; + TIM_TimeBaseStructure.TIM_Prescaler =BSP_TINER_USER_SYSTICK_PRESCALER; + TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseInit(BSP_TIMER_USER_SYSTICK_TYPE, &TIM_TimeBaseStructure); + /* 3. 设置 TIM3_DIER 允许更新中断 */ + TIM_ITConfig(BSP_TIMER_USER_SYSTICK_TYPE, TIM_IT_Update, ENABLE); + /* 4. TIM3 中断优先级设置。 */ + + NVIC_InitStructure.NVIC_IRQChannel = BSP_TIMER_USER_SYSTICK_IRQN; //TIM3 中断 + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级 0 级 + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级 3 级 + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道被使能 + NVIC_Init(&NVIC_InitStructure); //初始化 NVIC 寄存器 + /* 5. 使能定时器2 */ + TIM_Cmd(BSP_TIMER_USER_SYSTICK_TYPE, ENABLE); +} + +// /* 6. 编写中断服务函数 */ +// void bsp_timer_user_systick_isr_process(void) //TIM3 中断 +// { +// if (TIM_GetITStatus(BSP_TIMER_USER_SYSTICK_TYPE, TIM_IT_Update) != RESET) +// { +// // 硬件置了1,需要软件来清0 +// TIM_ClearITPendingBit(BSP_TIMER_USER_SYSTICK_TYPE, TIM_IT_Update); +// /* add your code here */ + +// } +// } +void bsp_timer_init(void) +{ + bsp_timer_2_init(); +} diff --git a/Code/bsp/src/bsp_timer.c b/Code/bsp/src/bsp_timer.c index 3fec371..34585e8 100644 --- a/Code/bsp/src/bsp_timer.c +++ b/Code/bsp/src/bsp_timer.c @@ -1,55 +1,583 @@ -#include "bsp_timer.h" -#include "stm32f10x_tim.h" -#include "stm32f10x_rcc.h" -#include "misc.h" -#include "stm32f10x.h" +/* +********************************************************************************************************* +* +* 模块名称 : 定时器模块 +* 文件名称 : bsp_timer.c +* 版 本 : V1.2 +* 说 明 : 配置systick定时器作为系统滴答定时器。缺省定时周期为1ms。 +* +* 实现了多个软件定时器供主程序使用(精度1ms), 可以通过修改 TMR_COUNT 增减定时器个数 +* 实现了ms级别延迟函数(精度1ms) 和us级延迟函数 +* 实现了系统运行时间函数(1ms单位) +* +* 修改记录 : +* 版本号 日期 作者 说明 +* V1.0 2013-02-01 armfly 正式发布 +* V1.1 2013-06-21 armfly 增加us级延迟函数 bsp_DelayUS +* V1.2 2014-09-07 armfly 增加TIM4 硬件定时中断,实现us级别定时.20us - 16秒 +* +* Copyright (C), 2014-2015, 安富莱电子 www.armfly.com +* +********************************************************************************************************* +*/ -#define BSP_TIMER_USER_SYSTICK_TYPE (TIM2) -#define BSP_TIMER_USER_SYSTICK_RCC (RCC_APB1Periph_TIM2) -#define BSP_TIMER_USER_SYSTICK_IRQN (TIM2_IRQn) -#define BSP_TINER_USER_SYSTICK_PRESCALER (72 - 1) -#define BSP_TINER_USER_SYSTICK_PERIOD (1000u) +#include "bsp.h" -static void bsp_timer_2_init(void) +#define TIM_HARD TIM2 +#define TIM_HARD_IRQn TIM2_IRQn +#define TIM_HARD_RCC RCC_APB1Periph_TIM2 + +/* 这2个全局变量转用于 bsp_DelayMS() 函数 */ +static volatile uint32_t s_uiDelayCount = 0; +static volatile uint8_t s_ucTimeOutFlag = 0; + +/* 定于软件定时器结构体变量 */ +static SOFT_TMR s_tTmr[TMR_COUNT]; + +/* + 全局运行时间,单位1ms + 最长可以表示 24.85天,如果你的产品连续运行时间超过这个数,则必须考虑溢出问题 +*/ +__IO int32_t g_iRunTime = 0; + +static void bsp_SoftTimerDec(SOFT_TMR *_tmr); + +/* 保存 TIM定时中断到后执行的回调函数指针 */ +static void (*s_TIM_CallBack1)(void); +static void (*s_TIM_CallBack2)(void); +static void (*s_TIM_CallBack3)(void); +static void (*s_TIM_CallBack4)(void); + +/* +********************************************************************************************************* +* 函 数 名: bsp_InitTimer +* 功能说明: 配置systick中断,并初始化软件定时器变量 +* 形 参: 无 +* 返 回 值: 无 +********************************************************************************************************* +*/ +void bsp_InitTimer(void) { - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; - NVIC_InitTypeDef NVIC_InitStructure; + uint8_t i; - /* 1. 初始化时钟 */ - RCC_APB1PeriphClockCmd(BSP_TIMER_USER_SYSTICK_RCC, ENABLE); - /* 2. 初始化定时器参数,设置自动重装值,分频系数,计数方式等 */ - TIM_TimeBaseStructure.TIM_Period = BSP_TINER_USER_SYSTICK_PERIOD; - TIM_TimeBaseStructure.TIM_Prescaler =BSP_TINER_USER_SYSTICK_PRESCALER; - TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; - TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; - TIM_TimeBaseInit(BSP_TIMER_USER_SYSTICK_TYPE, &TIM_TimeBaseStructure); - /* 3. 设置 TIM3_DIER 允许更新中断 */ - TIM_ITConfig(BSP_TIMER_USER_SYSTICK_TYPE, TIM_IT_Update, ENABLE); - /* 4. TIM3 中断优先级设置。 */ - - NVIC_InitStructure.NVIC_IRQChannel = BSP_TIMER_USER_SYSTICK_IRQN; //TIM3 中断 - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级 0 级 - NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级 3 级 - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道被使能 - NVIC_Init(&NVIC_InitStructure); //初始化 NVIC 寄存器 - /* 5. 使能定时器2 */ - TIM_Cmd(BSP_TIMER_USER_SYSTICK_TYPE, ENABLE); + /* 清零所有的软件定时器 */ + for (i = 0; i < TMR_COUNT; i++) + { + s_tTmr[i].Count = 0; + s_tTmr[i].PreLoad = 0; + s_tTmr[i].Flag = 0; + s_tTmr[i].Mode = TMR_ONCE_MODE; /* 缺省是1次性工作模式 */ + } + + /* + 配置systic中断周期为1ms,并启动systick中断。 + + SystemCoreClock 是固件中定义的系统内核时钟,对于STM32F4XX,一般为 168MHz + + SysTick_Config() 函数的形参表示内核时钟多少个周期后触发一次Systick定时中断. + -- SystemCoreClock / 1000 表示定时频率为 1000Hz, 也就是定时周期为 1ms + -- SystemCoreClock / 500 表示定时频率为 500Hz, 也就是定时周期为 2ms + -- SystemCoreClock / 2000 表示定时频率为 2000Hz, 也就是定时周期为 500us + + 对于常规的应用,我们一般取定时周期1ms。对于低速CPU或者低功耗应用,可以设置定时周期为 10ms + */ + SysTick_Config(SystemCoreClock / 1000); + + bsp_InitHardTimer(); /* 开启硬件定时中断 */ } -// /* 6. 编写中断服务函数 */ -// void bsp_timer_user_systick_isr_process(void) //TIM3 中断 -// { -// if (TIM_GetITStatus(BSP_TIMER_USER_SYSTICK_TYPE, TIM_IT_Update) != RESET) -// { -// // 硬件置了1,需要软件来清0 -// TIM_ClearITPendingBit(BSP_TIMER_USER_SYSTICK_TYPE, TIM_IT_Update); -// /* add your code here */ - -// } -// } -void bsp_timer_init(void) +/* +********************************************************************************************************* +* 函 数 名: SysTick_ISR +* 功能说明: SysTick中断服务程序,每隔1ms进入1次 +* 形 参: 无 +* 返 回 值: 无 +********************************************************************************************************* +*/ +extern void bsp_RunPer1ms(void); +extern void bsp_RunPer10ms(void); +void SysTick_ISR(void) { - bsp_timer_2_init(); + static uint8_t s_count = 0; + uint8_t i; + + /* 每隔1ms进来1次 (仅用于 bsp_DelayMS) */ + if (s_uiDelayCount > 0) + { + if (--s_uiDelayCount == 0) + { + s_ucTimeOutFlag = 1; + } + } + + /* 每隔1ms,对软件定时器的计数器进行减一操作 */ + for (i = 0; i < TMR_COUNT; i++) + { + bsp_SoftTimerDec(&s_tTmr[i]); + } + + /* 全局运行时间每1ms增1 */ + g_iRunTime++; + if (g_iRunTime == 0x7FFFFFFF) /* 这个变量是 int32_t 类型,最大数为 0x7FFFFFFF */ + { + g_iRunTime = 0; + } + + bsp_RunPer1ms(); /* 每隔1ms调用一次此函数,此函数在 bsp.c */ + + if (++s_count >= 10) + { + s_count = 0; + + bsp_RunPer10ms(); /* 每隔10ms调用一次此函数,此函数在 bsp.c */ + } } + +/* +********************************************************************************************************* +* 函 数 名: bsp_SoftTimerDec +* 功能说明: 每隔1ms对所有定时器变量减1。必须被SysTick_ISR周期性调用。 +* 形 参: _tmr : 定时器变量指针 +* 返 回 值: 无 +********************************************************************************************************* +*/ +static void bsp_SoftTimerDec(SOFT_TMR *_tmr) +{ + if (_tmr->Count > 0) + { + /* 如果定时器变量减到1则设置定时器到达标志 */ + if (--_tmr->Count == 0) + { + _tmr->Flag = 1; + + /* 如果是自动模式,则自动重装计数器 */ + if(_tmr->Mode == TMR_AUTO_MODE) + { + _tmr->Count = _tmr->PreLoad; + } + } + } +} + +/* +********************************************************************************************************* +* 函 数 名: bsp_DelayMS +* 功能说明: ms级延迟,延迟精度为正负1ms +* 形 参: n : 延迟长度,单位1 ms。 n 应大于2 +* 返 回 值: 无 +********************************************************************************************************* +*/ +void bsp_DelayMS(uint32_t n) +{ + if (n == 0) + { + return; + } + else if (n == 1) + { + n = 2; + } + + DISABLE_INT(); /* 关中断 */ + + s_uiDelayCount = n; + s_ucTimeOutFlag = 0; + + ENABLE_INT(); /* 开中断 */ + + while (1) + { + bsp_Idle(); /* CPU空闲执行的操作, 见 bsp.c 和 bsp.h 文件 */ + + /* + 等待延迟时间到 + 注意:编译器认为 s_ucTimeOutFlag = 0,所以可能优化错误,因此 s_ucTimeOutFlag 变量必须申明为 volatile + */ + if (s_ucTimeOutFlag == 1) + { + break; + } + } +} + +/* +********************************************************************************************************* +* 函 数 名: bsp_DelayUS +* 功能说明: us级延迟。 必须在systick定时器启动后才能调用此函数。 +* 形 参: n : 延迟长度,单位1 us +* 返 回 值: 无 +********************************************************************************************************* +*/ +void bsp_DelayUS(uint32_t n) +{ + uint32_t ticks; + uint32_t told; + uint32_t tnow; + uint32_t tcnt = 0; + uint32_t reload; + + reload = SysTick->LOAD; + ticks = n * (SystemCoreClock / 1000000); /* 需要的节拍数 */ + + tcnt = 0; + told = SysTick->VAL; /* 刚进入时的计数器值 */ + + while (1) + { + tnow = SysTick->VAL; + if (tnow != told) + { + /* SYSTICK是一个递减的计数器 */ + if (tnow < told) + { + tcnt += told - tnow; + } + /* 重新装载递减 */ + else + { + tcnt += reload - tnow + told; + } + told = tnow; + + /* 时间超过/等于要延迟的时间,则退出 */ + if (tcnt >= ticks) + { + break; + } + } + } +} + + +/* +********************************************************************************************************* +* 函 数 名: bsp_StartTimer +* 功能说明: 启动一个定时器,并设置定时周期。 +* 形 参: _id : 定时器ID,值域【0,TMR_COUNT-1】。用户必须自行维护定时器ID,以避免定时器ID冲突。 +* _period : 定时周期,单位1ms +* 返 回 值: 无 +********************************************************************************************************* +*/ +void bsp_StartTimer(uint8_t _id, uint32_t _period) +{ + if (_id >= TMR_COUNT) + { + /* 打印出错的源代码文件名、函数名称 */ + BSP_Printf("Error: file %s, function %s()\r\n", __FILE__, __FUNCTION__); + while(1); /* 参数异常,死机等待看门狗复位 */ + } + + DISABLE_INT(); /* 关中断 */ + + s_tTmr[_id].Count = _period; /* 实时计数器初值 */ + s_tTmr[_id].PreLoad = _period; /* 计数器自动重装值,仅自动模式起作用 */ + s_tTmr[_id].Flag = 0; /* 定时时间到标志 */ + s_tTmr[_id].Mode = TMR_ONCE_MODE; /* 1次性工作模式 */ + + ENABLE_INT(); /* 开中断 */ +} + +/* +********************************************************************************************************* +* 函 数 名: bsp_StartAutoTimer +* 功能说明: 启动一个自动定时器,并设置定时周期。 +* 形 参: _id : 定时器ID,值域【0,TMR_COUNT-1】。用户必须自行维护定时器ID,以避免定时器ID冲突。 +* _period : 定时周期,单位10ms +* 返 回 值: 无 +********************************************************************************************************* +*/ +void bsp_StartAutoTimer(uint8_t _id, uint32_t _period) +{ + if (_id >= TMR_COUNT) + { + /* 打印出错的源代码文件名、函数名称 */ + BSP_Printf("Error: file %s, function %s()\r\n", __FILE__, __FUNCTION__); + while(1); /* 参数异常,死机等待看门狗复位 */ + } + + DISABLE_INT(); /* 关中断 */ + + s_tTmr[_id].Count = _period; /* 实时计数器初值 */ + s_tTmr[_id].PreLoad = _period; /* 计数器自动重装值,仅自动模式起作用 */ + s_tTmr[_id].Flag = 0; /* 定时时间到标志 */ + s_tTmr[_id].Mode = TMR_AUTO_MODE; /* 自动工作模式 */ + + ENABLE_INT(); /* 开中断 */ +} + +/* +********************************************************************************************************* +* 函 数 名: bsp_StopTimer +* 功能说明: 停止一个定时器 +* 形 参: _id : 定时器ID,值域【0,TMR_COUNT-1】。用户必须自行维护定时器ID,以避免定时器ID冲突。 +* 返 回 值: 无 +********************************************************************************************************* +*/ +void bsp_StopTimer(uint8_t _id) +{ + if (_id >= TMR_COUNT) + { + /* 打印出错的源代码文件名、函数名称 */ + BSP_Printf("Error: file %s, function %s()\r\n", __FILE__, __FUNCTION__); + while(1); /* 参数异常,死机等待看门狗复位 */ + } + + DISABLE_INT(); /* 关中断 */ + + s_tTmr[_id].Count = 0; /* 实时计数器初值 */ + s_tTmr[_id].Flag = 0; /* 定时时间到标志 */ + s_tTmr[_id].Mode = TMR_ONCE_MODE; /* 自动工作模式 */ + + ENABLE_INT(); /* 开中断 */ +} + +/* +********************************************************************************************************* +* 函 数 名: bsp_CheckTimer +* 功能说明: 检测定时器是否超时 +* 形 参: _id : 定时器ID,值域【0,TMR_COUNT-1】。用户必须自行维护定时器ID,以避免定时器ID冲突。 +* _period : 定时周期,单位1ms +* 返 回 值: 返回 0 表示定时未到, 1表示定时到 +********************************************************************************************************* +*/ +uint8_t bsp_CheckTimer(uint8_t _id) +{ + if (_id >= TMR_COUNT) + { + return 0; + } + + if (s_tTmr[_id].Flag == 1) + { + s_tTmr[_id].Flag = 0; + return 1; + } + else + { + return 0; + } +} + +/* +********************************************************************************************************* +* 函 数 名: bsp_GetRunTime +* 功能说明: 获取CPU运行时间,单位1ms。最长可以表示 24.85天,如果你的产品连续运行时间超过这个数,则必须考虑溢出问题 +* 形 参: 无 +* 返 回 值: CPU运行时间,单位1ms +********************************************************************************************************* +*/ +int32_t bsp_GetRunTime(void) +{ + int32_t runtime; + + DISABLE_INT(); /* 关中断 */ + + runtime = g_iRunTime; /* 这个变量在Systick中断中被改写,因此需要关中断进行保护 */ + + ENABLE_INT(); /* 开中断 */ + + return runtime; +} + +/* +********************************************************************************************************* +* 函 数 名: SysTick_Handler +* 功能说明: 系统嘀嗒定时器中断服务程序。启动文件中引用了该函数。 +* 形 参: 无 +* 返 回 值: 无 +********************************************************************************************************* +*/ +void SysTick_Handler(void) +{ + SysTick_ISR(); +} + +/* +********************************************************************************************************* +* 函 数 名: bsp_InitHardTimer +* 功能说明: 配置 TIM2,用于us级别硬件定时。TIM4将自由运行,永不停止. +* TIM4可以用TIM2 - TIM5 之间的TIM, 这些TIM有4个通道, 挂在 APB1 上,输入时钟=SystemCoreClock / 2 +* 形 参: 无 +* 返 回 值: 无 +********************************************************************************************************* +*/ +void bsp_InitHardTimer(void) +{ + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + NVIC_InitTypeDef NVIC_InitStructure; /* 中断结构体在 misc.h 中定义 */ + /* 1. 使能TIM时钟 */ + RCC_APB1PeriphClockCmd(TIM_HARD_RCC, ENABLE); + /* 2. 使用内部时钟 */ + TIM_InternalClockConfig(TIM_HARD); + /* 3. 配置时基单元 */ + /*----------------------------------------------------------------------- + system_stm32f10x.c 文件中 void SetSysClock(void) 函数对时钟的配置如下: + + HCLK = SYSCLK / 1 (AHBPeriph) + PCLK2 = HCLK / 1 (APB2Periph) + PCLK1 = HCLK / 2 (APB1Periph) + + 因为APB1 prescaler != 1, 所以 APB1上的TIMxCLK = PCLK1 x 2 = SystemCoreClock; + 因为APB2 prescaler = 1, 所以 APB2上的TIMxCLK = PCLK2 = SystemCoreClock; + + APB1 定时器有 TIM2, TIM3 ,TIM4, TIM5, TIM6, TIM7, TIM12, TIM13,TIM14 + APB2 定时器有 TIM1, TIM8 ,TIM9, TIM10, TIM11 + + 注意TIM_Prescaler 和 TIM_Period 不要溢出(0-65535) + + ----------------------------------------------------------------------- */ + // 时基单元定义 此处定义1ms的 + TIM_TimeBaseStructure.TIM_Period = (10u - 1); // 周期 ARR自动重装器的值 + TIM_TimeBaseStructure.TIM_Prescaler = (SystemCoreClock / 10000) - 1 ; // PSC预分频器的值 + TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 计数器模式 + TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; // 重复计数器的值,高级定时器才有 + TIM_TimeBaseInit(TIM_HARD, &TIM_TimeBaseStructure); + /* 4. 开启更新中断到NVIC的通路 */ + TIM_ITConfig(TIM_HARD, TIM_IT_Update, ENABLE); + // 启用影子寄存器 + TIM_ARRPreloadConfig(TIM_HARD, ENABLE); + /* 5. 配置TIM定时中断 (Update) */ + NVIC_InitStructure.NVIC_IRQChannel = TIM_HARD_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4; /* 比串口优先级低 */ + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + /* 6. TIMx enable counter */ + TIM_Cmd(TIM_HARD, ENABLE); +} + +/* +********************************************************************************************************* +* 函 数 名: bsp_StartHardTimer +* 功能说明: 使用TIM2-5做单次定时器使用, 定时时间到后执行回调函数。可以同时启动4个定时器,互不干扰。 +* 定时精度正负10us (主要耗费在调用本函数的执行时间,函数内部进行了补偿减小误差) +* TIM2和TIM5 是32位定时器。定时范围很大 +* TIM3和TIM4 是16位定时器。 +* 形 参: _CC : 捕获通道几,1,2,3, 4 +* _uiTimeOut : 超时时间, 单位 1us. 对于16位定时器,最大 65.5ms; 对于32位定时器,最大 4294秒 +* _pCallBack : 定时时间到后,被执行的函数 +* 返 回 值: 无 +********************************************************************************************************* +*/ +void bsp_StartHardTimer(uint8_t _CC, uint32_t _uiTimeOut, void * _pCallBack) +{ + uint32_t cnt_now; + uint32_t cnt_tar; + + /* + 执行下面这个语句,时长 = 18us (通过逻辑分析仪测量IO翻转) + bsp_StartTimer2(3, 500, (void *)test1); + */ + if (_uiTimeOut < 5) + { + ; + } + else + { + _uiTimeOut -= 5; + } + + cnt_now = TIM_GetCounter(TIM_HARD); /* 读取当前的计数器值 */ + cnt_tar = cnt_now + _uiTimeOut; /* 计算捕获的计数器值 */ + if (_CC == 1) + { + s_TIM_CallBack1 = (void (*)(void))_pCallBack; + + TIM_SetCompare1(TIM_HARD, cnt_tar); /* 设置捕获比较计数器CC1 */ + TIM_ClearITPendingBit(TIM_HARD, TIM_IT_CC1); + TIM_ITConfig(TIM_HARD, TIM_IT_CC1, ENABLE); /* 使能CC1中断 */ + + } + else if (_CC == 2) + { + s_TIM_CallBack2 = (void (*)(void))_pCallBack; + + TIM_SetCompare2(TIM_HARD, cnt_tar); /* 设置捕获比较计数器CC2 */ + TIM_ClearITPendingBit(TIM_HARD, TIM_IT_CC2); + TIM_ITConfig(TIM_HARD, TIM_IT_CC2, ENABLE); /* 使能CC2中断 */ + } + else if (_CC == 3) + { + s_TIM_CallBack3 = (void (*)(void))_pCallBack; + + TIM_SetCompare3(TIM_HARD, cnt_tar); /* 设置捕获比较计数器CC3 */ + TIM_ClearITPendingBit(TIM_HARD, TIM_IT_CC3); + TIM_ITConfig(TIM_HARD, TIM_IT_CC3, ENABLE); /* 使能CC3中断 */ + } + else if (_CC == 4) + { + s_TIM_CallBack4 = (void (*)(void))_pCallBack; + + TIM_SetCompare4(TIM_HARD, cnt_tar); /* 设置捕获比较计数器CC4 */ + TIM_ClearITPendingBit(TIM_HARD, TIM_IT_CC4); + TIM_ITConfig(TIM_HARD, TIM_IT_CC4, ENABLE); /* 使能CC4中断 */ + } + else + { + return; + } +} + +/* +********************************************************************************************************* +* 函 数 名: TIMx_IRQHandler +* 功能说明: TIM 中断服务程序 +* 形 参:无 +* 返 回 值: 无 +********************************************************************************************************* +*/ +//void TIM2_IRQHandler(void) +//void TIM3_IRQHandler(void) +//void TIM4_IRQHandler(void) +void TIM2_IRQHandler(void) +{ + + if(RESET != TIM_GetITStatus(TIM_HARD, TIM_IT_Update)) + { + TIM_ClearITPendingBit(TIM_HARD, TIM_IT_Update); + /* add your code here. */ + // bsp_LedToggle(LED2); + } + + + if (TIM_GetITStatus(TIM_HARD, TIM_IT_CC1)) + { + TIM_ClearITPendingBit(TIM_HARD, TIM_IT_CC1); + TIM_ITConfig(TIM_HARD, TIM_IT_CC1, DISABLE); /* 禁能CC1中断 */ + + /* 先关闭中断,再执行回调函数。因为回调函数可能需要重启定时器 */ + s_TIM_CallBack1(); + } + + if (TIM_GetITStatus(TIM_HARD, TIM_IT_CC2)) + { + TIM_ClearITPendingBit(TIM_HARD, TIM_IT_CC2); + TIM_ITConfig(TIM_HARD, TIM_IT_CC2, DISABLE); /* 禁能CC2中断 */ + + /* 先关闭中断,再执行回调函数。因为回调函数可能需要重启定时器 */ + s_TIM_CallBack2(); + } + + if (TIM_GetITStatus(TIM_HARD, TIM_IT_CC3)) + { + TIM_ClearITPendingBit(TIM_HARD, TIM_IT_CC3); + TIM_ITConfig(TIM_HARD, TIM_IT_CC3, DISABLE); /* 禁能CC3中断 */ + + /* 先关闭中断,再执行回调函数。因为回调函数可能需要重启定时器 */ + s_TIM_CallBack3(); + } + + if (TIM_GetITStatus(TIM_HARD, TIM_IT_CC4)) + { + TIM_ClearITPendingBit(TIM_HARD, TIM_IT_CC4); + TIM_ITConfig(TIM_HARD, TIM_IT_CC4, DISABLE); /* 禁能CC4中断 */ + + /* 先关闭中断,再执行回调函数。因为回调函数可能需要重启定时器 */ + s_TIM_CallBack4(); + } +} + +/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/ diff --git a/Code/isr/interrupt_handler.c b/Code/isr/interrupt_handler.c index 71b7add..d0c0ecd 100644 --- a/Code/isr/interrupt_handler.c +++ b/Code/isr/interrupt_handler.c @@ -7,16 +7,16 @@ #include "mw_soft_timer.h" #include "mw_printf.h" -void TIM2_IRQHandler(void) // TIM3 interrupt -{ - if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) - { - // Ӳ1Ҫ0 - TIM_ClearITPendingBit(TIM2, TIM_IT_Update); - /* add your code here */ - mw_soft_timer_user_systick_update(); - } -} +// void TIM2_IRQHandler(void) // TIM3 interrupt +// { +// if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) +// { +// // Ӳ������1����Ҫ��������0 +// TIM_ClearITPendingBit(TIM2, TIM_IT_Update); +// /* add your code here */ +// mw_soft_timer_user_systick_update(); +// } +// } void USART1_IRQHandler(void) { diff --git a/Code/library/STM32F10x_StdPeriph_Lib_V3.6.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h b/Code/library/STM32F10x_StdPeriph_Lib_V3.6.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h index 697c5a9..f7c341a 100644 --- a/Code/library/STM32F10x_StdPeriph_Lib_V3.6.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h +++ b/Code/library/STM32F10x_StdPeriph_Lib_V3.6.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h @@ -49,6 +49,8 @@ #ifndef __STM32F10x_H #define __STM32F10x_H + + #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ diff --git a/Code/library/stdint.h b/Code/library/stdint.h new file mode 100644 index 0000000..3e27047 --- /dev/null +++ b/Code/library/stdint.h @@ -0,0 +1,311 @@ +/* Copyright (C) ARM Ltd., 1999,2014 */ +/* All rights reserved */ + +/* + * RCS $Revision$ + * Checkin $Date$ + * Revising $Author: agrant $ + */ + +#ifndef __stdint_h +#define __stdint_h +#define __ARMCLIB_VERSION 5060044 + + #ifdef __INT64_TYPE__ + /* armclang predefines '__INT64_TYPE__' and '__INT64_C_SUFFIX__' */ + #define __INT64 __INT64_TYPE__ + #else + /* armcc has builtin '__int64' which can be used in --strict mode */ + #define __INT64 __int64 + #define __INT64_C_SUFFIX__ ll + #endif + #define __PASTE2(x, y) x ## y + #define __PASTE(x, y) __PASTE2(x, y) + #define __INT64_C(x) __ESCAPE__(__PASTE(x, __INT64_C_SUFFIX__)) + #define __UINT64_C(x) __ESCAPE__(__PASTE(x ## u, __INT64_C_SUFFIX__)) + #if defined(__clang__) || (defined(__ARMCC_VERSION) && !defined(__STRICT_ANSI__)) + /* armclang and non-strict armcc allow 'long long' in system headers */ + #define __LONGLONG long long + #else + /* strict armcc has '__int64' */ + #define __LONGLONG __int64 + #endif + + #ifndef __STDINT_DECLS + #define __STDINT_DECLS + + #undef __CLIBNS + + #ifdef __cplusplus + namespace std { + #define __CLIBNS std:: + extern "C" { + #else + #define __CLIBNS + #endif /* __cplusplus */ + + +/* + * 'signed' is redundant below, except for 'signed char' and if + * the typedef is used to declare a bitfield. + */ + + /* 7.18.1.1 */ + + /* exact-width signed integer types */ +typedef signed char int8_t; +typedef signed short int int16_t; +typedef signed int int32_t; +typedef signed __INT64 int64_t; + + /* exact-width unsigned integer types */ +typedef unsigned char uint8_t; +typedef unsigned short int uint16_t; +typedef unsigned int uint32_t; +typedef unsigned __INT64 uint64_t; + + /* 7.18.1.2 */ + + /* smallest type of at least n bits */ + /* minimum-width signed integer types */ +typedef signed char int_least8_t; +typedef signed short int int_least16_t; +typedef signed int int_least32_t; +typedef signed __INT64 int_least64_t; + + /* minimum-width unsigned integer types */ +typedef unsigned char uint_least8_t; +typedef unsigned short int uint_least16_t; +typedef unsigned int uint_least32_t; +typedef unsigned __INT64 uint_least64_t; + + /* 7.18.1.3 */ + + /* fastest minimum-width signed integer types */ +typedef signed int int_fast8_t; +typedef signed int int_fast16_t; +typedef signed int int_fast32_t; +typedef signed __INT64 int_fast64_t; + + /* fastest minimum-width unsigned integer types */ +typedef unsigned int uint_fast8_t; +typedef unsigned int uint_fast16_t; +typedef unsigned int uint_fast32_t; +typedef unsigned __INT64 uint_fast64_t; + + /* 7.18.1.4 integer types capable of holding object pointers */ +#if __sizeof_ptr == 8 +typedef signed __INT64 intptr_t; +typedef unsigned __INT64 uintptr_t; +#else +typedef signed int intptr_t; +typedef unsigned int uintptr_t; +#endif + + /* 7.18.1.5 greatest-width integer types */ +typedef signed __LONGLONG intmax_t; +typedef unsigned __LONGLONG uintmax_t; + + +#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) + + /* 7.18.2.1 */ + + /* minimum values of exact-width signed integer types */ +#define INT8_MIN -128 +#define INT16_MIN -32768 +#define INT32_MIN (~0x7fffffff) /* -2147483648 is unsigned */ +#define INT64_MIN __INT64_C(~0x7fffffffffffffff) /* -9223372036854775808 is unsigned */ + + /* maximum values of exact-width signed integer types */ +#define INT8_MAX 127 +#define INT16_MAX 32767 +#define INT32_MAX 2147483647 +#define INT64_MAX __INT64_C(9223372036854775807) + + /* maximum values of exact-width unsigned integer types */ +#define UINT8_MAX 255 +#define UINT16_MAX 65535 +#define UINT32_MAX 4294967295u +#define UINT64_MAX __UINT64_C(18446744073709551615) + + /* 7.18.2.2 */ + + /* minimum values of minimum-width signed integer types */ +#define INT_LEAST8_MIN -128 +#define INT_LEAST16_MIN -32768 +#define INT_LEAST32_MIN (~0x7fffffff) +#define INT_LEAST64_MIN __INT64_C(~0x7fffffffffffffff) + + /* maximum values of minimum-width signed integer types */ +#define INT_LEAST8_MAX 127 +#define INT_LEAST16_MAX 32767 +#define INT_LEAST32_MAX 2147483647 +#define INT_LEAST64_MAX __INT64_C(9223372036854775807) + + /* maximum values of minimum-width unsigned integer types */ +#define UINT_LEAST8_MAX 255 +#define UINT_LEAST16_MAX 65535 +#define UINT_LEAST32_MAX 4294967295u +#define UINT_LEAST64_MAX __UINT64_C(18446744073709551615) + + /* 7.18.2.3 */ + + /* minimum values of fastest minimum-width signed integer types */ +#define INT_FAST8_MIN (~0x7fffffff) +#define INT_FAST16_MIN (~0x7fffffff) +#define INT_FAST32_MIN (~0x7fffffff) +#define INT_FAST64_MIN __INT64_C(~0x7fffffffffffffff) + + /* maximum values of fastest minimum-width signed integer types */ +#define INT_FAST8_MAX 2147483647 +#define INT_FAST16_MAX 2147483647 +#define INT_FAST32_MAX 2147483647 +#define INT_FAST64_MAX __INT64_C(9223372036854775807) + + /* maximum values of fastest minimum-width unsigned integer types */ +#define UINT_FAST8_MAX 4294967295u +#define UINT_FAST16_MAX 4294967295u +#define UINT_FAST32_MAX 4294967295u +#define UINT_FAST64_MAX __UINT64_C(18446744073709551615) + + /* 7.18.2.4 */ + + /* minimum value of pointer-holding signed integer type */ +#if __sizeof_ptr == 8 +#define INTPTR_MIN INT64_MIN +#else +#define INTPTR_MIN INT32_MIN +#endif + + /* maximum value of pointer-holding signed integer type */ +#if __sizeof_ptr == 8 +#define INTPTR_MAX INT64_MAX +#else +#define INTPTR_MAX INT32_MAX +#endif + + /* maximum value of pointer-holding unsigned integer type */ +#if __sizeof_ptr == 8 +#define UINTPTR_MAX UINT64_MAX +#else +#define UINTPTR_MAX UINT32_MAX +#endif + + /* 7.18.2.5 */ + + /* minimum value of greatest-width signed integer type */ +#define INTMAX_MIN __ESCAPE__(~0x7fffffffffffffffll) + + /* maximum value of greatest-width signed integer type */ +#define INTMAX_MAX __ESCAPE__(9223372036854775807ll) + + /* maximum value of greatest-width unsigned integer type */ +#define UINTMAX_MAX __ESCAPE__(18446744073709551615ull) + + /* 7.18.3 */ + + /* limits of ptrdiff_t */ +#if __sizeof_ptr == 8 +#define PTRDIFF_MIN INT64_MIN +#define PTRDIFF_MAX INT64_MAX +#else +#define PTRDIFF_MIN INT32_MIN +#define PTRDIFF_MAX INT32_MAX +#endif + + /* limits of sig_atomic_t */ +#define SIG_ATOMIC_MIN (~0x7fffffff) +#define SIG_ATOMIC_MAX 2147483647 + + /* limit of size_t */ +#if __sizeof_ptr == 8 +#define SIZE_MAX UINT64_MAX +#else +#define SIZE_MAX UINT32_MAX +#endif + + /* limits of wchar_t */ + /* NB we have to undef and redef because they're defined in both + * stdint.h and wchar.h */ +#undef WCHAR_MIN +#undef WCHAR_MAX + +#if defined(__WCHAR32) || (defined(__ARM_SIZEOF_WCHAR_T) && __ARM_SIZEOF_WCHAR_T == 4) + #define WCHAR_MIN 0 + #define WCHAR_MAX 0xffffffffU +#else + #define WCHAR_MIN 0 + #define WCHAR_MAX 65535 +#endif + + /* limits of wint_t */ +#define WINT_MIN (~0x7fffffff) +#define WINT_MAX 2147483647 + +#endif /* __STDC_LIMIT_MACROS */ + +#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) + + /* 7.18.4.1 macros for minimum-width integer constants */ +#define INT8_C(x) (x) +#define INT16_C(x) (x) +#define INT32_C(x) (x) +#define INT64_C(x) __INT64_C(x) + +#define UINT8_C(x) (x ## u) +#define UINT16_C(x) (x ## u) +#define UINT32_C(x) (x ## u) +#define UINT64_C(x) __UINT64_C(x) + + /* 7.18.4.2 macros for greatest-width integer constants */ +#define INTMAX_C(x) __ESCAPE__(x ## ll) +#define UINTMAX_C(x) __ESCAPE__(x ## ull) + +#endif /* __STDC_CONSTANT_MACROS */ + + #ifdef __cplusplus + } /* extern "C" */ + } /* namespace std */ + #endif /* __cplusplus */ + #endif /* __STDINT_DECLS */ + + #ifdef __cplusplus + #ifndef __STDINT_NO_EXPORTS + using ::std::int8_t; + using ::std::int16_t; + using ::std::int32_t; + using ::std::int64_t; + using ::std::uint8_t; + using ::std::uint16_t; + using ::std::uint32_t; + using ::std::uint64_t; + using ::std::int_least8_t; + using ::std::int_least16_t; + using ::std::int_least32_t; + using ::std::int_least64_t; + using ::std::uint_least8_t; + using ::std::uint_least16_t; + using ::std::uint_least32_t; + using ::std::uint_least64_t; + using ::std::int_fast8_t; + using ::std::int_fast16_t; + using ::std::int_fast32_t; + using ::std::int_fast64_t; + using ::std::uint_fast8_t; + using ::std::uint_fast16_t; + using ::std::uint_fast32_t; + using ::std::uint_fast64_t; + using ::std::intptr_t; + using ::std::uintptr_t; + using ::std::intmax_t; + using ::std::uintmax_t; + #endif + #endif /* __cplusplus */ + +#undef __INT64 +#undef __LONGLONG + +#endif /* __stdint_h */ + +/* end of stdint.h */ diff --git a/Project/Output/TianyunV1.hex b/Project/Output/TianyunV1.hex index 60b186e..210cfcf 100644 --- a/Project/Output/TianyunV1.hex +++ b/Project/Output/TianyunV1.hex @@ -1,8 +1,8 @@ :020000040800F2 -:10000000F006002089010008910100089301000812 +:1000000028070020890100089101000893010008D9 :100010009501000897010008990100080000000000 :100020000000000000000000000000009B0100082C -:100030009D010008000000009F010008A1010008C8 +:100030009D010008000000009F010008190600084B :10004000A3010008A3010008A3010008A301000800 :10005000A3010008A3010008A3010008A3010008F0 :10006000A3010008A3010008A3010008A3010008E0 @@ -10,31 +10,31 @@ :10008000A3010008A3010008A3010008A3010008C0 :10009000A3010008A3010008A3010008A3010008B0 :1000A000A3010008A3010008A3010008A3010008A0 -:1000B00079060008A3010008A3010008A3010008B5 +:1000B00005070008A3010008A3010008A301000828 :1000C000A3010008A3010008A3010008A301000880 -:1000D000A301000889070008A3010008A301000884 +:1000D000A3010008D1080008A3010008A30100083B :1000E000A3010008A3010008A301000800F002F822 :1000F00000F03AF80AA090E8000C82448344AAF188 :100100000107DA4501D100F02FF8AFF2090EBAE885 :100110000F0013F0010F18BFFB1A43F0010318473B -:10012000DC0C0000FC0C0000103A24BF78C878C139 +:10012000B80E0000D80E0000103A24BF78C878C17D :10013000FAD8520724BF30C830C144BF04680C60ED :10014000704700000023002400250026103A28BF35 :1001500078C1FBD8520728BF30C148BF0B60704739 :100160001FB51FBD10B510BD00F033F81146FFF7E5 -:10017000F7FF00F035FD00F051F803B4FFF7F2FF90 -:1001800003BC00F052FC00000948804709480047C2 +:10017000F7FF00F02DFE00F051F803B4FFF7F2FF97 +:1001800003BC00F0F6FC000009488047094800471E :10019000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE737 :1001A000FEE7FEE704480549054A064B7047000094 -:1001B00019060008ED000008F0000020F0060020FD -:1001C000F0020020F002002070477047704770472F +:1001B000A5060008ED0000082801002028070020FF +:1001C00028030020280300207047704770477047BD :1001D0007047754600F02CF8AE4605006946534658 :1001E00020F00700854618B020B5FFF7DBFFBDE81B :1001F00020404FF000064FF000074FF000084FF08E :10020000000B21F00701AC46ACE8C009ACE8C0091E :10021000ACE8C009ACE8C0098D46704710B504468B :10022000AFF300802046BDE81040FFF7A6BF0000F6 -:1002300000487047900000202DE9F041024600255B +:1002300000487047C80000202DE9F0410246002523 :100240000026002000230024002791F803C00CF0B2 :100250000F0591F803C00CF0100CBCF1000F03D097 :1002600091F802C04CEA050591F800C0BCF1000FFE @@ -81,7 +81,7 @@ :1004F0000A4D6D6805F46051C90A0B4D6B5C456887 :10050000DD40C560054D6D6805F44041890B074D20 :100510006B5CC568B5FBF3F5056130BD00100240AA -:1005200000127A0000093D00100000202000002089 +:1005200000127A0000093D003C0000204C00002031 :1005300010B500F001F810BD0CB50020019000903E :100540003348006840F480303149086000BF3048CB :10055000006800F4003000900198401C0190009861 @@ -96,136 +96,169 @@ :1005E00000F000700028F9D00948406820F00300AE :1005F000074948600846406840F00200486000BF74 :100600000348406800F00C000828F9D10CBD000038 -:10061000001002400020024010B51348006840F06E -:1006200001001149086008464068104908400E4919 -:100630004860084600680E4908400B4908600846B3 -:10064000006820F4802008600846406820F4FE001E -:1006500048604FF41F008860FFF76AFF4FF00060AA -:100660000449086010BD0000001002400000FFF8BF -:10067000FFFFF6FE08ED00E010B50121880700F04D -:1006800017F828B10121880700F003F800F04AFBB1 -:1006900010BDCA430282704721B1028842F00102B4 -:1006A000028004E002884FF6FE731A400280704711 -:1006B00030B50246002000230024158A05EA010314 -:1006C000958905EA010413B10CB1012000E0002076 -:1006D00030BD1AB183890B43838102E083898B4348 -:1006E00083817047002202881D4B98420ED01D4B1B -:1006F00098420BD0B0F1804F08D01B4B984205D0E8 -:100700001A4B984202D01A4B984204D14FF68F737D -:100710001A404B881A43174B984207D0164B984201 -:1007200004D04FF6FF431A40CB881A4302808B88CF -:1007300083850B8803850A4B98420BD0094B98425E -:1007400008D00E4B984205D00D4B984202D00D4B6D -:10075000984201D10B7A03860123838270470000FF -:10076000002C01400034014000040040000800401B -:10077000000C004000100040001400400040014008 -:10078000004401400048014010B540F226610E4887 -:1007900000F086F820B140F226610B4800F016F810 -:1007A00040F22551084800F07BF858B140F225513D -:1007B000054800F00BF8044800F02EF9C4B22046BA -:1007C00000F08AFA10BD00000038014010B5002288 -:1007D000002340F66A14A14200D100BF0A1201248E -:1007E0009440A3B2DC43048010BD21B1828942F45D -:1007F0000052828104E082894DF6FF731A408281A3 -:100800007047000010B504462048844209D10121F8 -:100810008803FFF713FE00214FF48040FFF70EFE20 -:1008200032E01B48844209D101214804FFF7E6FD6C -:1008300000214FF40030FFF7E1FD25E01548844228 -:1008400009D101218804FFF7D9FD00214FF4802050 -:10085000FFF7D4FD18E01048844209D10121C804F3 -:10086000FFF7CCFD00214FF40020FFF7C7FD0BE0A0 -:100870000A48844208D101210805FFF7BFFD002185 -:100880004FF48010FFF7BAFD10BD000000380140A2 -:100890000044004000480040004C00400050004030 -:1008A00070B50246002400230025002040F66A1699 -:1008B000B14200D100BFC1F3421501F01F03012670 -:1008C00006FA03F3012D02D19689334006E0022D8A -:1008D00002D1168A334001E0968A33400C12012679 -:1008E00006FA04F41688344013B10CB1012000E07C -:1008F000002070BDF0B5034600240026002500202E -:1009000040F66A17B94200D100BF1846C1F342143D -:1009100001F01F06012707FA06F5012C01D10C3062 -:1009200004E0022C01D1103000E014301AB1076845 -:100930002F43076002E00768AF430760F0BD000087 -:100940002DE9F04786B005460E460024A24600BFBA -:10095000A1460027B08900B100BF2F462C8A4CF673 -:10096000FF700440F08804432C82AC894EF6F310EB -:100970000440B08831890843718908430443AC813D -:10098000AC8A4FF6FF400440B0890443AC8201A812 -:10099000FFF764FD1F48874202D1DDF810A001E097 -:1009A000DDF80CA0A88900F4004040B10AEBCA00B1 -:1009B00000EB0A1031684900B0FBF1F807E00AEBE0 -:1009C000CA0000EB0A1031688900B0FBF1F864201E -:1009D000B8FBF0F004012009642101FB1089A8890B -:1009E00000F4004040B1322000EBC900B0FBF1F050 -:1009F00000F00700044308E0322000EB09106421F6 -:100A0000B0FBF1F000F00F0004432C8106B0BDE80C -:100A1000F08700000038014001468888C0F30800D4 -:100A20007047C1F3080282807047014600BF7047DB -:100A3000002001490870704700000020014800783C -:100A4000704700000000002010B5FFF7F7FF0028F6 -:100A500004DDFFF7EDFF0020184908701748007803 -:100A600010B1012826D112E000F0B4F81449096849 -:100A7000401AB0F5FA7F09D900F0ACF810490860C7 -:100A8000012000F057F801200C49087013E000F035 -:100A9000A1F80B490968401AB0F5FA7F09D900F0AE -:100AA00099F807490860012000F04EF8002003493A -:100AB000087000E000BF00BF10BD00000100002072 -:100AC0000400002010B54FF4A060FFF77DFC00F09B -:100AD00017F84FF0FF300021002807DA0A07140E3C -:100AE000054A00F00F031B1FD45403E00A07130E3E -:100AF000024A135400BF10BD18ED00E000E400E00E -:100B000008B501211020FFF789FC012000F012F840 -:100B10004FF40050ADF8000010208DF803000320C2 -:100B20008DF8020069460248FFF786FB08BD000009 -:100B300000100140411EC8B218B94FF40051014ADB -:100B40005161704700100140411EC8B228B90349E5 -:100B5000096941F40051014A1161704700100140D8 -:100B600010B500F032F8FFF7ADFF10BD1FB5012141 -:100B70000846FFF733FC4FF47A70ADF808004720C1 -:100B8000ADF804000020ADF80A00ADF8060001A998 -:100B90004FF08040FFF7A6FD012211469007FFF7B6 -:100BA00098FD1C208DF8000000208DF80100032026 -:100BB0008DF8020001208DF803006846FFF7CCFB9A -:100BC00001218807FFF768FD1FBD10B5FFF7CEFFB5 -:100BD00010BD000001480068704700000C000020B4 -:100BE0004FF4A060FFF7F0FBFFF7BAFF00F004F846 -:100BF00001E0FFF729FFFCE710B500F04FF800F027 -:100C000001F810BD002007490870074848610748EF -:100C10004860074903488160064901610649C1608F -:100C20007047000068000020D50B0008450D000843 -:100C3000350D0008010D0008110D000808B501214F -:100C40001020FFF7EBFB4FF40050ADF80000102030 -:100C50008DF8030003208DF8020069460448FFF771 -:100C6000EBFA4FF400510248FFF773FB08BD000098 -:100C70000010014010B54FF400510248FFF767FB28 -:100C800010BD00000010014010B54FF400510248A3 -:100C9000FFF75FFB10BD00000010014010B5002001 -:100CA0000949087009484860094888600948C860CF -:100CB000002406E0044901EB041148688047601CE9 -:100CC000C4B2012CF6DB10BD240000203D0C00084E -:100CD000890C0008750C00080749084A12888854D6 -:100CE00006490988491C3222B1FBF2F302FB1311B9 -:100CF000024A1180704700003400002008000020E4 -:100D000010B50248FFF788FEC0B210BD00380140A0 -:100D100010B5044621460248FFF783FE002010BDAF -:100D20000038014002480068401C014908607047D3 -:100D30000C00002010B50248FFF764FD002010BD34 -:100D40000038014000B587B001218803FFF766FB3A -:100D500001210420FFF762FB18208DF81B004FF4DF -:100D60000070ADF8180003208DF81A0006A921487C -:100D7000FFF762FA48208DF81B004FF48060ADF851 -:100D8000180003208DF81A0006A91A48FFF754FA34 -:100D90004FF4165002900020ADF814000C20ADF86E -:100DA00012000020ADF81000ADF80E00ADF80C00F8 -:100DB00002A91148FFF7C4FD012240F225510E4857 -:100DC000FFF798FD4FF4A060FFF7FEFA25208DF89D -:100DD000040001208DF807008DF805008DF806004D -:100DE00001A8FFF7B9FA01210348FFF7FEFC002034 -:100DF00007B000BD00080140003801401C0E00088B -:100E0000000000202400000028010008400E000817 -:100E100024000020CC06000044010008000000006F -:100E200000000000000000000000000000000000C2 -:100E3000010203040102030406070809020406086C +:10061000001002400020024010B500F001F810BDAB +:1006200010B51B48006840B119480068401E1849C1 +:10063000086010B9012017490870002408E004EB95 +:100640004401154A02EB810000F0A8FB601CC4B213 +:10065000012CF4DB11480068401C10490860084672 +:1006600000686FF00041884202D100200B49086009 +:1006700000F080FB0A480078401CC0B208490870AE +:100680000A2803DB0020087000F072FB10BD000098 +:10069000080000200C000020940000201000002022 +:1006A0002400002010B51348006840F001001149F3 +:1006B000086008464068104908400E4948600846EE +:1006C00000680E4908400B4908600846006820F49D +:1006D000802008600846406820F4FE0048604FF41F +:1006E0001F008860FFF724FF4FF000600449086096 +:1006F00010BD0000001002400000FFF8FFFFF6FEF2 +:1007000008ED00E010B50121880700F06EF818B17F +:100710000121880700F05AF80221480700F065F827 +:1007200058B10221480700F051F800220221480781 +:1007300000F06CF81B48006880470421080700F0AF +:1007400054F858B10421080700F040F800220421B1 +:10075000080700F05BF81448006880470821C806C5 +:1007600000F043F858B10821C80600F02FF8002225 +:100770000821C80600F04AF80C480068804710219C +:10078000880600F032F858B11021880600F01EF8F3 +:1007900000221021880600F039F8054800688047DB +:1007A00010BD000014000020180000201C000020D4 +:1007B0002000002021B1028842F08002028004E083 +:1007C00002884FF67F731A4002807047CA43028244 +:1007D000704721B1028842F00102028004E00288E1 +:1007E0004FF6FE731A400280704730B50246002073 +:1007F00000230024158A05EA0103958905EA01040E +:1008000013B10CB1012000E0002030BD1AB1838982 +:100810000B43838102E083898B4383817047018985 +:100820004FF6F872114001817047000000220288E3 +:100830001D4B98420ED01D4B98420BD0B0F1804F0B +:1008400008D01B4B984205D01A4B984202D01A4B45 +:10085000984204D14FF68F731A404B881A43174BB6 +:10086000984207D0164B984204D04FF6FF431A40E7 +:10087000CB881A4302808B8883850B8803850A4BBB +:1008800098420BD0094B984208D00E4B984205D0A5 +:100890000D4B984202D00D4B984201D10B7A038642 +:1008A0000123838270470000002C01400034014086 +:1008B0000004004000080040000C00400010004010 +:1008C0000014004000400140004401400048014045 +:1008D00010B540F226610E4800F086F820B140F2D3 +:1008E00026610B4800F016F840F22551084800F048 +:1008F0007BF858B140F22551054800F00BF8044848 +:1009000000F02EF9C4B2204600F0DCFA10BD000061 +:100910000038014010B50022002340F66A14A142BD +:1009200000D100BF0A1201249440A3B2DC4304802A +:1009300010BD21B1828942F40052828104E0828993 +:100940004DF6FF731A4082817047000010B50446CF +:100950002048844209D101218803FFF76FFD00215F +:100960004FF48040FFF76AFD32E01B48844209D112 +:1009700001214804FFF742FD00214FF40030FFF74A +:100980003DFD25E01548844209D101218804FFF787 +:1009900035FD00214FF48020FFF730FD18E01048AE +:1009A000844209D10121C804FFF728FD00214FF43A +:1009B0000020FFF723FD0BE00A48844208D1012103 +:1009C0000805FFF71BFD00214FF48010FFF716FD0F +:1009D00010BD0000003801400044004000480040C5 +:1009E000004C00400050004070B502460024002337 +:1009F0000025002040F66A16B14200D100BFC1F3C5 +:100A0000421501F01F03012606FA03F3012D02D15E +:100A10009689334006E0022D02D1168A334001E068 +:100A2000968A33400C12012606FA04F416883440E4 +:100A300013B10CB1012000E0002070BDF0B50346F9 +:100A4000002400260025002040F66A17B94200D194 +:100A500000BF1846C1F3421401F01F06012707FA30 +:100A600006F5012C01D10C3004E0022C01D110302C +:100A700000E014301AB107682F43076002E00768EE +:100A8000AF430760F0BD00002DE9F04786B0054692 +:100A90000E460024A24600BFA1460027B08900B13F +:100AA00000BF2F462C8A4CF6FF700440F0880443A8 +:100AB0002C82AC894EF6F3100440B088318908438B +:100AC000718908430443AC81AC8A4FF6FF4004406F +:100AD000B0890443AC8201A8FFF7C0FC1F488742DD +:100AE00002D1DDF810A001E0DDF80CA0A88900F427 +:100AF000004040B10AEBCA0000EB0A10316849001F +:100B0000B0FBF1F807E00AEBCA0000EB0A1031680D +:100B10008900B0FBF1F86420B8FBF0F00401200973 +:100B2000642101FB1089A88900F4004040B1322003 +:100B300000EBC900B0FBF1F000F00700044308E04F +:100B4000322000EB09106421B0FBF1F000F00F003F +:100B500004432C8106B0BDE8F08700000038014056 +:100B600001468888C0F308007047C1F308028280FC +:100B70007047014600BF704710B54FF4A060FFF703 +:100B800023FC00F059F84FF0FF300021002807DA6D +:100B90000A07140E054A00F00F031B1FD45403E08C +:100BA0000A07130E024A135400BF10BD18ED00E0EF +:100BB00000E400E01FB501210846FFF70FFC4FF0ED +:100BC0008040FFF72CFE0920ADF8080019480068A6 +:100BD00042F21071B0FBF1F0401E80B2ADF804009B +:100BE0000020ADF80A00ADF806008DF80C0001A950 +:100BF0004FF08040FFF71AFE012211469007FFF7E1 +:100C000005FE01218807FFF7D5FD1C208DF80000A7 +:100C100004208DF8010000208DF8020001208DF8DD +:100C200003006846FFF798FB01218807FFF7D1FD15 +:100C30001FBD00002800002008B501211820FFF783 +:100C4000EDFB012000F074F8022000F071F84FF481 +:100C50000050ADF8000010208DF8030003208DF83F +:100C6000020069460848FFF7E7FA4FF40070ADF854 +:100C7000000010208DF8030003208DF80200694663 +:100C80000248FFF7D9FA08BD00100140000C0140EE +:100C900070B5002416E0002004EB4401204A02EB6A +:100CA0008101486004EB440102EB8101886004EBA0 +:100CB000440102EB8101487004EB440102F8210079 +:100CC000601CC4B2012CE6DB164800684FF47A724F +:100CD000B0FBF2F1B1F1807F00D31DE021F07F4045 +:100CE000401E4FF0E022506150170F22002807DA13 +:100CF00013071E0E0C4B00F00F052D1F5E5503E071 +:100D000013071D0E094B1D5400BF00204FF0E022B9 +:100D100090610720106100BFFFF74CFF70BD00001D +:100D2000940000202800002018ED00E000E400E01E +:100D3000411EC8B218B94FF40051014A51617047C1 +:100D400000100140012806D10749C96881F400510B +:100D5000054AD16007E0022805D10449096881F4F9 +:100D60000071024A11607047001001400C0C0140F4 +:100D70007047000010B508480078FA2805DA0648E0 +:100D80000078401C0449087005E000200249087002 +:100D90000120FFF7D7FF10BD25000020416851B1A9 +:100DA0004168491E416031B9012141700178012932 +:100DB00001D181684160704710B5FFF769FFFFF707 +:100DC000DBFE10BD014800687047000004000020F1 +:100DD0004FF4A060FFF7F8FAFFF7EEFF00F002F81B +:100DE00000BFFEE710B500F04FF800F001F810BDAD +:100DF00000200749087007484861074848600749CC +:100E000003488160064901610649C16070470000DE +:100E1000A0000020C50D0008210F0008110F0008D8 +:100E2000ED0E0008FD0E000808B501211020FFF7A7 +:100E3000F5FA4FF40050ADF8000010208DF80300D3 +:100E400003208DF8020069460448FFF7F5F94FF4D6 +:100E500000510248FFF77DFA08BD00000010014074 +:100E600010B54FF400510248FFF771FA10BD0000B1 +:100E70000010014010B54FF400510248FFF769FA25 +:100E800010BD00000010014010B500200949087095 +:100E900009484860094888600948C860002406E09D +:100EA000044901EB041148688047601CC4B2012C5E +:100EB000F6DB10BD50000020290E0008750E00085A +:100EC000610E00080749084A1288885406490988B3 +:100ED000491C3222B1FBF2F302FB1311024A1180CA +:100EE00070470000600000200000002010B502489C +:100EF000FFF736FEC0B210BD0038014010B5044601 +:100F000021460248FFF731FE002010BD00380140A5 +:100F100010B50248FFF71AFD002010BD003801404F +:100F200000B587B001218803FFF778FA012104207A +:100F3000FFF774FA18208DF81B004FF40070ADF81D +:100F4000180003208DF81A0006A92148FFF774F94C +:100F500048208DF81B004FF48060ADF81800032086 +:100F60008DF81A0006A91A48FFF766F94FF41650D3 +:100F700002900020ADF814000C20ADF81200002003 +:100F8000ADF81000ADF80E00ADF80C0002A9114844 +:100F9000FFF77AFD012240F225510E48FFF74EFD82 +:100FA0004FF4A060FFF710FA25208DF8040001200F +:100FB0008DF807008DF805008DF8060001A8FFF7F1 +:100FC000CBF901210348FFF7B4FC002007B000BDB6 +:100FD0000008014000380140F80F00080000002020 +:100FE00050000000280100084810000850000020B0 +:100FF000D8060000440100080000000000000000C6 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000A24A04000000000000000001020304C6 +:10103000060708090000000001020304010203047E +:08104000060708090204060876 :04000005080000ED02 :00000001FF diff --git a/Project/Output/TianyunV1.map b/Project/Output/TianyunV1.map index 9ee1984..2531658 100644 --- a/Project/Output/TianyunV1.map +++ b/Project/Output/TianyunV1.map @@ -4,23 +4,14 @@ Component: ARM Compiler 5.06 update 7 (build 960) Tool: armlink [4d3601] Section Cross References - main.o(i.bsp_init) refers to bsp_timer.o(i.bsp_timer_init) for bsp_timer_init + main.o(i.bsp_init) refers to bsp_timer.o(i.bsp_InitTimer) for bsp_InitTimer main.o(i.bsp_init) refers to bsp.o(i.bsp_Init) for bsp_Init main.o(i.main) refers to misc.o(i.NVIC_PriorityGroupConfig) for NVIC_PriorityGroupConfig main.o(i.main) refers to main.o(i.bsp_init) for bsp_init main.o(i.main) refers to main.o(i.middleware_init) for middleware_init - main.o(i.main) refers to app_led.o(i.app_led_marquee) for app_led_marquee main.o(i.middleware_init) refers to mw_led.o(i.mw_led_drv_init) for mw_led_drv_init main.o(i.middleware_init) refers to mw_bluetooth.o(i.mw_bluetooth_drv_init) for mw_bluetooth_drv_init - app_led.o(i.app_led_change_style_disable) refers to app_led.o(.data) for led_style_change_flag - app_led.o(i.app_led_change_style_enable) refers to app_led.o(.data) for led_style_change_flag - app_led.o(i.app_led_get_change_style_value) refers to app_led.o(.data) for led_style_change_flag - app_led.o(i.app_led_marquee) refers to app_led.o(i.app_led_get_change_style_value) for app_led_get_change_style_value - app_led.o(i.app_led_marquee) refers to app_led.o(i.app_led_change_style_disable) for app_led_change_style_disable - app_led.o(i.app_led_marquee) refers to mw_soft_timer.o(i.get_systick_ms) for get_systick_ms - app_led.o(i.app_led_marquee) refers to bsp_led.o(i.bsp_LedOff) for bsp_LedOff - app_led.o(i.app_led_marquee) refers to bsp_led.o(i.bsp_LedOn) for bsp_LedOn - app_led.o(i.app_led_marquee) refers to app_led.o(.data) for tmp_state + app_led.o(i.app_led_marquee) refers to bsp_led.o(i.bsp_LedToggle) for bsp_LedToggle mw_led.o(i.mw_get_led_obj) refers to mw_led.o(.bss) for led_drv_buf mw_led.o(i.mw_led0_init) refers to stm32f10x_rcc.o(i.RCC_APB2PeriphClockCmd) for RCC_APB2PeriphClockCmd mw_led.o(i.mw_led0_init) refers to stm32f10x_gpio.o(i.GPIO_Init) for GPIO_Init @@ -35,12 +26,63 @@ Section Cross References mw_printf.o(i.mw_printf_insert_data) refers to mw_printf.o(.data) for mw_printf_cache_head mw_soft_timer.o(i.get_systick_ms) refers to mw_soft_timer.o(.data) for systick_ms mw_soft_timer.o(i.mw_soft_timer_user_systick_update) refers to mw_soft_timer.o(.data) for systick_ms - bsp_timer.o(i.bsp_timer_2_init) refers to stm32f10x_rcc.o(i.RCC_APB1PeriphClockCmd) for RCC_APB1PeriphClockCmd - bsp_timer.o(i.bsp_timer_2_init) refers to stm32f10x_tim.o(i.TIM_TimeBaseInit) for TIM_TimeBaseInit - bsp_timer.o(i.bsp_timer_2_init) refers to stm32f10x_tim.o(i.TIM_ITConfig) for TIM_ITConfig - bsp_timer.o(i.bsp_timer_2_init) refers to misc.o(i.NVIC_Init) for NVIC_Init - bsp_timer.o(i.bsp_timer_2_init) refers to stm32f10x_tim.o(i.TIM_Cmd) for TIM_Cmd - bsp_timer.o(i.bsp_timer_init) refers to bsp_timer.o(i.bsp_timer_2_init) for bsp_timer_2_init + bsp_timer.o(i.SysTick_Handler) refers to bsp_timer.o(i.SysTick_ISR) for SysTick_ISR + bsp_timer.o(i.SysTick_ISR) refers to bsp_timer.o(i.bsp_SoftTimerDec) for bsp_SoftTimerDec + bsp_timer.o(i.SysTick_ISR) refers to bsp.o(i.bsp_RunPer1ms) for bsp_RunPer1ms + bsp_timer.o(i.SysTick_ISR) refers to bsp.o(i.bsp_RunPer10ms) for bsp_RunPer10ms + bsp_timer.o(i.SysTick_ISR) refers to bsp_timer.o(.data) for s_uiDelayCount + bsp_timer.o(i.SysTick_ISR) refers to bsp_timer.o(.bss) for s_tTmr + bsp_timer.o(i.TIM2_IRQHandler) refers to stm32f10x_tim.o(i.TIM_GetITStatus) for TIM_GetITStatus + bsp_timer.o(i.TIM2_IRQHandler) refers to stm32f10x_tim.o(i.TIM_ClearITPendingBit) for TIM_ClearITPendingBit + bsp_timer.o(i.TIM2_IRQHandler) refers to stm32f10x_tim.o(i.TIM_ITConfig) for TIM_ITConfig + bsp_timer.o(i.TIM2_IRQHandler) refers to bsp_timer.o(.data) for s_TIM_CallBack1 + bsp_timer.o(i.bsp_CheckTimer) refers to bsp_timer.o(.bss) for s_tTmr + bsp_timer.o(i.bsp_DelayMS) refers to bsp_timer.o(i.__set_PRIMASK) for __set_PRIMASK + bsp_timer.o(i.bsp_DelayMS) refers to bsp.o(i.bsp_Idle) for bsp_Idle + bsp_timer.o(i.bsp_DelayMS) refers to bsp_timer.o(.data) for s_uiDelayCount + bsp_timer.o(i.bsp_DelayUS) refers to system_stm32f10x.o(.data) for SystemCoreClock + bsp_timer.o(i.bsp_GetRunTime) refers to bsp_timer.o(i.__set_PRIMASK) for __set_PRIMASK + bsp_timer.o(i.bsp_GetRunTime) refers to bsp_timer.o(.data) for g_iRunTime + bsp_timer.o(i.bsp_InitHardTimer) refers to stm32f10x_rcc.o(i.RCC_APB1PeriphClockCmd) for RCC_APB1PeriphClockCmd + bsp_timer.o(i.bsp_InitHardTimer) refers to stm32f10x_tim.o(i.TIM_InternalClockConfig) for TIM_InternalClockConfig + bsp_timer.o(i.bsp_InitHardTimer) refers to stm32f10x_tim.o(i.TIM_TimeBaseInit) for TIM_TimeBaseInit + bsp_timer.o(i.bsp_InitHardTimer) refers to stm32f10x_tim.o(i.TIM_ITConfig) for TIM_ITConfig + bsp_timer.o(i.bsp_InitHardTimer) refers to stm32f10x_tim.o(i.TIM_ARRPreloadConfig) for TIM_ARRPreloadConfig + bsp_timer.o(i.bsp_InitHardTimer) refers to misc.o(i.NVIC_Init) for NVIC_Init + bsp_timer.o(i.bsp_InitHardTimer) refers to stm32f10x_tim.o(i.TIM_Cmd) for TIM_Cmd + bsp_timer.o(i.bsp_InitHardTimer) refers to system_stm32f10x.o(.data) for SystemCoreClock + bsp_timer.o(i.bsp_InitTimer) refers to bsp_timer.o(i.bsp_InitHardTimer) for bsp_InitHardTimer + bsp_timer.o(i.bsp_InitTimer) refers to bsp_timer.o(.bss) for s_tTmr + bsp_timer.o(i.bsp_InitTimer) refers to system_stm32f10x.o(.data) for SystemCoreClock + bsp_timer.o(i.bsp_StartAutoTimer) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + bsp_timer.o(i.bsp_StartAutoTimer) refers to _printf_s.o(.ARM.Collect$$_printf_percent$$00000014) for _printf_s + bsp_timer.o(i.bsp_StartAutoTimer) refers to _printf_str.o(.text) for _printf_str + bsp_timer.o(i.bsp_StartAutoTimer) refers to noretval__2printf.o(.text) for __2printf + bsp_timer.o(i.bsp_StartAutoTimer) refers to bsp_timer.o(i.__set_PRIMASK) for __set_PRIMASK + bsp_timer.o(i.bsp_StartAutoTimer) refers to bsp_timer.o(.constdata) for __FUNCTION__ + bsp_timer.o(i.bsp_StartAutoTimer) refers to bsp_timer.o(.bss) for s_tTmr + bsp_timer.o(i.bsp_StartHardTimer) refers to stm32f10x_tim.o(i.TIM_GetCounter) for TIM_GetCounter + bsp_timer.o(i.bsp_StartHardTimer) refers to stm32f10x_tim.o(i.TIM_SetCompare1) for TIM_SetCompare1 + bsp_timer.o(i.bsp_StartHardTimer) refers to stm32f10x_tim.o(i.TIM_ClearITPendingBit) for TIM_ClearITPendingBit + bsp_timer.o(i.bsp_StartHardTimer) refers to stm32f10x_tim.o(i.TIM_ITConfig) for TIM_ITConfig + bsp_timer.o(i.bsp_StartHardTimer) refers to stm32f10x_tim.o(i.TIM_SetCompare2) for TIM_SetCompare2 + bsp_timer.o(i.bsp_StartHardTimer) refers to stm32f10x_tim.o(i.TIM_SetCompare3) for TIM_SetCompare3 + bsp_timer.o(i.bsp_StartHardTimer) refers to stm32f10x_tim.o(i.TIM_SetCompare4) for TIM_SetCompare4 + bsp_timer.o(i.bsp_StartHardTimer) refers to bsp_timer.o(.data) for s_TIM_CallBack1 + bsp_timer.o(i.bsp_StartTimer) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + bsp_timer.o(i.bsp_StartTimer) refers to _printf_s.o(.ARM.Collect$$_printf_percent$$00000014) for _printf_s + bsp_timer.o(i.bsp_StartTimer) refers to _printf_str.o(.text) for _printf_str + bsp_timer.o(i.bsp_StartTimer) refers to noretval__2printf.o(.text) for __2printf + bsp_timer.o(i.bsp_StartTimer) refers to bsp_timer.o(i.__set_PRIMASK) for __set_PRIMASK + bsp_timer.o(i.bsp_StartTimer) refers to bsp_timer.o(.constdata) for __FUNCTION__ + bsp_timer.o(i.bsp_StartTimer) refers to bsp_timer.o(.bss) for s_tTmr + bsp_timer.o(i.bsp_StopTimer) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + bsp_timer.o(i.bsp_StopTimer) refers to _printf_s.o(.ARM.Collect$$_printf_percent$$00000014) for _printf_s + bsp_timer.o(i.bsp_StopTimer) refers to _printf_str.o(.text) for _printf_str + bsp_timer.o(i.bsp_StopTimer) refers to noretval__2printf.o(.text) for __2printf + bsp_timer.o(i.bsp_StopTimer) refers to bsp_timer.o(i.__set_PRIMASK) for __set_PRIMASK + bsp_timer.o(i.bsp_StopTimer) refers to bsp_timer.o(.constdata) for __FUNCTION__ + bsp_timer.o(i.bsp_StopTimer) refers to bsp_timer.o(.bss) for s_tTmr bsp_usart.o(i._sys_exit) refers (Special) to use_no_semi_2.o(.text) for __use_no_semihosting bsp_usart.o(i.bsp_usart_1_init) refers (Special) to use_no_semi_2.o(.text) for __use_no_semihosting bsp_usart.o(i.bsp_usart_1_init) refers to stm32f10x_rcc.o(i.RCC_APB2PeriphClockCmd) for RCC_APB2PeriphClockCmd @@ -71,7 +113,8 @@ Section Cross References startup_stm32f10x_md.o(RESET) refers (Special) to heapauxi.o(.text) for __use_two_region_memory startup_stm32f10x_md.o(RESET) refers to startup_stm32f10x_md.o(STACK) for __initial_sp startup_stm32f10x_md.o(RESET) refers to startup_stm32f10x_md.o(.text) for Reset_Handler - startup_stm32f10x_md.o(RESET) refers to interrupt_handler.o(i.TIM2_IRQHandler) for TIM2_IRQHandler + startup_stm32f10x_md.o(RESET) refers to bsp_timer.o(i.SysTick_Handler) for SysTick_Handler + startup_stm32f10x_md.o(RESET) refers to bsp_timer.o(i.TIM2_IRQHandler) for TIM2_IRQHandler startup_stm32f10x_md.o(RESET) refers to interrupt_handler.o(i.USART1_IRQHandler) for USART1_IRQHandler startup_stm32f10x_md.o(.text) refers (Special) to heapauxi.o(.text) for __use_two_region_memory startup_stm32f10x_md.o(.text) refers to system_stm32f10x.o(i.SystemInit) for SystemInit @@ -137,9 +180,6 @@ Section Cross References stm32f10x_usart.o(i.USART_DeInit) refers to stm32f10x_rcc.o(i.RCC_APB1PeriphResetCmd) for RCC_APB1PeriphResetCmd stm32f10x_usart.o(i.USART_Init) refers to stm32f10x_rcc.o(i.RCC_GetClocksFreq) for RCC_GetClocksFreq stm32f10x_wwdg.o(i.WWDG_DeInit) refers to stm32f10x_rcc.o(i.RCC_APB1PeriphResetCmd) for RCC_APB1PeriphResetCmd - interrupt_handler.o(i.TIM2_IRQHandler) refers to stm32f10x_tim.o(i.TIM_GetITStatus) for TIM_GetITStatus - interrupt_handler.o(i.TIM2_IRQHandler) refers to stm32f10x_tim.o(i.TIM_ClearITPendingBit) for TIM_ClearITPendingBit - interrupt_handler.o(i.TIM2_IRQHandler) refers to mw_soft_timer.o(i.mw_soft_timer_user_systick_update) for mw_soft_timer_user_systick_update interrupt_handler.o(i.USART1_IRQHandler) refers to stm32f10x_usart.o(i.USART_GetITStatus) for USART_GetITStatus interrupt_handler.o(i.USART1_IRQHandler) refers to stm32f10x_usart.o(i.USART_ClearITPendingBit) for USART_ClearITPendingBit interrupt_handler.o(i.USART1_IRQHandler) refers to stm32f10x_usart.o(i.USART_ReceiveData) for USART_ReceiveData @@ -163,6 +203,29 @@ Section Cross References mw_bluetooth.o(i.mw_usart_init) refers to misc.o(i.NVIC_Init) for NVIC_Init mw_bluetooth.o(i.mw_usart_init) refers to stm32f10x_usart.o(i.USART_Cmd) for USART_Cmd use_no_semi_2.o(.text) refers (Special) to use_no_semi.o(.text) for __use_no_semihosting_swi + __2printf.o(.text) refers to _printf_char_file.o(.text) for _printf_char_file + __2printf.o(.text) refers to bsp_usart.o(.data) for __stdout + noretval__2printf.o(.text) refers to _printf_char_file.o(.text) for _printf_char_file + noretval__2printf.o(.text) refers to bsp_usart.o(.data) for __stdout + __printf.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + _printf_str.o(.text) refers (Special) to _printf_char.o(.text) for _printf_cs_common + __printf_flags.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags.o(.text) refers to __printf_flags.o(.constdata) for .constdata + __printf_ss.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss.o(.text) refers to __printf_flags_ss.o(.constdata) for .constdata + __printf_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_flags_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_wp.o(.text) refers to __printf_flags_wp.o(.constdata) for .constdata + __printf_ss_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_ss_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_flags_ss_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss_wp.o(.text) refers to __printf_flags_ss_wp.o(.constdata) for .constdata + _printf_s.o(.ARM.Collect$$_printf_percent$$00000014) refers (Weak) to _printf_char.o(.text) for _printf_string + _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) refers (Special) to _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017) for _printf_percent_end __main.o(!!!main) refers to __rtentry.o(.ARM.Collect$$rtentry$$00000000) for __rt_entry __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) for __rt_entry_li __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) for __rt_entry_main @@ -170,6 +233,10 @@ Section Cross References __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$00000009) for __rt_entry_postsh_1 __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$00000002) for __rt_entry_presh_1 __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry4.o(.ARM.Collect$$rtentry$$00000004) for __rt_entry_sh + _printf_char.o(.text) refers (Weak) to _printf_str.o(.text) for _printf_str + _printf_char_file.o(.text) refers to _printf_char_common.o(.text) for _printf_char_common + _printf_char_file.o(.text) refers to ferror.o(.text) for ferror + _printf_char_file.o(.text) refers to bsp_usart.o(i.fputc) for fputc __rtentry2.o(.ARM.Collect$$rtentry$$00000008) refers to boardinit2.o(.text) for _platform_post_stackheap_init __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) refers to libinit.o(.ARM.Collect$$libinit$$00000000) for __rt_lib_init __rtentry2.o(.ARM.Collect$$rtentry$$0000000B) refers to boardinit3.o(.text) for _platform_post_lib_init @@ -182,6 +249,7 @@ Section Cross References __rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) for .ARM.Collect$$rtentry$$0000000D __rtentry4.o(.ARM.Collect$$rtentry$$00000004) refers to sys_stackheap_outer.o(.text) for __user_setup_stackheap __rtentry4.o(.ARM.exidx) refers to __rtentry4.o(.ARM.Collect$$rtentry$$00000004) for .ARM.Collect$$rtentry$$00000004 + _printf_char_common.o(.text) refers to __printf.o(.text) for __printf sys_stackheap_outer.o(.text) refers to libspace.o(.text) for __user_perproc_libspace sys_stackheap_outer.o(.text) refers to startup_stm32f10x_md.o(.text) for __user_initial_stackheap exit.o(.text) refers to rtexit.o(.ARM.Collect$$rtexit$$00000000) for __rt_exit @@ -266,21 +334,28 @@ Section Cross References Removing Unused input sections from the image. - Removing app_led.o(i.app_led_change_style_enable), (12 bytes). + Removing app_led.o(i.app_led_marquee), (10 bytes). Removing mw_led.o(i.mw_get_led_obj), (28 bytes). + Removing mw_soft_timer.o(i.mw_soft_timer_user_systick_update), (16 bytes). + Removing bsp_timer.o(i.__set_PRIMASK), (6 bytes). + Removing bsp_timer.o(i.bsp_CheckTimer), (52 bytes). + Removing bsp_timer.o(i.bsp_DelayMS), (68 bytes). + Removing bsp_timer.o(i.bsp_DelayUS), (84 bytes). + Removing bsp_timer.o(i.bsp_GetRunTime), (28 bytes). + Removing bsp_timer.o(i.bsp_StartAutoTimer), (152 bytes). + Removing bsp_timer.o(i.bsp_StartHardTimer), (200 bytes). + Removing bsp_timer.o(i.bsp_StartTimer), (148 bytes). + Removing bsp_timer.o(i.bsp_StopTimer), (136 bytes). + Removing bsp_timer.o(.constdata), (48 bytes). Removing bsp_usart.o(i.bsp_usart_1_init), (168 bytes). Removing bsp_usart.o(i.bsp_usart_send_data), (84 bytes). Removing bsp_usart.o(i.fputc), (36 bytes). Removing bsp_usart.o(.data), (4 bytes). Removing bsp.o(i.bsp_Idle), (2 bytes). - Removing bsp.o(i.bsp_RunPer10ms), (2 bytes). - Removing bsp.o(i.bsp_RunPer1ms), (40 bytes). - Removing bsp.o(.data), (1 bytes). Removing bsp_led.o(i.bsp_IsLedOn), (32 bytes). - Removing bsp_led.o(i.bsp_LedToggle), (24 bytes). + Removing bsp_led.o(i.bsp_LedOn), (24 bytes). Removing core_cm3.o(.emb_text), (32 bytes). Removing system_stm32f10x.o(i.SystemCoreClockUpdate), (164 bytes). - Removing system_stm32f10x.o(.data), (20 bytes). Removing misc.o(i.NVIC_SetVectorTable), (20 bytes). Removing misc.o(i.NVIC_SystemLPConfig), (32 bytes). Removing misc.o(i.SysTick_CLKSourceConfig), (40 bytes). @@ -619,7 +694,6 @@ Removing Unused input sections from the image. Removing stm32f10x_tim.o(i.TI2_Config), (152 bytes). Removing stm32f10x_tim.o(i.TI3_Config), (144 bytes). Removing stm32f10x_tim.o(i.TI4_Config), (152 bytes). - Removing stm32f10x_tim.o(i.TIM_ARRPreloadConfig), (24 bytes). Removing stm32f10x_tim.o(i.TIM_BDTRConfig), (32 bytes). Removing stm32f10x_tim.o(i.TIM_BDTRStructInit), (18 bytes). Removing stm32f10x_tim.o(i.TIM_CCPreloadControl), (24 bytes). @@ -654,7 +728,6 @@ Removing Unused input sections from the image. Removing stm32f10x_tim.o(i.TIM_ICInit), (172 bytes). Removing stm32f10x_tim.o(i.TIM_ICStructInit), (18 bytes). Removing stm32f10x_tim.o(i.TIM_ITRxExternalClockConfig), (24 bytes). - Removing stm32f10x_tim.o(i.TIM_InternalClockConfig), (12 bytes). Removing stm32f10x_tim.o(i.TIM_OC1FastConfig), (18 bytes). Removing stm32f10x_tim.o(i.TIM_OC1Init), (152 bytes). Removing stm32f10x_tim.o(i.TIM_OC1NPolarityConfig), (18 bytes). @@ -733,7 +806,7 @@ Removing Unused input sections from the image. Removing mw_bluetooth.o(i.mw_get_bluetooth_drv), (40 bytes). Removing hc06.o(i.hc06_init), (2 bytes). -466 unused section(s) (total 18257 bytes) removed from the image. +471 unused section(s) (total 19094 bytes) removed from the image. ============================================================================== @@ -743,31 +816,31 @@ Image Symbol Table Symbol Name Value Ov Type Size Object(Section) - ../clib/angel/boardlib.s 0x00000000 Number 0 boardshut.o ABSOLUTE - ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit3.o ABSOLUTE - ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit2.o ABSOLUTE ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit1.o ABSOLUTE - ../clib/angel/handlers.s 0x00000000 Number 0 __scatter_copy.o ABSOLUTE + ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit2.o ABSOLUTE + ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit3.o ABSOLUTE + ../clib/angel/boardlib.s 0x00000000 Number 0 boardshut.o ABSOLUTE ../clib/angel/handlers.s 0x00000000 Number 0 __scatter_zi.o ABSOLUTE - ../clib/angel/kernel.s 0x00000000 Number 0 rtexit.o ABSOLUTE - ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry.o ABSOLUTE + ../clib/angel/handlers.s 0x00000000 Number 0 __scatter_copy.o ABSOLUTE ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry2.o ABSOLUTE - ../clib/angel/kernel.s 0x00000000 Number 0 rtexit2.o ABSOLUTE ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry4.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 rtexit2.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 rtexit.o ABSOLUTE ../clib/angel/rt.s 0x00000000 Number 0 rt_raise.o ABSOLUTE ../clib/angel/scatter.s 0x00000000 Number 0 __scatter.o ABSOLUTE ../clib/angel/startup.s 0x00000000 Number 0 __main.o ABSOLUTE ../clib/angel/sys.s 0x00000000 Number 0 indicate_semi.o ABSOLUTE ../clib/angel/sys.s 0x00000000 Number 0 sys_stackheap_outer.o ABSOLUTE - ../clib/angel/sys.s 0x00000000 Number 0 use_no_semi_2.o ABSOLUTE ../clib/angel/sys.s 0x00000000 Number 0 libspace.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 use_no_semi_2.o ABSOLUTE ../clib/angel/sys.s 0x00000000 Number 0 use_no_semi.o ABSOLUTE - ../clib/angel/sysapp.c 0x00000000 Number 0 sys_command.o ABSOLUTE ../clib/angel/sysapp.c 0x00000000 Number 0 sys_wrch.o ABSOLUTE + ../clib/angel/sysapp.c 0x00000000 Number 0 sys_command.o ABSOLUTE ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE - ../clib/armsys.c 0x00000000 Number 0 _get_argv_nomalloc.o ABSOLUTE ../clib/armsys.c 0x00000000 Number 0 no_argv.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 _get_argv_nomalloc.o ABSOLUTE ../clib/heapalloc.c 0x00000000 Number 0 hrguard.o ABSOLUTE ../clib/heapaux.c 0x00000000 Number 0 heapauxi.o ABSOLUTE ../clib/libinit.s 0x00000000 Number 0 libshutdown2.o ABSOLUTE @@ -775,21 +848,41 @@ Image Symbol Table ../clib/libinit.s 0x00000000 Number 0 libinit2.o ABSOLUTE ../clib/libinit.s 0x00000000 Number 0 libshutdown.o ABSOLUTE ../clib/memcpset.s 0x00000000 Number 0 rt_memcpy_w.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_nopercent.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __2printf.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags_ss.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_ss.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_char_file.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_char.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_char_common.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_str.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 noretval__2printf.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags_ss_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_ss_wp.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_percent_end.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_percent.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_s.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_other.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_pvfn_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_abrt_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_general.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 __raise.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_fpe_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtred_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_segv_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_exit.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_stak_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_cppl_inner.o ABSOLUTE ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_formal.o ABSOLUTE ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_outer.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 __raise.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_other.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_cppl_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_pvfn_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_stak_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_rtred_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_fpe_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_segv_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_general.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_exit.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_abrt_inner.o ABSOLUTE ../clib/signal.s 0x00000000 Number 0 defsig.o ABSOLUTE + ../clib/stdio.c 0x00000000 Number 0 ferror_locked.o ABSOLUTE + ../clib/stdio.c 0x00000000 Number 0 ferror.o ABSOLUTE ../clib/stdlib.c 0x00000000 Number 0 exit.o ABSOLUTE ../fplib/fpinit.s 0x00000000 Number 0 fpinit.o ABSOLUTE ..\Code\app\src\app_led.c 0x00000000 Number 0 app_led.o ABSOLUTE @@ -900,73 +993,83 @@ Image Symbol Table SetSysClock 0x08000531 Thumb Code 8 system_stm32f10x.o(i.SetSysClock) i.SetSysClockTo72 0x08000538 Section 0 system_stm32f10x.o(i.SetSysClockTo72) SetSysClockTo72 0x08000539 Thumb Code 214 system_stm32f10x.o(i.SetSysClockTo72) - i.SystemInit 0x08000618 Section 0 system_stm32f10x.o(i.SystemInit) - i.TIM2_IRQHandler 0x08000678 Section 0 interrupt_handler.o(i.TIM2_IRQHandler) - i.TIM_ClearITPendingBit 0x08000692 Section 0 stm32f10x_tim.o(i.TIM_ClearITPendingBit) - i.TIM_Cmd 0x08000698 Section 0 stm32f10x_tim.o(i.TIM_Cmd) - i.TIM_GetITStatus 0x080006b0 Section 0 stm32f10x_tim.o(i.TIM_GetITStatus) - i.TIM_ITConfig 0x080006d2 Section 0 stm32f10x_tim.o(i.TIM_ITConfig) - i.TIM_TimeBaseInit 0x080006e4 Section 0 stm32f10x_tim.o(i.TIM_TimeBaseInit) - i.USART1_IRQHandler 0x08000788 Section 0 interrupt_handler.o(i.USART1_IRQHandler) - i.USART_ClearITPendingBit 0x080007cc Section 0 stm32f10x_usart.o(i.USART_ClearITPendingBit) - i.USART_Cmd 0x080007ea Section 0 stm32f10x_usart.o(i.USART_Cmd) - i.USART_DeInit 0x08000804 Section 0 stm32f10x_usart.o(i.USART_DeInit) - i.USART_GetITStatus 0x080008a0 Section 0 stm32f10x_usart.o(i.USART_GetITStatus) - i.USART_ITConfig 0x080008f4 Section 0 stm32f10x_usart.o(i.USART_ITConfig) - i.USART_Init 0x08000940 Section 0 stm32f10x_usart.o(i.USART_Init) - i.USART_ReceiveData 0x08000a18 Section 0 stm32f10x_usart.o(i.USART_ReceiveData) - i.USART_SendData 0x08000a22 Section 0 stm32f10x_usart.o(i.USART_SendData) - i._sys_exit 0x08000a2a Section 0 bsp_usart.o(i._sys_exit) - i.app_led_change_style_disable 0x08000a30 Section 0 app_led.o(i.app_led_change_style_disable) - i.app_led_get_change_style_value 0x08000a3c Section 0 app_led.o(i.app_led_get_change_style_value) - app_led_get_change_style_value 0x08000a3d Thumb Code 6 app_led.o(i.app_led_get_change_style_value) - i.app_led_marquee 0x08000a48 Section 0 app_led.o(i.app_led_marquee) - i.bsp_Init 0x08000ac4 Section 0 bsp.o(i.bsp_Init) - i.bsp_InitLed 0x08000b00 Section 0 bsp_led.o(i.bsp_InitLed) - i.bsp_LedOff 0x08000b34 Section 0 bsp_led.o(i.bsp_LedOff) - i.bsp_LedOn 0x08000b48 Section 0 bsp_led.o(i.bsp_LedOn) - i.bsp_init 0x08000b60 Section 0 main.o(i.bsp_init) - i.bsp_timer_2_init 0x08000b6c Section 0 bsp_timer.o(i.bsp_timer_2_init) - bsp_timer_2_init 0x08000b6d Thumb Code 94 bsp_timer.o(i.bsp_timer_2_init) - i.bsp_timer_init 0x08000bca Section 0 bsp_timer.o(i.bsp_timer_init) - i.get_systick_ms 0x08000bd4 Section 0 mw_soft_timer.o(i.get_systick_ms) - i.main 0x08000be0 Section 0 main.o(i.main) - i.middleware_init 0x08000bf8 Section 0 main.o(i.middleware_init) - i.mw_bluetooth_drv_init 0x08000c04 Section 0 mw_bluetooth.o(i.mw_bluetooth_drv_init) - i.mw_led0_init 0x08000c3c Section 0 mw_led.o(i.mw_led0_init) - i.mw_led0_off 0x08000c74 Section 0 mw_led.o(i.mw_led0_off) - i.mw_led0_on 0x08000c88 Section 0 mw_led.o(i.mw_led0_on) - i.mw_led_drv_init 0x08000c9c Section 0 mw_led.o(i.mw_led_drv_init) - i.mw_printf_insert_data 0x08000cd8 Section 0 mw_printf.o(i.mw_printf_insert_data) - i.mw_receive_one_byte 0x08000d00 Section 0 mw_bluetooth.o(i.mw_receive_one_byte) - mw_receive_one_byte 0x08000d01 Thumb Code 12 mw_bluetooth.o(i.mw_receive_one_byte) - i.mw_send_one_byte 0x08000d10 Section 0 mw_bluetooth.o(i.mw_send_one_byte) - mw_send_one_byte 0x08000d11 Thumb Code 16 mw_bluetooth.o(i.mw_send_one_byte) - i.mw_soft_timer_user_systick_update 0x08000d24 Section 0 mw_soft_timer.o(i.mw_soft_timer_user_systick_update) - i.mw_usart_deinit 0x08000d34 Section 0 mw_bluetooth.o(i.mw_usart_deinit) - mw_usart_deinit 0x08000d35 Thumb Code 12 mw_bluetooth.o(i.mw_usart_deinit) - i.mw_usart_init 0x08000d44 Section 0 mw_bluetooth.o(i.mw_usart_init) - mw_usart_init 0x08000d45 Thumb Code 176 mw_bluetooth.o(i.mw_usart_init) - .data 0x20000000 Section 8 app_led.o(.data) - led_style_change_flag 0x20000000 Data 1 app_led.o(.data) - tmp_state 0x20000001 Data 1 app_led.o(.data) - tmp_tick 0x20000004 Data 4 app_led.o(.data) - .data 0x20000008 Section 2 mw_printf.o(.data) - mw_printf_cache_head 0x20000008 Data 2 mw_printf.o(.data) - .data 0x2000000c Section 4 mw_soft_timer.o(.data) - systick_ms 0x2000000c Data 4 mw_soft_timer.o(.data) - .data 0x20000010 Section 20 stm32f10x_rcc.o(.data) - APBAHBPrescTable 0x20000010 Data 16 stm32f10x_rcc.o(.data) - ADCPrescTable 0x20000020 Data 4 stm32f10x_rcc.o(.data) - .bss 0x20000024 Section 16 mw_led.o(.bss) - .bss 0x20000034 Section 50 mw_printf.o(.bss) - .bss 0x20000068 Section 40 mw_bluetooth.o(.bss) - .bss 0x20000090 Section 96 libspace.o(.bss) - HEAP 0x200000f0 Section 512 startup_stm32f10x_md.o(HEAP) - Heap_Mem 0x200000f0 Data 512 startup_stm32f10x_md.o(HEAP) - STACK 0x200002f0 Section 1024 startup_stm32f10x_md.o(STACK) - Stack_Mem 0x200002f0 Data 1024 startup_stm32f10x_md.o(STACK) - __initial_sp 0x200006f0 Data 0 startup_stm32f10x_md.o(STACK) + i.SysTick_Handler 0x08000618 Section 0 bsp_timer.o(i.SysTick_Handler) + i.SysTick_ISR 0x08000620 Section 0 bsp_timer.o(i.SysTick_ISR) + i.SystemInit 0x080006a4 Section 0 system_stm32f10x.o(i.SystemInit) + i.TIM2_IRQHandler 0x08000704 Section 0 bsp_timer.o(i.TIM2_IRQHandler) + i.TIM_ARRPreloadConfig 0x080007b4 Section 0 stm32f10x_tim.o(i.TIM_ARRPreloadConfig) + i.TIM_ClearITPendingBit 0x080007cc Section 0 stm32f10x_tim.o(i.TIM_ClearITPendingBit) + i.TIM_Cmd 0x080007d2 Section 0 stm32f10x_tim.o(i.TIM_Cmd) + i.TIM_GetITStatus 0x080007ea Section 0 stm32f10x_tim.o(i.TIM_GetITStatus) + i.TIM_ITConfig 0x0800080c Section 0 stm32f10x_tim.o(i.TIM_ITConfig) + i.TIM_InternalClockConfig 0x0800081e Section 0 stm32f10x_tim.o(i.TIM_InternalClockConfig) + i.TIM_TimeBaseInit 0x0800082c Section 0 stm32f10x_tim.o(i.TIM_TimeBaseInit) + i.USART1_IRQHandler 0x080008d0 Section 0 interrupt_handler.o(i.USART1_IRQHandler) + i.USART_ClearITPendingBit 0x08000914 Section 0 stm32f10x_usart.o(i.USART_ClearITPendingBit) + i.USART_Cmd 0x08000932 Section 0 stm32f10x_usart.o(i.USART_Cmd) + i.USART_DeInit 0x0800094c Section 0 stm32f10x_usart.o(i.USART_DeInit) + i.USART_GetITStatus 0x080009e8 Section 0 stm32f10x_usart.o(i.USART_GetITStatus) + i.USART_ITConfig 0x08000a3c Section 0 stm32f10x_usart.o(i.USART_ITConfig) + i.USART_Init 0x08000a88 Section 0 stm32f10x_usart.o(i.USART_Init) + i.USART_ReceiveData 0x08000b60 Section 0 stm32f10x_usart.o(i.USART_ReceiveData) + i.USART_SendData 0x08000b6a Section 0 stm32f10x_usart.o(i.USART_SendData) + i._sys_exit 0x08000b72 Section 0 bsp_usart.o(i._sys_exit) + i.bsp_Init 0x08000b78 Section 0 bsp.o(i.bsp_Init) + i.bsp_InitHardTimer 0x08000bb4 Section 0 bsp_timer.o(i.bsp_InitHardTimer) + i.bsp_InitLed 0x08000c38 Section 0 bsp_led.o(i.bsp_InitLed) + i.bsp_InitTimer 0x08000c90 Section 0 bsp_timer.o(i.bsp_InitTimer) + i.bsp_LedOff 0x08000d30 Section 0 bsp_led.o(i.bsp_LedOff) + i.bsp_LedToggle 0x08000d44 Section 0 bsp_led.o(i.bsp_LedToggle) + i.bsp_RunPer10ms 0x08000d70 Section 0 bsp.o(i.bsp_RunPer10ms) + i.bsp_RunPer1ms 0x08000d74 Section 0 bsp.o(i.bsp_RunPer1ms) + i.bsp_SoftTimerDec 0x08000d9c Section 0 bsp_timer.o(i.bsp_SoftTimerDec) + bsp_SoftTimerDec 0x08000d9d Thumb Code 28 bsp_timer.o(i.bsp_SoftTimerDec) + i.bsp_init 0x08000db8 Section 0 main.o(i.bsp_init) + i.get_systick_ms 0x08000dc4 Section 0 mw_soft_timer.o(i.get_systick_ms) + i.main 0x08000dd0 Section 0 main.o(i.main) + i.middleware_init 0x08000de4 Section 0 main.o(i.middleware_init) + i.mw_bluetooth_drv_init 0x08000df0 Section 0 mw_bluetooth.o(i.mw_bluetooth_drv_init) + i.mw_led0_init 0x08000e28 Section 0 mw_led.o(i.mw_led0_init) + i.mw_led0_off 0x08000e60 Section 0 mw_led.o(i.mw_led0_off) + i.mw_led0_on 0x08000e74 Section 0 mw_led.o(i.mw_led0_on) + i.mw_led_drv_init 0x08000e88 Section 0 mw_led.o(i.mw_led_drv_init) + i.mw_printf_insert_data 0x08000ec4 Section 0 mw_printf.o(i.mw_printf_insert_data) + i.mw_receive_one_byte 0x08000eec Section 0 mw_bluetooth.o(i.mw_receive_one_byte) + mw_receive_one_byte 0x08000eed Thumb Code 12 mw_bluetooth.o(i.mw_receive_one_byte) + i.mw_send_one_byte 0x08000efc Section 0 mw_bluetooth.o(i.mw_send_one_byte) + mw_send_one_byte 0x08000efd Thumb Code 16 mw_bluetooth.o(i.mw_send_one_byte) + i.mw_usart_deinit 0x08000f10 Section 0 mw_bluetooth.o(i.mw_usart_deinit) + mw_usart_deinit 0x08000f11 Thumb Code 12 mw_bluetooth.o(i.mw_usart_deinit) + i.mw_usart_init 0x08000f20 Section 0 mw_bluetooth.o(i.mw_usart_init) + mw_usart_init 0x08000f21 Thumb Code 176 mw_bluetooth.o(i.mw_usart_init) + .data 0x20000000 Section 2 mw_printf.o(.data) + mw_printf_cache_head 0x20000000 Data 2 mw_printf.o(.data) + .data 0x20000004 Section 4 mw_soft_timer.o(.data) + systick_ms 0x20000004 Data 4 mw_soft_timer.o(.data) + .data 0x20000008 Section 29 bsp_timer.o(.data) + s_uiDelayCount 0x20000008 Data 4 bsp_timer.o(.data) + s_ucTimeOutFlag 0x2000000c Data 1 bsp_timer.o(.data) + s_TIM_CallBack1 0x20000014 Data 4 bsp_timer.o(.data) + s_TIM_CallBack2 0x20000018 Data 4 bsp_timer.o(.data) + s_TIM_CallBack3 0x2000001c Data 4 bsp_timer.o(.data) + s_TIM_CallBack4 0x20000020 Data 4 bsp_timer.o(.data) + s_count 0x20000024 Data 1 bsp_timer.o(.data) + .data 0x20000025 Section 1 bsp.o(.data) + .data 0x20000028 Section 20 system_stm32f10x.o(.data) + .data 0x2000003c Section 20 stm32f10x_rcc.o(.data) + APBAHBPrescTable 0x2000003c Data 16 stm32f10x_rcc.o(.data) + ADCPrescTable 0x2000004c Data 4 stm32f10x_rcc.o(.data) + .bss 0x20000050 Section 16 mw_led.o(.bss) + .bss 0x20000060 Section 50 mw_printf.o(.bss) + .bss 0x20000094 Section 12 bsp_timer.o(.bss) + s_tTmr 0x20000094 Data 12 bsp_timer.o(.bss) + .bss 0x200000a0 Section 40 mw_bluetooth.o(.bss) + .bss 0x200000c8 Section 96 libspace.o(.bss) + HEAP 0x20000128 Section 512 startup_stm32f10x_md.o(HEAP) + Heap_Mem 0x20000128 Data 512 startup_stm32f10x_md.o(HEAP) + STACK 0x20000328 Section 1024 startup_stm32f10x_md.o(STACK) + Stack_Mem 0x20000328 Data 1024 startup_stm32f10x_md.o(STACK) + __initial_sp 0x20000728 Data 0 startup_stm32f10x_md.o(STACK) Global Symbols @@ -997,6 +1100,11 @@ Image Symbol Table _init_alloc - Undefined Weak Reference _init_user_alloc - Undefined Weak Reference _initio - Undefined Weak Reference + _mutex_acquire - Undefined Weak Reference + _mutex_release - Undefined Weak Reference + _printf_mbtowc - Undefined Weak Reference + _printf_post_padding - Undefined Weak Reference + _printf_pre_padding - Undefined Weak Reference _rand_init - Undefined Weak Reference _signal_finish - Undefined Weak Reference _signal_init - Undefined Weak Reference @@ -1064,7 +1172,6 @@ Image Symbol Table SVC_Handler 0x0800019b Thumb Code 2 startup_stm32f10x_md.o(.text) DebugMon_Handler 0x0800019d Thumb Code 2 startup_stm32f10x_md.o(.text) PendSV_Handler 0x0800019f Thumb Code 2 startup_stm32f10x_md.o(.text) - SysTick_Handler 0x080001a1 Thumb Code 2 startup_stm32f10x_md.o(.text) ADC1_2_IRQHandler 0x080001a3 Thumb Code 0 startup_stm32f10x_md.o(.text) CAN1_RX1_IRQHandler 0x080001a3 Thumb Code 0 startup_stm32f10x_md.o(.text) CAN1_SCE_IRQHandler 0x080001a3 Thumb Code 0 startup_stm32f10x_md.o(.text) @@ -1128,48 +1235,56 @@ Image Symbol Table RCC_APB2PeriphClockCmd 0x0800041d Thumb Code 26 stm32f10x_rcc.o(i.RCC_APB2PeriphClockCmd) RCC_APB2PeriphResetCmd 0x0800043d Thumb Code 26 stm32f10x_rcc.o(i.RCC_APB2PeriphResetCmd) RCC_GetClocksFreq 0x0800045d Thumb Code 192 stm32f10x_rcc.o(i.RCC_GetClocksFreq) - SystemInit 0x08000619 Thumb Code 78 system_stm32f10x.o(i.SystemInit) - TIM2_IRQHandler 0x08000679 Thumb Code 26 interrupt_handler.o(i.TIM2_IRQHandler) - TIM_ClearITPendingBit 0x08000693 Thumb Code 6 stm32f10x_tim.o(i.TIM_ClearITPendingBit) - TIM_Cmd 0x08000699 Thumb Code 24 stm32f10x_tim.o(i.TIM_Cmd) - TIM_GetITStatus 0x080006b1 Thumb Code 34 stm32f10x_tim.o(i.TIM_GetITStatus) - TIM_ITConfig 0x080006d3 Thumb Code 18 stm32f10x_tim.o(i.TIM_ITConfig) - TIM_TimeBaseInit 0x080006e5 Thumb Code 122 stm32f10x_tim.o(i.TIM_TimeBaseInit) - USART1_IRQHandler 0x08000789 Thumb Code 62 interrupt_handler.o(i.USART1_IRQHandler) - USART_ClearITPendingBit 0x080007cd Thumb Code 30 stm32f10x_usart.o(i.USART_ClearITPendingBit) - USART_Cmd 0x080007eb Thumb Code 24 stm32f10x_usart.o(i.USART_Cmd) - USART_DeInit 0x08000805 Thumb Code 134 stm32f10x_usart.o(i.USART_DeInit) - USART_GetITStatus 0x080008a1 Thumb Code 84 stm32f10x_usart.o(i.USART_GetITStatus) - USART_ITConfig 0x080008f5 Thumb Code 74 stm32f10x_usart.o(i.USART_ITConfig) - USART_Init 0x08000941 Thumb Code 210 stm32f10x_usart.o(i.USART_Init) - USART_ReceiveData 0x08000a19 Thumb Code 10 stm32f10x_usart.o(i.USART_ReceiveData) - USART_SendData 0x08000a23 Thumb Code 8 stm32f10x_usart.o(i.USART_SendData) - _sys_exit 0x08000a2b Thumb Code 6 bsp_usart.o(i._sys_exit) - app_led_change_style_disable 0x08000a31 Thumb Code 8 app_led.o(i.app_led_change_style_disable) - app_led_marquee 0x08000a49 Thumb Code 114 app_led.o(i.app_led_marquee) - bsp_Init 0x08000ac5 Thumb Code 52 bsp.o(i.bsp_Init) - bsp_InitLed 0x08000b01 Thumb Code 46 bsp_led.o(i.bsp_InitLed) - bsp_LedOff 0x08000b35 Thumb Code 16 bsp_led.o(i.bsp_LedOff) - bsp_LedOn 0x08000b49 Thumb Code 20 bsp_led.o(i.bsp_LedOn) - bsp_init 0x08000b61 Thumb Code 12 main.o(i.bsp_init) - bsp_timer_init 0x08000bcb Thumb Code 8 bsp_timer.o(i.bsp_timer_init) - get_systick_ms 0x08000bd5 Thumb Code 6 mw_soft_timer.o(i.get_systick_ms) - main 0x08000be1 Thumb Code 24 main.o(i.main) - middleware_init 0x08000bf9 Thumb Code 12 main.o(i.middleware_init) - mw_bluetooth_drv_init 0x08000c05 Thumb Code 30 mw_bluetooth.o(i.mw_bluetooth_drv_init) - mw_led0_init 0x08000c3d Thumb Code 50 mw_led.o(i.mw_led0_init) - mw_led0_off 0x08000c75 Thumb Code 14 mw_led.o(i.mw_led0_off) - mw_led0_on 0x08000c89 Thumb Code 14 mw_led.o(i.mw_led0_on) - mw_led_drv_init 0x08000c9d Thumb Code 44 mw_led.o(i.mw_led_drv_init) - mw_printf_insert_data 0x08000cd9 Thumb Code 30 mw_printf.o(i.mw_printf_insert_data) - mw_soft_timer_user_systick_update 0x08000d25 Thumb Code 12 mw_soft_timer.o(i.mw_soft_timer_user_systick_update) - Region$$Table$$Base 0x08000dfc Number 0 anon$$obj.o(Region$$Table) - Region$$Table$$Limit 0x08000e1c Number 0 anon$$obj.o(Region$$Table) - led_drv_buf 0x20000024 Data 16 mw_led.o(.bss) - mw_printf_buf 0x20000034 Data 50 mw_printf.o(.bss) - bluetooth_drv_buf 0x20000068 Data 40 mw_bluetooth.o(.bss) - __libspace_start 0x20000090 Data 96 libspace.o(.bss) - __temporary_stack_top$libspace 0x200000f0 Data 0 libspace.o(.bss) + SysTick_Handler 0x08000619 Thumb Code 8 bsp_timer.o(i.SysTick_Handler) + SysTick_ISR 0x08000621 Thumb Code 110 bsp_timer.o(i.SysTick_ISR) + SystemInit 0x080006a5 Thumb Code 78 system_stm32f10x.o(i.SystemInit) + TIM2_IRQHandler 0x08000705 Thumb Code 158 bsp_timer.o(i.TIM2_IRQHandler) + TIM_ARRPreloadConfig 0x080007b5 Thumb Code 24 stm32f10x_tim.o(i.TIM_ARRPreloadConfig) + TIM_ClearITPendingBit 0x080007cd Thumb Code 6 stm32f10x_tim.o(i.TIM_ClearITPendingBit) + TIM_Cmd 0x080007d3 Thumb Code 24 stm32f10x_tim.o(i.TIM_Cmd) + TIM_GetITStatus 0x080007eb Thumb Code 34 stm32f10x_tim.o(i.TIM_GetITStatus) + TIM_ITConfig 0x0800080d Thumb Code 18 stm32f10x_tim.o(i.TIM_ITConfig) + TIM_InternalClockConfig 0x0800081f Thumb Code 12 stm32f10x_tim.o(i.TIM_InternalClockConfig) + TIM_TimeBaseInit 0x0800082d Thumb Code 122 stm32f10x_tim.o(i.TIM_TimeBaseInit) + USART1_IRQHandler 0x080008d1 Thumb Code 62 interrupt_handler.o(i.USART1_IRQHandler) + USART_ClearITPendingBit 0x08000915 Thumb Code 30 stm32f10x_usart.o(i.USART_ClearITPendingBit) + USART_Cmd 0x08000933 Thumb Code 24 stm32f10x_usart.o(i.USART_Cmd) + USART_DeInit 0x0800094d Thumb Code 134 stm32f10x_usart.o(i.USART_DeInit) + USART_GetITStatus 0x080009e9 Thumb Code 84 stm32f10x_usart.o(i.USART_GetITStatus) + USART_ITConfig 0x08000a3d Thumb Code 74 stm32f10x_usart.o(i.USART_ITConfig) + USART_Init 0x08000a89 Thumb Code 210 stm32f10x_usart.o(i.USART_Init) + USART_ReceiveData 0x08000b61 Thumb Code 10 stm32f10x_usart.o(i.USART_ReceiveData) + USART_SendData 0x08000b6b Thumb Code 8 stm32f10x_usart.o(i.USART_SendData) + _sys_exit 0x08000b73 Thumb Code 6 bsp_usart.o(i._sys_exit) + bsp_Init 0x08000b79 Thumb Code 52 bsp.o(i.bsp_Init) + bsp_InitHardTimer 0x08000bb5 Thumb Code 126 bsp_timer.o(i.bsp_InitHardTimer) + bsp_InitLed 0x08000c39 Thumb Code 80 bsp_led.o(i.bsp_InitLed) + bsp_InitTimer 0x08000c91 Thumb Code 142 bsp_timer.o(i.bsp_InitTimer) + bsp_LedOff 0x08000d31 Thumb Code 16 bsp_led.o(i.bsp_LedOff) + bsp_LedToggle 0x08000d45 Thumb Code 36 bsp_led.o(i.bsp_LedToggle) + bsp_RunPer10ms 0x08000d71 Thumb Code 2 bsp.o(i.bsp_RunPer10ms) + bsp_RunPer1ms 0x08000d75 Thumb Code 36 bsp.o(i.bsp_RunPer1ms) + bsp_init 0x08000db9 Thumb Code 12 main.o(i.bsp_init) + get_systick_ms 0x08000dc5 Thumb Code 6 mw_soft_timer.o(i.get_systick_ms) + main 0x08000dd1 Thumb Code 20 main.o(i.main) + middleware_init 0x08000de5 Thumb Code 12 main.o(i.middleware_init) + mw_bluetooth_drv_init 0x08000df1 Thumb Code 30 mw_bluetooth.o(i.mw_bluetooth_drv_init) + mw_led0_init 0x08000e29 Thumb Code 50 mw_led.o(i.mw_led0_init) + mw_led0_off 0x08000e61 Thumb Code 14 mw_led.o(i.mw_led0_off) + mw_led0_on 0x08000e75 Thumb Code 14 mw_led.o(i.mw_led0_on) + mw_led_drv_init 0x08000e89 Thumb Code 44 mw_led.o(i.mw_led_drv_init) + mw_printf_insert_data 0x08000ec5 Thumb Code 30 mw_printf.o(i.mw_printf_insert_data) + Region$$Table$$Base 0x08000fd8 Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x08000ff8 Number 0 anon$$obj.o(Region$$Table) + g_iRunTime 0x20000010 Data 4 bsp_timer.o(.data) + ubCounter 0x20000025 Data 1 bsp.o(.data) + SystemCoreClock 0x20000028 Data 4 system_stm32f10x.o(.data) + AHBPrescTable 0x2000002c Data 16 system_stm32f10x.o(.data) + led_drv_buf 0x20000050 Data 16 mw_led.o(.bss) + mw_printf_buf 0x20000060 Data 50 mw_printf.o(.bss) + bluetooth_drv_buf 0x200000a0 Data 40 mw_bluetooth.o(.bss) + __libspace_start 0x200000c8 Data 96 libspace.o(.bss) + __temporary_stack_top$libspace 0x20000128 Data 0 libspace.o(.bss) @@ -1179,145 +1294,153 @@ Memory Map of the image Image Entry point : 0x080000ed - Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00000e40, Max: 0x00010000, ABSOLUTE) + Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00001048, Max: 0x00010000, ABSOLUTE) - Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00000e1c, Max: 0x00010000, ABSOLUTE) + Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00000ff8, Max: 0x00010000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object - 0x08000000 0x08000000 0x000000ec Data RO 517 RESET startup_stm32f10x_md.o - 0x080000ec 0x080000ec 0x00000008 Code RO 3613 * !!!main c_w.l(__main.o) - 0x080000f4 0x080000f4 0x00000034 Code RO 3770 !!!scatter c_w.l(__scatter.o) - 0x08000128 0x08000128 0x0000001a Code RO 3772 !!handler_copy c_w.l(__scatter_copy.o) + 0x08000000 0x08000000 0x000000ec Data RO 640 RESET startup_stm32f10x_md.o + 0x080000ec 0x080000ec 0x00000008 Code RO 3769 * !!!main c_w.l(__main.o) + 0x080000f4 0x080000f4 0x00000034 Code RO 3939 !!!scatter c_w.l(__scatter.o) + 0x08000128 0x08000128 0x0000001a Code RO 3941 !!handler_copy c_w.l(__scatter_copy.o) 0x08000142 0x08000142 0x00000002 PAD - 0x08000144 0x08000144 0x0000001c Code RO 3774 !!handler_zi c_w.l(__scatter_zi.o) - 0x08000160 0x08000160 0x00000002 Code RO 3642 .ARM.Collect$$libinit$$00000000 c_w.l(libinit.o) - 0x08000162 0x08000162 0x00000000 Code RO 3649 .ARM.Collect$$libinit$$00000002 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3651 .ARM.Collect$$libinit$$00000004 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3654 .ARM.Collect$$libinit$$0000000A c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3656 .ARM.Collect$$libinit$$0000000C c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3658 .ARM.Collect$$libinit$$0000000E c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3661 .ARM.Collect$$libinit$$00000011 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3663 .ARM.Collect$$libinit$$00000013 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3665 .ARM.Collect$$libinit$$00000015 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3667 .ARM.Collect$$libinit$$00000017 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3669 .ARM.Collect$$libinit$$00000019 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3671 .ARM.Collect$$libinit$$0000001B c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3673 .ARM.Collect$$libinit$$0000001D c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3675 .ARM.Collect$$libinit$$0000001F c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3677 .ARM.Collect$$libinit$$00000021 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3679 .ARM.Collect$$libinit$$00000023 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3681 .ARM.Collect$$libinit$$00000025 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3685 .ARM.Collect$$libinit$$0000002C c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3687 .ARM.Collect$$libinit$$0000002E c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3689 .ARM.Collect$$libinit$$00000030 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 3691 .ARM.Collect$$libinit$$00000032 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000002 Code RO 3692 .ARM.Collect$$libinit$$00000033 c_w.l(libinit2.o) - 0x08000164 0x08000164 0x00000002 Code RO 3710 .ARM.Collect$$libshutdown$$00000000 c_w.l(libshutdown.o) - 0x08000166 0x08000166 0x00000000 Code RO 3720 .ARM.Collect$$libshutdown$$00000002 c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 3722 .ARM.Collect$$libshutdown$$00000004 c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 3724 .ARM.Collect$$libshutdown$$00000006 c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 3727 .ARM.Collect$$libshutdown$$00000009 c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 3730 .ARM.Collect$$libshutdown$$0000000C c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 3732 .ARM.Collect$$libshutdown$$0000000E c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 3735 .ARM.Collect$$libshutdown$$00000011 c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000002 Code RO 3736 .ARM.Collect$$libshutdown$$00000012 c_w.l(libshutdown2.o) - 0x08000168 0x08000168 0x00000000 Code RO 3617 .ARM.Collect$$rtentry$$00000000 c_w.l(__rtentry.o) - 0x08000168 0x08000168 0x00000000 Code RO 3619 .ARM.Collect$$rtentry$$00000002 c_w.l(__rtentry2.o) - 0x08000168 0x08000168 0x00000006 Code RO 3631 .ARM.Collect$$rtentry$$00000004 c_w.l(__rtentry4.o) - 0x0800016e 0x0800016e 0x00000000 Code RO 3621 .ARM.Collect$$rtentry$$00000009 c_w.l(__rtentry2.o) - 0x0800016e 0x0800016e 0x00000004 Code RO 3622 .ARM.Collect$$rtentry$$0000000A c_w.l(__rtentry2.o) - 0x08000172 0x08000172 0x00000000 Code RO 3624 .ARM.Collect$$rtentry$$0000000C c_w.l(__rtentry2.o) - 0x08000172 0x08000172 0x00000008 Code RO 3625 .ARM.Collect$$rtentry$$0000000D c_w.l(__rtentry2.o) - 0x0800017a 0x0800017a 0x00000002 Code RO 3646 .ARM.Collect$$rtexit$$00000000 c_w.l(rtexit.o) - 0x0800017c 0x0800017c 0x00000000 Code RO 3694 .ARM.Collect$$rtexit$$00000002 c_w.l(rtexit2.o) - 0x0800017c 0x0800017c 0x00000004 Code RO 3695 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o) - 0x08000180 0x08000180 0x00000006 Code RO 3696 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o) + 0x08000144 0x08000144 0x0000001c Code RO 3943 !!handler_zi c_w.l(__scatter_zi.o) + 0x08000160 0x08000160 0x00000002 Code RO 3811 .ARM.Collect$$libinit$$00000000 c_w.l(libinit.o) + 0x08000162 0x08000162 0x00000000 Code RO 3818 .ARM.Collect$$libinit$$00000002 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3820 .ARM.Collect$$libinit$$00000004 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3823 .ARM.Collect$$libinit$$0000000A c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3825 .ARM.Collect$$libinit$$0000000C c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3827 .ARM.Collect$$libinit$$0000000E c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3830 .ARM.Collect$$libinit$$00000011 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3832 .ARM.Collect$$libinit$$00000013 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3834 .ARM.Collect$$libinit$$00000015 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3836 .ARM.Collect$$libinit$$00000017 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3838 .ARM.Collect$$libinit$$00000019 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3840 .ARM.Collect$$libinit$$0000001B c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3842 .ARM.Collect$$libinit$$0000001D c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3844 .ARM.Collect$$libinit$$0000001F c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3846 .ARM.Collect$$libinit$$00000021 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3848 .ARM.Collect$$libinit$$00000023 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3850 .ARM.Collect$$libinit$$00000025 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3854 .ARM.Collect$$libinit$$0000002C c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3856 .ARM.Collect$$libinit$$0000002E c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3858 .ARM.Collect$$libinit$$00000030 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 3860 .ARM.Collect$$libinit$$00000032 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000002 Code RO 3861 .ARM.Collect$$libinit$$00000033 c_w.l(libinit2.o) + 0x08000164 0x08000164 0x00000002 Code RO 3879 .ARM.Collect$$libshutdown$$00000000 c_w.l(libshutdown.o) + 0x08000166 0x08000166 0x00000000 Code RO 3889 .ARM.Collect$$libshutdown$$00000002 c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 3891 .ARM.Collect$$libshutdown$$00000004 c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 3893 .ARM.Collect$$libshutdown$$00000006 c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 3896 .ARM.Collect$$libshutdown$$00000009 c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 3899 .ARM.Collect$$libshutdown$$0000000C c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 3901 .ARM.Collect$$libshutdown$$0000000E c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 3904 .ARM.Collect$$libshutdown$$00000011 c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000002 Code RO 3905 .ARM.Collect$$libshutdown$$00000012 c_w.l(libshutdown2.o) + 0x08000168 0x08000168 0x00000000 Code RO 3773 .ARM.Collect$$rtentry$$00000000 c_w.l(__rtentry.o) + 0x08000168 0x08000168 0x00000000 Code RO 3780 .ARM.Collect$$rtentry$$00000002 c_w.l(__rtentry2.o) + 0x08000168 0x08000168 0x00000006 Code RO 3792 .ARM.Collect$$rtentry$$00000004 c_w.l(__rtentry4.o) + 0x0800016e 0x0800016e 0x00000000 Code RO 3782 .ARM.Collect$$rtentry$$00000009 c_w.l(__rtentry2.o) + 0x0800016e 0x0800016e 0x00000004 Code RO 3783 .ARM.Collect$$rtentry$$0000000A c_w.l(__rtentry2.o) + 0x08000172 0x08000172 0x00000000 Code RO 3785 .ARM.Collect$$rtentry$$0000000C c_w.l(__rtentry2.o) + 0x08000172 0x08000172 0x00000008 Code RO 3786 .ARM.Collect$$rtentry$$0000000D c_w.l(__rtentry2.o) + 0x0800017a 0x0800017a 0x00000002 Code RO 3815 .ARM.Collect$$rtexit$$00000000 c_w.l(rtexit.o) + 0x0800017c 0x0800017c 0x00000000 Code RO 3863 .ARM.Collect$$rtexit$$00000002 c_w.l(rtexit2.o) + 0x0800017c 0x0800017c 0x00000004 Code RO 3864 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o) + 0x08000180 0x08000180 0x00000006 Code RO 3865 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o) 0x08000186 0x08000186 0x00000002 PAD - 0x08000188 0x08000188 0x00000040 Code RO 518 .text startup_stm32f10x_md.o - 0x080001c8 0x080001c8 0x00000002 Code RO 3607 .text c_w.l(use_no_semi_2.o) - 0x080001ca 0x080001ca 0x00000006 Code RO 3611 .text c_w.l(heapauxi.o) - 0x080001d0 0x080001d0 0x00000002 Code RO 3615 .text c_w.l(use_no_semi.o) - 0x080001d2 0x080001d2 0x0000004a Code RO 3633 .text c_w.l(sys_stackheap_outer.o) - 0x0800021c 0x0800021c 0x00000012 Code RO 3635 .text c_w.l(exit.o) + 0x08000188 0x08000188 0x00000040 Code RO 641 .text startup_stm32f10x_md.o + 0x080001c8 0x080001c8 0x00000002 Code RO 3733 .text c_w.l(use_no_semi_2.o) + 0x080001ca 0x080001ca 0x00000006 Code RO 3767 .text c_w.l(heapauxi.o) + 0x080001d0 0x080001d0 0x00000002 Code RO 3771 .text c_w.l(use_no_semi.o) + 0x080001d2 0x080001d2 0x0000004a Code RO 3800 .text c_w.l(sys_stackheap_outer.o) + 0x0800021c 0x0800021c 0x00000012 Code RO 3804 .text c_w.l(exit.o) 0x0800022e 0x0800022e 0x00000002 PAD - 0x08000230 0x08000230 0x00000008 Code RO 3643 .text c_w.l(libspace.o) - 0x08000238 0x08000238 0x00000116 Code RO 1697 i.GPIO_Init stm32f10x_gpio.o - 0x0800034e 0x0800034e 0x00000004 Code RO 1704 i.GPIO_ResetBits stm32f10x_gpio.o - 0x08000352 0x08000352 0x00000004 Code RO 1705 i.GPIO_SetBits stm32f10x_gpio.o + 0x08000230 0x08000230 0x00000008 Code RO 3812 .text c_w.l(libspace.o) + 0x08000238 0x08000238 0x00000116 Code RO 1823 i.GPIO_Init stm32f10x_gpio.o + 0x0800034e 0x0800034e 0x00000004 Code RO 1830 i.GPIO_ResetBits stm32f10x_gpio.o + 0x08000352 0x08000352 0x00000004 Code RO 1831 i.GPIO_SetBits stm32f10x_gpio.o 0x08000356 0x08000356 0x00000002 PAD - 0x08000358 0x08000358 0x00000070 Code RO 522 i.NVIC_Init misc.o - 0x080003c8 0x080003c8 0x00000014 Code RO 523 i.NVIC_PriorityGroupConfig misc.o - 0x080003dc 0x080003dc 0x00000020 Code RO 2116 i.RCC_APB1PeriphClockCmd stm32f10x_rcc.o - 0x080003fc 0x080003fc 0x00000020 Code RO 2117 i.RCC_APB1PeriphResetCmd stm32f10x_rcc.o - 0x0800041c 0x0800041c 0x00000020 Code RO 2118 i.RCC_APB2PeriphClockCmd stm32f10x_rcc.o - 0x0800043c 0x0800043c 0x00000020 Code RO 2119 i.RCC_APB2PeriphResetCmd stm32f10x_rcc.o - 0x0800045c 0x0800045c 0x000000d4 Code RO 2126 i.RCC_GetClocksFreq stm32f10x_rcc.o - 0x08000530 0x08000530 0x00000008 Code RO 481 i.SetSysClock system_stm32f10x.o - 0x08000538 0x08000538 0x000000e0 Code RO 482 i.SetSysClockTo72 system_stm32f10x.o - 0x08000618 0x08000618 0x00000060 Code RO 484 i.SystemInit system_stm32f10x.o - 0x08000678 0x08000678 0x0000001a Code RO 3528 i.TIM2_IRQHandler interrupt_handler.o - 0x08000692 0x08000692 0x00000006 Code RO 2754 i.TIM_ClearITPendingBit stm32f10x_tim.o - 0x08000698 0x08000698 0x00000018 Code RO 2759 i.TIM_Cmd stm32f10x_tim.o - 0x080006b0 0x080006b0 0x00000022 Code RO 2780 i.TIM_GetITStatus stm32f10x_tim.o - 0x080006d2 0x080006d2 0x00000012 Code RO 2784 i.TIM_ITConfig stm32f10x_tim.o - 0x080006e4 0x080006e4 0x000000a4 Code RO 2830 i.TIM_TimeBaseInit stm32f10x_tim.o - 0x08000788 0x08000788 0x00000044 Code RO 3529 i.USART1_IRQHandler interrupt_handler.o - 0x080007cc 0x080007cc 0x0000001e Code RO 3292 i.USART_ClearITPendingBit stm32f10x_usart.o - 0x080007ea 0x080007ea 0x00000018 Code RO 3295 i.USART_Cmd stm32f10x_usart.o - 0x08000802 0x08000802 0x00000002 PAD - 0x08000804 0x08000804 0x0000009c Code RO 3297 i.USART_DeInit stm32f10x_usart.o - 0x080008a0 0x080008a0 0x00000054 Code RO 3299 i.USART_GetITStatus stm32f10x_usart.o - 0x080008f4 0x080008f4 0x0000004a Code RO 3301 i.USART_ITConfig stm32f10x_usart.o - 0x0800093e 0x0800093e 0x00000002 PAD - 0x08000940 0x08000940 0x000000d8 Code RO 3302 i.USART_Init stm32f10x_usart.o - 0x08000a18 0x08000a18 0x0000000a Code RO 3309 i.USART_ReceiveData stm32f10x_usart.o - 0x08000a22 0x08000a22 0x00000008 Code RO 3312 i.USART_SendData stm32f10x_usart.o - 0x08000a2a 0x08000a2a 0x00000006 Code RO 357 i._sys_exit bsp_usart.o - 0x08000a30 0x08000a30 0x0000000c Code RO 147 i.app_led_change_style_disable app_led.o - 0x08000a3c 0x08000a3c 0x0000000c Code RO 149 i.app_led_get_change_style_value app_led.o - 0x08000a48 0x08000a48 0x0000007c Code RO 150 i.app_led_marquee app_led.o - 0x08000ac4 0x08000ac4 0x0000003c Code RO 398 i.bsp_Init bsp.o - 0x08000b00 0x08000b00 0x00000034 Code RO 434 i.bsp_InitLed bsp_led.o - 0x08000b34 0x08000b34 0x00000014 Code RO 436 i.bsp_LedOff bsp_led.o - 0x08000b48 0x08000b48 0x00000018 Code RO 437 i.bsp_LedOn bsp_led.o - 0x08000b60 0x08000b60 0x0000000c Code RO 1 i.bsp_init main.o - 0x08000b6c 0x08000b6c 0x0000005e Code RO 334 i.bsp_timer_2_init bsp_timer.o - 0x08000bca 0x08000bca 0x00000008 Code RO 335 i.bsp_timer_init bsp_timer.o - 0x08000bd2 0x08000bd2 0x00000002 PAD - 0x08000bd4 0x08000bd4 0x0000000c Code RO 314 i.get_systick_ms mw_soft_timer.o - 0x08000be0 0x08000be0 0x00000018 Code RO 2 i.main main.o - 0x08000bf8 0x08000bf8 0x0000000c Code RO 3 i.middleware_init main.o - 0x08000c04 0x08000c04 0x00000038 Code RO 3546 i.mw_bluetooth_drv_init mw_bluetooth.o - 0x08000c3c 0x08000c3c 0x00000038 Code RO 254 i.mw_led0_init mw_led.o - 0x08000c74 0x08000c74 0x00000014 Code RO 255 i.mw_led0_off mw_led.o - 0x08000c88 0x08000c88 0x00000014 Code RO 256 i.mw_led0_on mw_led.o - 0x08000c9c 0x08000c9c 0x0000003c Code RO 257 i.mw_led_drv_init mw_led.o - 0x08000cd8 0x08000cd8 0x00000028 Code RO 292 i.mw_printf_insert_data mw_printf.o - 0x08000d00 0x08000d00 0x00000010 Code RO 3548 i.mw_receive_one_byte mw_bluetooth.o - 0x08000d10 0x08000d10 0x00000014 Code RO 3549 i.mw_send_one_byte mw_bluetooth.o - 0x08000d24 0x08000d24 0x00000010 Code RO 315 i.mw_soft_timer_user_systick_update mw_soft_timer.o - 0x08000d34 0x08000d34 0x00000010 Code RO 3550 i.mw_usart_deinit mw_bluetooth.o - 0x08000d44 0x08000d44 0x000000b8 Code RO 3551 i.mw_usart_init mw_bluetooth.o - 0x08000dfc 0x08000dfc 0x00000020 Data RO 3768 Region$$Table anon$$obj.o + 0x08000358 0x08000358 0x00000070 Code RO 645 i.NVIC_Init misc.o + 0x080003c8 0x080003c8 0x00000014 Code RO 646 i.NVIC_PriorityGroupConfig misc.o + 0x080003dc 0x080003dc 0x00000020 Code RO 2245 i.RCC_APB1PeriphClockCmd stm32f10x_rcc.o + 0x080003fc 0x080003fc 0x00000020 Code RO 2246 i.RCC_APB1PeriphResetCmd stm32f10x_rcc.o + 0x0800041c 0x0800041c 0x00000020 Code RO 2247 i.RCC_APB2PeriphClockCmd stm32f10x_rcc.o + 0x0800043c 0x0800043c 0x00000020 Code RO 2248 i.RCC_APB2PeriphResetCmd stm32f10x_rcc.o + 0x0800045c 0x0800045c 0x000000d4 Code RO 2255 i.RCC_GetClocksFreq stm32f10x_rcc.o + 0x08000530 0x08000530 0x00000008 Code RO 604 i.SetSysClock system_stm32f10x.o + 0x08000538 0x08000538 0x000000e0 Code RO 605 i.SetSysClockTo72 system_stm32f10x.o + 0x08000618 0x08000618 0x00000008 Code RO 324 i.SysTick_Handler bsp_timer.o + 0x08000620 0x08000620 0x00000084 Code RO 325 i.SysTick_ISR bsp_timer.o + 0x080006a4 0x080006a4 0x00000060 Code RO 607 i.SystemInit system_stm32f10x.o + 0x08000704 0x08000704 0x000000b0 Code RO 326 i.TIM2_IRQHandler bsp_timer.o + 0x080007b4 0x080007b4 0x00000018 Code RO 2876 i.TIM_ARRPreloadConfig stm32f10x_tim.o + 0x080007cc 0x080007cc 0x00000006 Code RO 2883 i.TIM_ClearITPendingBit stm32f10x_tim.o + 0x080007d2 0x080007d2 0x00000018 Code RO 2888 i.TIM_Cmd stm32f10x_tim.o + 0x080007ea 0x080007ea 0x00000022 Code RO 2909 i.TIM_GetITStatus stm32f10x_tim.o + 0x0800080c 0x0800080c 0x00000012 Code RO 2913 i.TIM_ITConfig stm32f10x_tim.o + 0x0800081e 0x0800081e 0x0000000c Code RO 2915 i.TIM_InternalClockConfig stm32f10x_tim.o + 0x0800082a 0x0800082a 0x00000002 PAD + 0x0800082c 0x0800082c 0x000000a4 Code RO 2959 i.TIM_TimeBaseInit stm32f10x_tim.o + 0x080008d0 0x080008d0 0x00000044 Code RO 3660 i.USART1_IRQHandler interrupt_handler.o + 0x08000914 0x08000914 0x0000001e Code RO 3424 i.USART_ClearITPendingBit stm32f10x_usart.o + 0x08000932 0x08000932 0x00000018 Code RO 3427 i.USART_Cmd stm32f10x_usart.o + 0x0800094a 0x0800094a 0x00000002 PAD + 0x0800094c 0x0800094c 0x0000009c Code RO 3429 i.USART_DeInit stm32f10x_usart.o + 0x080009e8 0x080009e8 0x00000054 Code RO 3431 i.USART_GetITStatus stm32f10x_usart.o + 0x08000a3c 0x08000a3c 0x0000004a Code RO 3433 i.USART_ITConfig stm32f10x_usart.o + 0x08000a86 0x08000a86 0x00000002 PAD + 0x08000a88 0x08000a88 0x000000d8 Code RO 3434 i.USART_Init stm32f10x_usart.o + 0x08000b60 0x08000b60 0x0000000a Code RO 3441 i.USART_ReceiveData stm32f10x_usart.o + 0x08000b6a 0x08000b6a 0x00000008 Code RO 3444 i.USART_SendData stm32f10x_usart.o + 0x08000b72 0x08000b72 0x00000006 Code RO 427 i._sys_exit bsp_usart.o + 0x08000b78 0x08000b78 0x0000003c Code RO 521 i.bsp_Init bsp.o + 0x08000bb4 0x08000bb4 0x00000084 Code RO 332 i.bsp_InitHardTimer bsp_timer.o + 0x08000c38 0x08000c38 0x00000058 Code RO 557 i.bsp_InitLed bsp_led.o + 0x08000c90 0x08000c90 0x000000a0 Code RO 333 i.bsp_InitTimer bsp_timer.o + 0x08000d30 0x08000d30 0x00000014 Code RO 559 i.bsp_LedOff bsp_led.o + 0x08000d44 0x08000d44 0x0000002c Code RO 561 i.bsp_LedToggle bsp_led.o + 0x08000d70 0x08000d70 0x00000002 Code RO 522 i.bsp_RunPer10ms bsp.o + 0x08000d72 0x08000d72 0x00000002 PAD + 0x08000d74 0x08000d74 0x00000028 Code RO 523 i.bsp_RunPer1ms bsp.o + 0x08000d9c 0x08000d9c 0x0000001c Code RO 334 i.bsp_SoftTimerDec bsp_timer.o + 0x08000db8 0x08000db8 0x0000000c Code RO 1 i.bsp_init main.o + 0x08000dc4 0x08000dc4 0x0000000c Code RO 301 i.get_systick_ms mw_soft_timer.o + 0x08000dd0 0x08000dd0 0x00000014 Code RO 2 i.main main.o + 0x08000de4 0x08000de4 0x0000000c Code RO 3 i.middleware_init main.o + 0x08000df0 0x08000df0 0x00000038 Code RO 3672 i.mw_bluetooth_drv_init mw_bluetooth.o + 0x08000e28 0x08000e28 0x00000038 Code RO 238 i.mw_led0_init mw_led.o + 0x08000e60 0x08000e60 0x00000014 Code RO 239 i.mw_led0_off mw_led.o + 0x08000e74 0x08000e74 0x00000014 Code RO 240 i.mw_led0_on mw_led.o + 0x08000e88 0x08000e88 0x0000003c Code RO 241 i.mw_led_drv_init mw_led.o + 0x08000ec4 0x08000ec4 0x00000028 Code RO 276 i.mw_printf_insert_data mw_printf.o + 0x08000eec 0x08000eec 0x00000010 Code RO 3674 i.mw_receive_one_byte mw_bluetooth.o + 0x08000efc 0x08000efc 0x00000014 Code RO 3675 i.mw_send_one_byte mw_bluetooth.o + 0x08000f10 0x08000f10 0x00000010 Code RO 3676 i.mw_usart_deinit mw_bluetooth.o + 0x08000f20 0x08000f20 0x000000b8 Code RO 3677 i.mw_usart_init mw_bluetooth.o + 0x08000fd8 0x08000fd8 0x00000020 Data RO 3937 Region$$Table anon$$obj.o - Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08000e1c, Size: 0x000006f0, Max: 0x00005000, ABSOLUTE) + Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08000ff8, Size: 0x00000728, Max: 0x00005000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object - 0x20000000 0x08000e1c 0x00000008 Data RW 151 .data app_led.o - 0x20000008 0x08000e24 0x00000002 Data RW 294 .data mw_printf.o - 0x2000000a 0x08000e26 0x00000002 PAD - 0x2000000c 0x08000e28 0x00000004 Data RW 316 .data mw_soft_timer.o - 0x20000010 0x08000e2c 0x00000014 Data RW 2146 .data stm32f10x_rcc.o - 0x20000024 - 0x00000010 Zero RW 258 .bss mw_led.o - 0x20000034 - 0x00000032 Zero RW 293 .bss mw_printf.o - 0x20000066 0x08000e40 0x00000002 PAD - 0x20000068 - 0x00000028 Zero RW 3552 .bss mw_bluetooth.o - 0x20000090 - 0x00000060 Zero RW 3644 .bss c_w.l(libspace.o) - 0x200000f0 - 0x00000200 Zero RW 516 HEAP startup_stm32f10x_md.o - 0x200002f0 - 0x00000400 Zero RW 515 STACK startup_stm32f10x_md.o + 0x20000000 0x08000ff8 0x00000002 Data RW 278 .data mw_printf.o + 0x20000002 0x08000ffa 0x00000002 PAD + 0x20000004 0x08000ffc 0x00000004 Data RW 303 .data mw_soft_timer.o + 0x20000008 0x08001000 0x0000001d Data RW 341 .data bsp_timer.o + 0x20000025 0x0800101d 0x00000001 Data RW 524 .data bsp.o + 0x20000026 0x0800101e 0x00000002 PAD + 0x20000028 0x08001020 0x00000014 Data RW 608 .data system_stm32f10x.o + 0x2000003c 0x08001034 0x00000014 Data RW 2275 .data stm32f10x_rcc.o + 0x20000050 - 0x00000010 Zero RW 242 .bss mw_led.o + 0x20000060 - 0x00000032 Zero RW 277 .bss mw_printf.o + 0x20000092 0x08001048 0x00000002 PAD + 0x20000094 - 0x0000000c Zero RW 339 .bss bsp_timer.o + 0x200000a0 - 0x00000028 Zero RW 3678 .bss mw_bluetooth.o + 0x200000c8 - 0x00000060 Zero RW 3813 .bss c_w.l(libspace.o) + 0x20000128 - 0x00000200 Zero RW 639 HEAP startup_stm32f10x_md.o + 0x20000328 - 0x00000400 Zero RW 638 STACK startup_stm32f10x_md.o ============================================================================== @@ -1327,30 +1450,30 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug Object Name - 148 20 0 8 0 18409 app_led.o - 60 8 0 0 0 15938 bsp.o - 96 14 0 0 0 1455 bsp_led.o - 102 0 0 0 0 23581 bsp_timer.o - 6 0 0 0 0 9196 bsp_usart.o + 0 0 0 0 0 37716 app_led.o + 102 12 0 1 0 17271 bsp.o + 152 20 0 0 0 1467 bsp_led.o + 636 64 0 29 12 19606 bsp_timer.o + 6 0 0 0 0 496 bsp_usart.o 0 0 0 0 0 32 core_cm3.o - 94 6 0 0 0 1034 interrupt_handler.o - 48 0 0 0 0 221948 main.o - 132 22 0 0 0 1995 misc.o - 292 46 0 0 40 3600 mw_bluetooth.o - 156 34 0 0 16 2798 mw_led.o - 40 10 0 2 50 1304 mw_printf.o - 28 10 0 4 0 1641 mw_soft_timer.o - 64 26 236 0 1536 1000 startup_stm32f10x_md.o - 286 0 0 0 0 3616 stm32f10x_gpio.o - 340 44 0 20 0 15584 stm32f10x_rcc.o - 246 42 0 0 0 4406 stm32f10x_tim.o - 602 28 0 0 0 14364 stm32f10x_usart.o - 328 28 0 0 0 2641 system_stm32f10x.o + 68 6 0 0 0 540 interrupt_handler.o + 44 0 0 0 0 221880 main.o + 132 22 0 0 0 1971 misc.o + 292 46 0 0 40 3544 mw_bluetooth.o + 156 34 0 0 16 2750 mw_led.o + 40 10 0 2 50 4380 mw_printf.o + 12 6 0 4 0 1101 mw_soft_timer.o + 64 26 236 0 1536 992 startup_stm32f10x_md.o + 286 0 0 0 0 12268 stm32f10x_gpio.o + 340 44 0 20 0 15520 stm32f10x_rcc.o + 282 42 0 0 0 26355 stm32f10x_tim.o + 602 28 0 0 0 14284 stm32f10x_usart.o + 328 28 0 20 0 2981 system_stm32f10x.o ---------------------------------------------------------------------- - 3076 338 268 36 1644 344542 Object Totals + 3552 388 268 80 1656 385154 Object Totals 0 0 32 0 0 0 (incl. Generated) - 8 0 0 2 2 0 (incl. Padding) + 10 0 0 4 2 0 (incl. Padding) ---------------------------------------------------------------------- @@ -1396,15 +1519,15 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug - 3344 350 268 36 1740 342418 Grand Totals - 3344 350 268 36 1740 342418 ELF Image Totals - 3344 350 268 36 0 0 ROM Totals + 3820 400 268 80 1752 382926 Grand Totals + 3820 400 268 80 1752 382926 ELF Image Totals + 3820 400 268 80 0 0 ROM Totals ============================================================================== - Total RO Size (Code + RO Data) 3612 ( 3.53kB) - Total RW Size (RW Data + ZI Data) 1776 ( 1.73kB) - Total ROM Size (Code + RO Data + RW Data) 3648 ( 3.56kB) + Total RO Size (Code + RO Data) 4088 ( 3.99kB) + Total RW Size (RW Data + ZI Data) 1832 ( 1.79kB) + Total ROM Size (Code + RO Data + RW Data) 4168 ( 4.07kB) ==============================================================================