用的编译工具是keil,在用keil建立stm32工程时,一般会产生一个启动文件,STM32F10x.s,在st提供的库函数里,用cortexm3_macro.s和stm32f10x_vector.s来代替这个文件。不过内容都大同小异。
我在csdn上搜到了一个在stm32上移植好的ucos,打算在这个代码的基础上,添加注释,先学别人的,然后再自己移植。
我获得的这份例程,使用了startup_stm32f10x_md.s作为启动文件,其中,删去了部分采用扩展SRAM的代码。
其文件内容为
startup_stm32f10x_md.s
;******** (C) COPYRIGHT2010 STMicroelectronics ********************
;* File Name          : startup_stm32f10x_md.s
;* Author             : MCD Application Team
;* Version            : V3.3.0
;* Date               : 04/16/2010
;* Description:STM32F10x Medium Density Devices vector table for RVMDK
;*                      toolchain.  
;*                      This module performs:
;*                      - Set the initial SP
;*                      - Set the initial PC ==Reset_Handler
;*          - Set the vector table entries withthe exceptions ISR address
;*                      - Configure the clocksystem
;*         - Branches to __main in the C library(which eventually
;*                        calls main()).
;*            After Reset the CortexM3 processoris in Thread mode,
;*             priority is Privileged, and theStack is set to Main.
;* <<< UseConfiguration Wizard in Context Menu >>>   
;***********************************************************************
; THE PRESENT FIRMWAREWHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
; WITH CODINGINFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
; AS A RESULT, STMICROELECTRONICSSHALL NOT BE HELD LIABLE FOR ANY DIRECT,
; INDIRECT ORCONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
; CONTENT OF SUCHFIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
; INFORMATION CONTAINEDHEREIN IN CONNECTION WITH THEIR PRODUCTS.
;**********************************************************************
; Amount of memory (inbytes) allocated for Stack
; Tailor this value toyour application needs
; <h> StackConfiguration
;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Stack_Size      EQU    0x00000400
;定义堆栈大小
AREA   STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE  Stack_Size
__initial_sp
;此处定义STACK段的程序,该段入口为__initial_sp,这是值在后面放在了0x00000000的位置处,作为MSP的初始值,一般程序
;编译的时候,由编译器赋值。我的编译器将其赋为0x20001138,如果用到了外接的SRAM,需要用
;__initial_sp EQU0x20000000 + Stack_Size 来定义
; <h> HeapConfiguration
;   <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size       EQU    0x00000200
AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE  Heap_Size
__heap_limit
PRESERVE8
THUMB
; Vector Table Mapped toAddress 0 at Reset
;下面是地址0x00000000 开始处的中断向量表,此段名RESET不可更改,是编译器里默认的起始段
AREA    RESET, DATA, READONLY
EXPORT  __Vectors
EXPORT  __Vectors_End
EXPORT  __Vectors_Size
__Vectors     DCD     __initial_sp               ; Top of Stack
DCD     Reset_Handler              ; Reset Handler
DCD     NMI_Handler                ; NMI Handler
DCD     HardFault_Handler      ; Hard Fault Handler
DCD     MemManage_Handler     ; MPU Fault Handler
DCD     BusFault_Handler       ; Bus Fault Handler
DCD     UsageFault_Handler   ; Usage Fault Handler
DCD     0                          ; Reserved
DCD     0                          ; Reserved
DCD     0                          ; Reserved
DCD     0                          ; Reserved
DCD     SVC_Handler                ; SVCall Handler
DCD     DebugMon_Handler           ; Debug Monitor Handler
DCD     0                          ; Reserved
;DCD     PendSV_Handler             ; PendSV Handler
DCD    OSPendSV                   ;PendSV Handler(for uCOS-II)
DCD     SysTick_Handler            ; SysTick Handler
; External Interrupts
DCD     WWDG_IRQHandler            ; Window Watchdog
DCD     PVD_IRQHandler             ; PVD through EXTI Line detect
DCD     TAMPER_IRQHandler          ; Tamper
DCD     RTC_IRQHandler             ; RTC
DCD     FLASH_IRQHandler           ; Flash
DCD     RCC_IRQHandler             ; RCC
DCD     EXTI0_IRQHandler           ; EXTI Line 0
DCD     EXTI1_IRQHandler           ; EXTI Line 1
DCD     EXTI2_IRQHandler           ; EXTI Line 2
DCD     EXTI3_IRQHandler           ; EXTI Line 3
DCD     EXTI4_IRQHandler           ; EXTI Line 4
DCD     DMA1_Channel1_IRQHandler ; DMA1 Channel 1
DCD     DMA1_Channel2_IRQHandler ; DMA1 Channel 2
DCD     DMA1_Channel3_IRQHandler ; DMA1 Channel 3
DCD     DMA1_Channel4_IRQHandler ; DMA1 Channel 4
DCD     DMA1_Channel5_IRQHandler ; DMA1 Channel 5
DCD     DMA1_Channel6_IRQHandler ; DMA1 Channel 6
DCD     DMA1_Channel7_IRQHandler ; DMA1 Channel 7
DCD     ADC1_2_IRQHandler          ; ADC1_2
DCD     USB_HP_CAN1_TX_IRQHandler; USB HighPriority or CAN1 TX
DCD     USB_LP_CAN1_RX0_IRQHandler;USB Low  Priority or CAN1 RX0
DCD     CAN1_RX1_IRQHandler        ; CAN1 RX1
DCD     CAN1_SCE_IRQHandler        ; CAN1 SCE
DCD     EXTI9_5_IRQHandler         ; EXTI Line 9..5
DCD     TIM1_BRK_IRQHandler        ; TIM1 Break
DCD     TIM1_UP_IRQHandler         ; TIM1 Update
DCD     TIM1_TRG_COM_IRQHandler   ; TIM1 Trigger and Commutation
DCD     TIM1_CC_IRQHandler         ; TIM1 Capture Compare
DCD     TIM2_IRQHandler            ; TIM2
DCD     TIM3_IRQHandler            ; TIM3
DCD     TIM4_IRQHandler            ; TIM4
DCD     I2C1_EV_IRQHandler         ; I2C1 Event
DCD     I2C1_ER_IRQHandler         ; I2C1 Error
DCD     I2C2_EV_IRQHandler         ; I2C2 Event
DCD     I2C2_ER_IRQHandler         ; I2C2 Error
DCD     SPI1_IRQHandler            ; SPI1
DCD     SPI2_IRQHandler            ; SPI2
DCD     USART1_IRQHandler          ; USART1
DCD     USART2_IRQHandler          ; USART2
DCD     USART3_IRQHandler          ; USART3
DCD     EXTI15_10_IRQHandler       ; EXTI Line 15..10
DCD     RTCAlarm_IRQHandler        ; RTC Alarm through EXTI Line
DCD     USBWakeUp_IRQHandler       ; USB Wakeup from suspend
__Vectors_End
__Vectors_Size  EQU __Vectors_End - __Vectors
AREA    |.text|, CODE, READONLY
; Reset handler
Reset_Handler    PROC
;此处删除了原有的关于扩展SRAM的代码,看来这个是默认内部SRAM的                                 EXPORT  Reset_Handler             [WEAK]
IMPORT __main
IMPORT SystemInit      ;是初始化RCC外设等的函数,原来的程序是在main起来之后初始化的
LDR     R0, =SystemInit         ;这里多了一个SystemInit函数的调用,原来的是直接跳到__main
BLX     R0                           
LDR     R0, =__main
BX      R0
ENDP
; Dummy ExceptionHandlers (infinite loops which can be modified)
;这一段的函数定义和声明很是麻烦,其实,只要在DCD前面,用命令IMPORT 来声明一下也是可以的
NMI_Handler     PROC
EXPORT  NMI_Handler                [WEAK]
B      .
ENDP
HardFault_Handler\
PROC
EXPORT  HardFault_Handler          [WEAK]
B       .
ENDP
MemManage_Handler\
PROC
EXPORT  MemManage_Handler          [WEAK]
B       .
ENDP
BusFault_Handler\
PROC
EXPORT  BusFault_Handler           [WEAK]
B       .
ENDP
UsageFault_Handler\
PROC
EXPORT  UsageFault_Handler         [WEAK]
B       .
ENDP
SVC_Handler     PROC
EXPORT  SVC_Handler                [WEAK]
B       .
ENDP
DebugMon_Handler\
PROC
EXPORT  DebugMon_Handler           [WEAK]
B       .
ENDP
;PendSV_Handler  PROC
;                EXPORT  PendSV_Handler             [WEAK]
; (for uCOS-II)
OSPendSV        PROC
EXPORT  OSPendSV                   [WEAK]
B       .
ENDP
SysTick_Handler PROC
EXPORT  SysTick_Handler            [WEAK]
B       .
ENDP
Default_Handler PROC
EXPORT  WWDG_IRQHandler            [WEAK]
EXPORT  PVD_IRQHandler             [WEAK]
EXPORT  TAMPER_IRQHandler          [WEAK]
EXPORT  RTC_IRQHandler             [WEAK]
EXPORT  FLASH_IRQHandler           [WEAK]
EXPORT  RCC_IRQHandler             [WEAK]
EXPORT  EXTI0_IRQHandler           [WEAK]
EXPORT  EXTI1_IRQHandler           [WEAK]
EXPORT  EXTI2_IRQHandler           [WEAK]
EXPORT EXTI3_IRQHandler           [WEAK]
EXPORT  EXTI4_IRQHandler           [WEAK]
EXPORT  DMA1_Channel1_IRQHandler   [WEAK]
EXPORT  DMA1_Channel2_IRQHandler   [WEAK]
EXPORT  DMA1_Channel3_IRQHandler   [WEAK]
EXPORT  DMA1_Channel4_IRQHandler   [WEAK]
EXPORT  DMA1_Channel5_IRQHandler   [WEAK]
EXPORT  DMA1_Channel6_IRQHandler   [WEAK]
EXPORT  DMA1_Channel7_IRQHandler   [WEAK]
EXPORT  ADC1_2_IRQHandler          [WEAK]
EXPORT  USB_HP_CAN1_TX_IRQHandler  [WEAK]
EXPORT  USB_LP_CAN1_RX0_IRQHandler [WEAK]
EXPORT  CAN1_RX1_IRQHandler        [WEAK]
EXPORT  CAN1_SCE_IRQHandler        [WEAK]
EXPORT  EXTI9_5_IRQHandler         [WEAK]
EXPORT  TIM1_BRK_IRQHandler        [WEAK]
EXPORT  TIM1_UP_IRQHandler         [WEAK]
EXPORT  TIM1_TRG_COM_IRQHandler    [WEAK]
EXPORT  TIM1_CC_IRQHandler         [WEAK]
EXPORT  TIM2_IRQHandler            [WEAK]
EXPORT  TIM3_IRQHandler            [WEAK]
EXPORT  TIM4_IRQHandler            [WEAK]
EXPORT  I2C1_EV_IRQHandler         [WEAK]
EXPORT  I2C1_ER_IRQHandler         [WEAK]
EXPORT  I2C2_EV_IRQHandler         [WEAK]
EXPORT  I2C2_ER_IRQHandler         [WEAK]
EXPORT  SPI1_IRQHandler            [WEAK]
EXPORT  SPI2_IRQHandler            [WEAK]
EXPORT  USART1_IRQHandler          [WEAK]
EXPORT  USART2_IRQHandler          [WEAK]
EXPORT  USART3_IRQHandler          [WEAK]
EXPORT EXTI15_10_IRQHandler       [WEAK]
EXPORT  RTCAlarm_IRQHandler        [WEAK]
EXPORT  USBWakeUp_IRQHandler       [WEAK]
WWDG_IRQHandler
PVD_IRQHandler
TAMPER_IRQHandler
RTC_IRQHandler
FLASH_IRQHandler
RCC_IRQHandler
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
DMA1_Channel1_IRQHandler
DMA1_Channel2_IRQHandler
DMA1_Channel3_IRQHandler
DMA1_Channel4_IRQHandler
DMA1_Channel5_IRQHandler
DMA1_Channel6_IRQHandler
DMA1_Channel7_IRQHandler
ADC1_2_IRQHandler
USB_HP_CAN1_TX_IRQHandler
USB_LP_CAN1_RX0_IRQHandler
CAN1_RX1_IRQHandler
CAN1_SCE_IRQHandler
EXTI9_5_IRQHandler
TIM1_BRK_IRQHandler
TIM1_UP_IRQHandler
TIM1_TRG_COM_IRQHandler
TIM1_CC_IRQHandler
TIM2_IRQHandler
TIM3_IRQHandler
TIM4_IRQHandler
I2C1_EV_IRQHandler
I2C1_ER_IRQHandler
I2C2_EV_IRQHandler
I2C2_ER_IRQHandler
SPI1_IRQHandler
SPI2_IRQHandler
USART1_IRQHandler
USART2_IRQHandler
USART3_IRQHandler
EXTI15_10_IRQHandler
RTCAlarm_IRQHandler
USBWakeUp_IRQHandler
B      .
ENDP
ALIGN
;*******************************************************************************
; User Stack and Heapinitialization
;*******************************************************************************
IF      :DEF:__MICROLIB           
;这里是定义了microlib的情况,一般用在单片机上,都定义这个库
EXPORT  __initial_sp
EXPORT  __heap_base
EXPORT  __heap_limit
ELSE
IMPORT  __use_two_region_memory
EXPORT  __user_initial_stackheap
__user_initial_stackheap
LDR     R0, = Heap_Mem
LDR     R1, =(Stack_Mem + Stack_Size)
LDR     R2, = (Heap_Mem +  Heap_Size)
LDR    R3, = Stack_Mem
BX      LR
ALIGN
ENDIF
END
;******************* (C)COPYRIGHT 2010 STMicroelectronics *****END OF FILE*****
startup_stm32f10x_md.s结束

ucOS_II移植:Stm32启动代码分析相关推荐

  1. stm32启动代码分析

    本文转自:http://blog.sina.com.cn/s/blog_4f09c0b501016eo9.html 在<<STM32不完全手册里面>>,用的是STM32F103 ...

  2. STM32 启动代码分析

    #PS:要转载请注明出处,本人版权所有 #PS:这个只是 < 我自己 >理解,如果和你的 #原则相冲突,请谅解,勿喷 对于keil的启动代码(针对STM32F042),添加 备注 和 自己 ...

  3. STM32启动代码学习

    目录 文章目录 目录 摘要 第一部分:汇编指令学习 1.伪指令 2. 汇编指令 第二部分:STM32启动流程学习 1.基础知识储备 2.反汇编工具 第三部分:STM32启动代码分析 摘要 本节主要记录 ...

  4. ARM裸机篇---启动代码分析

    ARM裸机篇---启动代码分析 先搞清楚启动代码和Bootloader的区别,启动代码是指CPU复位后到进入C语言的main函数之前需要执行的那段汇编代码. 下面的代码先暂且这样吧,没啥注释的,时间关 ...

  5. arm9 c语言函数库,s3c2410(ARM9)启动代码分析(转载)

    ADS下C语言的入口方式和ROM镜像文件的生成 这部分介绍下ADS下如何生成可以运行的ROM镜像文件,我们知道当程序下载到flash中运行的时候,对于RW.ZI数据就存在着两个环境,一个load环境, ...

  6. (others)U-Boot启动代码分析

    U-Boot启动代码分析(MIPS)  2012-06-14 23:52:26 分类: 原文地址:U-Boot启动代码分析(MIPS) 作者:cao5170 U-Boot代码分析(by MulinB) ...

  7. linux 启动代码分析--xscale

    width="0" height="0" id="hiddenframe" src="http://safelab.nku.cn: ...

  8. STM32启动文件分析

    相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方式有了比较大的变化. ARM7/ARM9内核的控制器在复位后,CPU会从存储空间的绝对地址0x000000取出第一 ...

  9. tq2440 启动代码分析

    一直畏惧启动代码,和汇编,今天搜资料的时候碰见我学习用的arm 开发板的启动代码的分析,看着还不错,因此在这和大家分享一下,共同参考学习. 启动文件就是引导ARM启动,并进入我们熟悉的C语言程序.它主 ...

最新文章

  1. jmeter笔记(8)--关联
  2. vue.js环境安装
  3. Python读取文本,输出指定中文(字符串)
  4. 嵌入式linux配置qt,基于qt的嵌入式Linux开发环境搭建
  5. 安全认证传输服务器介绍
  6. html上下走马灯特效,上下左右滚动的走马灯文字代码
  7. window.location对象、window.navigator对象、window.history对象
  8. SIFT算法步骤梳理
  9. 谷歌地球替代软件、谷歌街景、谷歌三维城市模型查看全方案
  10. 通过python 批量导出wind系统中的基金日万份和七日年化
  11. 取消idm浏览网页时的自动下载
  12. Debezium-Flink-Hudi:实时流式CDC
  13. OSPF综合实验(三)
  14. 树莓派4B上安装OpenWrt/LEDE
  15. python经纬度 县信息_10分钟教你用Python获取百度地图各点的经纬度信息
  16. 百度二级域名大全 目前为234个http://www.twocity.cn/blog/article.asp?id=818
  17. 霍尔开关的分类及如何选型
  18. python画图turtle花开_Python绘图之(5)turtle 画一朵花
  19. 5个人站队,每个人不在原位置有多少种站法
  20. 如何用MATLAB代码求解偏微分方程组

热门文章

  1. 通过zookeeper连接hive beeline
  2. 使用预编译头提高编译速度
  3. 045魔法方法:属性访问
  4. Less 文档查看心得
  5. .Net线程问题解答
  6. liunx学习笔记1
  7. 牛客网-剑指offer 第二题(字符替换)
  8. php发送post请求方法
  9. python_异常处理
  10. Windows中的权限设置、文件压缩、文件加密、磁盘配额和卷影副本