ucos中什么情况下会执行cortex m4 pendsvV

请教uCOS移植问题==
热门型号:
&&&当前位置:
请教uCOS移植问题
用户名:luomh98
注册时间: 22:28:00
请教uCOS移植问题
这两天终于把uCOS2.86移植到自己的板上了,自己在DEMO框架中写了一个简单的测试,下载到FLASH中可以正常调试和运行。试着把它改到在SRAM中运行,希望以后调试时可以减少烧录FLASH次数。照着参考做了一些改动:将STM32F_FLASH.ICF改为STM32F_RAM.ICF,里面的内容改为:defineregionFLASH=mem:[from0xx801FFFF];defineregionSRAM=mem:[from0xx2000FFFF];defineblockHEAPwithalignment=8,size=0x{};defineblockCSTACKwithalignment=8,size=0x{};initializebycopy{readwrite};donotinitialize{section.noinit};placeatstartofSRAM{readonlysection.intvec};placeinSRAM{readonly};placeinSRAM{readwrite,blockHEAP,blockCSTACK};修改工程配置连到STM32F_RAM.ICF,编译下载到SRAM都没有问题,调试器可以进入main,并可以再单步执行几条初始化语句,当程序执行到OSStart()内部时,跑飞了,以下列出我观测到的一些数据:1.中断向量已经正确配置在SRAM0x开始处2.程序执行到OSStart()内部的OSStartHighRdy()语句时跑飞到FLASH的0x08002d64这应该是App_Fault_ISR,HardF3.观察.map文件HEAP,CSTACK,_intvec等均分配在SRAM中,没有发现不对的地方可能自己还没有吃透uCOS,请玩过uCOS的朋友指点一下,大家都可以交流交流。我的环境:,IAR5.20,JLINK,板上目前只用了串口,硬件可以保证是正常运转的。
用户名:flyvoice
注册时间: 15:57:00
我也在学习,请教一些经验
用户名:black_wolf
注册时间: 16:16:00
单步运行检查一下在什么指令时跑飞的
用户名:静默
注册时间: 17:05:00
若&“3.观察.map文件HEAP,CSTACK,_intvec等均分配在SRAM中,没有发现不对的地方”这都没发现不对的地方。应该不会出现在这个函数上NVIC_SetVectorTable
用户名:luomh98
注册时间: 21:01:00
在执行OSStart()内部的OSStartHighRdy()语句时出现问题,因为OSStartHighRdy为ASM代码,还没有看明白:OSStartHighRdy&&&&LDR&&&&&R0,&=NVIC_SYSPRI14&&&&;&Set&the&PendSV&exception&priority&&&&LDR&&&&&R1,&=NVIC_PENDSV_PRI&&&&STRB&&&&R1,&[R0]&&&&MOVS&&&&R0,&#0&&&;&Set&the&PSP&to&0&for&initial&context&switch&call&&&&MSR&&&&&PSP,&R0&&&&LDR&&&&&R0,&=OSRunning&&&;&OSRunning&=&TRUE&&&&MOVS&&&&R1,&#1&&&&STRB&&&&R1,&[R0]&&&&LDR&&&&&R0,&=NVIC_INT_CTRL;&Trigger&the&PendSV&exception&(causes&context&switch)&&&&LDR&&&&&R1,&=NVIC_PENDSVSET&&&&STR&&&&&R1,&[R0]&&&&CPSIE&&&I&&&&&&&&&&&&;&Enable&interrupts&at&processor&levelOSStartHang&&&&B&&&&&&&OSStartHang&&&&&&&&&&&;&Should&never&get&here
用户名:luomh98
注册时间: 21:09:00
uCOSII没有用NVIC_SetVectorTable来设置&_intvec在执行OSStartHighRdy()之前用View/Memory命令观察0x段,感觉_intvec是对的,个人认为:uCOSII在&app_vect_v5.c中用下面数组定义的形式将_intvec设置好的:__root&&const&&APP_INTVECT_ELEM&&__vector_table[]&@&&.intvec&&=&{{&.Ptr&=&(void&*)__sfe(&&CSTACK&&)},&__iar_program_start,App_NMI_ISR,...}
用户名:black_wolf
注册时间: 21:28:00
同意&4&楼这个函数的意义在源代码里都说明了;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&START&MULTITASKING;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&void&OSStartHighRdy(void);;&Note(s)&:&1)&This&function&triggers&a&PendSV&exception&(essentially,&causes&a&context&switch)&to&cause;&&&&&&&&&&&&&&the&first&task&to&start.;;&&&&&&&&&&&2)&OSStartHighRdy()&MUST:;&&&&&&&&&&&&&&a)&Setup&PendSV&exception&priority&to&;&&&&&&&&&&&&&&b)&Set&initial&PSP&to&0,&to&tell&context&switcher&this&is&first&;&&&&&&&&&&&&&&c)&Set&OSRunning&to&TRUE;;&&&&&&&&&&&&&&d)&Trigger&PendSV&;&&&&&&&&&&&&&&e)&Enable&interrupts&(tasks&will&run&with&interrupts&enabled).;********************************************************************************************************
用户名:luomh98
注册时间: 21:54:00
可以运行到&&&CPSIE&&&I此时观察向量表如下:0x&32&00&20&c5&2f&00&20&f5&2f&00&20&f9&2f&00&20&&&&&&&&&&&&&05&30&00&20&fd&2f&00&20&01&30&00&20&09&30&00&20&&&&&&&&&&&&09&30&00&20&09&30&00&20&09&30&00&20&09&30&00&20&&&&&&&&&&&&&09&30&00&20&09&30&00&20&ef&2d&00&20&89&25&00&20&&&&&&&&&&&&&95&17&00&20&a1&17&00&20&ad&17&00&20&b9&17&00&20&&&&&&&&&&&&&c5&17&00&20&d1&17&00&20&dd&17&00&20&e9&17&00&20&&&&&&&&&&&&&f5&17&00&20&01&18&00&20&0d&18&00&20&19&18&00&20&&&&&&&&&&&&&25&18&00&20&31&18&00&20&3d&18&00&20&49&18&00&20&&&&&&&&&&&&&55&18&00&20&61&18&00&20&6d&18&00&20&79&18&00&20&&&&&&&&&&&&&85&18&00&20&91&18&00&20&9d&18&00&20&a9&18&00&20&&&&&&&&&&&&&b5&18&00&20&c1&18&00&20&cd&18&00&20&d9&18&00&20&&&&&&&&&&&&&e5&18&00&20&f1&18&00&20&fd&18&00&20&09&19&00&20&&&&&&&&&&&&&15&19&00&20&21&19&00&20&2d&19&00&20&39&19&00&20&&&&&&&&&&&&&45&19&00&20&51&19&00&20&5d&19&00&20&69&19&00&20&&寄存器&IPSR&=&0随后单步运行&&&&&B&&&&&&&OSStartHang,&&&在这里循环等待全速运行后,OS&没有跳转到&App_TaskStart&任务(正常情况下应该到这个任务)此时,停止运行,可以看到程序指针停在了&PC&=&0x08002d64ISPR&=&0x,&PRIMASK&=&0x,&FAULTMASK&=&0x应该是引发了App_Fault_ISR&中断,Hard&F奇怪的是:PC为什么=0x08002d64&指向了Flash,而不是指向SRAM中的向量表
用户名:black_wolf
注册时间: 9:53:00
STM32中断向量表的默认位置是0x,如果要改到RAM中运行要设置一下中断向量表的位置(告诉内核中断向量表在什么地方),在OSStart()之前加一句NVIC_SetVectorTable((u32)0xx00);试试看看来要想系统跑稳定还需要大量工作啊!
用户名:猎狗
注册时间: 18:26:00
今天早上,rtx&uc&俺都在芯片的sram进行调试,单步也正常,为什么这么顺利呢
用户名:luomh98
注册时间: 11:04:00
就是你说的这个问题:STM32中断向量表的默认位置是0x,如果要改到RAM中运行要设置一下中断向量表的位置(告诉内核中断向量表在什么地方),在OSStart()之前加一句NVIC_SetVectorTable((u32)0xx00);谢谢了!感觉经过这轮调试,对ARM内核有了一个初步的了解!
热门型号:查看: 1560|回复: 6
启用MicroLIB uCOSIII工作正常,关闭MicroLIB后执行OSStart进入HardFault_Handler
主题帖子精华
初级会员, 积分 67, 距离下一级还需 133 积分
在线时间2 小时
我用STM32CubeMX图形工具创建一个工程,然后将原子哥的uCOSiii移植过去,当MicroLIB开启的时候运行正常,而关闭MicroLIB后则停止在OSStart函数里。
跟踪了一下,发现进入os_cpu_a.asm中的OSStartHighRdy函数时进入死循环,网上查了一些资料,一般出现这种问题都是PendSV_Handler没有正确开启或名字错误。
检查了一下都正常的,麻烦有经验的同学指导一下是什么问题,万分感谢!
16:32 上传
点击文件名下载附件
10.25 MB, 下载次数: 241
回复【5楼】hhlh2l:
---------------------------------
是不是你打开的姿势不对,你的截图不是我的附件。
问题已经找到了,OSTaskStkInit函数没有对FPU的寄存器正确圧栈,PendSV_Handler弹栈时又对FPU寄存器进行了出栈操作,导致最后PC指针错误,程序跑飞了。
为什么OSTaskStkInit函数没有圧栈FPU寄存器呢,因为定义__FPU_PRESENT、__FPU_USED两个宏的头文件没有引用。。。。
主题帖子精华
初级会员, 积分 67, 距离下一级还需 133 积分
在线时间2 小时
回复【5楼】hhlh2l:
---------------------------------
是不是你打开的姿势不对,你的截图不是我的附件。
问题已经找到了,OSTaskStkInit函数没有对FPU的寄存器正确圧栈,PendSV_Handler弹栈时又对FPU寄存器进行了出栈操作,导致最后PC指针错误,程序跑飞了。
为什么OSTaskStkInit函数没有圧栈FPU寄存器呢,因为定义__FPU_PRESENT、__FPU_USED两个宏的头文件没有引用。。。。
主题帖子精华
初级会员, 积分 67, 距离下一级还需 133 积分
在线时间2 小时
调试进度更新:
再次调试发现OSStartHighRdy函数正常执行,没有问题,PendSV_Handler也能正常执行,然而执行到最后一条BX&LR时,LR的值为0xFFFFFFED,然后PC指针跳到0x处开始运行,这样正常吗?
主题帖子精华
金钱104463
在线时间648 小时
帮顶。。。。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
初级会员, 积分 172, 距离下一级还需 28 积分
在线时间25 小时
我看了下你的源码,你的ucos初始化,任务函数什么的在哪里,我看你的源码没有这些东西嘛。
主题帖子精华
初级会员, 积分 172, 距离下一级还需 28 积分
在线时间25 小时
d699c28e238eaea7a25a1d9_525.bmp (0 Bytes, 下载次数: 0)
22:54 上传
这个是你的main函数,我下的文件没有错吧,
& & OSInit(&err); &&&&&&&&&
& & OSTaskCreate (/*创建一个任务*/); & & & & & & & & & & & & & & &&
& & OSStart(&err); &
至少需要这些流程,ucos才会正常调度的。
主题帖子精华
初级会员, 积分 172, 距离下一级还需 28 积分
在线时间25 小时
谢谢你的分享。
&我好奇的是我的姿势一般和标准的啊。
&可以分享下正确的姿势吗?
&
Powered byucOS_II移植:Stm32启动代码分析 - 嵌入式系统论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
ucOS_II移植:Stm32启动代码分析
资深工程师
13:55:57  
本帖最后由 eehome 于
10:03 编辑
用的编译工具是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& & 0x;定义堆栈大小& && && && && && &AREA& &STACK, NOINIT, READWRITE, ALIGN=3Stack_Mem& && & SPACE&&Stack_Size__initial_sp ;此处定义STACK段的程序,该段入口为__initial_sp,这是值在后面放在了0x的位置处,作为MSP的初始值,一般程序;编译的时候,由编译器赋值。我的编译器将其赋为0x,如果用到了外接的SRAM,需要用;__initial_sp EQU0x + Stack_Size 来定义; &h& HeapConfiguration;& &&o& Heap Size (in Bytes) &0x0-0xFFFFFFFF:8&; &/h&& && && && && && && && && && && &&&Heap_Size& && & EQU& & 0x & && && && && & AREA& & HEAP, NOINIT, READWRITE, ALIGN=3__heap_baseHeap_Mem& && &&&SPACE&&Heap_Size__heap_limit & && && && && & PRESERVE8& && && && && & THUMB
; Vector Table Mapped toAddress 0 at Reset;下面是地址0x 开始处的中断向量表,此段名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_IRQH DMA1 Channel 1& && && && && & DCD& &&&DMA1_Channel2_IRQH DMA1 Channel 2& && && && && & DCD& &&&DMA1_Channel3_IRQH DMA1 Channel 3& && && && && & DCD& &&&DMA1_Channel4_IRQH DMA1 Channel 4& && && && && & DCD& &&&DMA1_Channel5_IRQH DMA1 Channel 5& && && && && & DCD& &&&DMA1_Channel6_IRQH DMA1 Channel 6& && && && && & DCD& &&&DMA1_Channel7_IRQH DMA1 Channel 7& && && && && & DCD& &&&ADC1_2_IRQHandler& && && & ; ADC1_2& && && && && & DCD& &&&USB_HP_CAN1_TX_IRQH USB HighPriority or CAN1 TX& && && && && & DCD& &&&USB_LP_CAN1_RX0_IRQHUSB 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 handlerReset_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& && &.& && && && && & ENDPHardFault_Handler\& && && && && & PROC& && && && && & EXPORT&&HardFault_Handler& && && & [WEAK]& && && && && & B& && & .& && && && && & ENDPMemManage_Handler\& && && && && & PROC& && && && && & EXPORT&&MemManage_Handler& && && & [WEAK]& && && && && & B& && & .& && && && && & ENDPBusFault_Handler\& && && && && & PROC& && && && && & EXPORT&&BusFault_Handler& && && &&&[WEAK]& && && && && & B& && & .& && && && && & ENDPUsageFault_Handler\& && && && && & PROC& && && && && & EXPORT&&UsageFault_Handler& && && &[WEAK]& && && && && & B& && & .& && && && && & ENDPSVC_Handler& &&&PROC& && && && && & EXPORT&&SVC_Handler& && && && && & [WEAK]& && && && && & B& && & .& && && && && & ENDPDebugMon_Handler\& && && && && & PROC& && && && && & EXPORT&&DebugMon_Handler& && && &&&[WEAK]& && && && && & B& && & .& && && && && & ENDP;PendSV_Handler&&PROC;& && && && && & EXPORT&&PendSV_Handler& && && && & [WEAK]; (for uCOS-II)OSPendSV& && &&&PROC& && && && && & EXPORT&&OSPendSV& && && && && && & [WEAK]& && && && && & B& && & .& && && && && & ENDPSysTick_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_IRQHandlerPVD_IRQHandlerTAMPER_IRQHandlerRTC_IRQHandlerFLASH_IRQHandlerRCC_IRQHandlerEXTI0_IRQHandlerEXTI1_IRQHandlerEXTI2_IRQHandlerEXTI3_IRQHandlerEXTI4_IRQHandlerDMA1_Channel1_IRQHandlerDMA1_Channel2_IRQHandlerDMA1_Channel3_IRQHandlerDMA1_Channel4_IRQHandlerDMA1_Channel5_IRQHandlerDMA1_Channel6_IRQHandlerDMA1_Channel7_IRQHandlerADC1_2_IRQHandlerUSB_HP_CAN1_TX_IRQHandlerUSB_LP_CAN1_RX0_IRQHandlerCAN1_RX1_IRQHandlerCAN1_SCE_IRQHandlerEXTI9_5_IRQHandlerTIM1_BRK_IRQHandlerTIM1_UP_IRQHandlerTIM1_TRG_COM_IRQHandlerTIM1_CC_IRQHandlerTIM2_IRQHandlerTIM3_IRQHandlerTIM4_IRQHandlerI2C1_EV_IRQHandlerI2C1_ER_IRQHandlerI2C2_EV_IRQHandlerI2C2_ER_IRQHandlerSPI1_IRQHandlerSPI2_IRQHandlerUSART1_IRQHandlerUSART2_IRQHandlerUSART3_IRQHandlerEXTI15_10_IRQHandlerRTCAlarm_IRQHandlerUSBWakeUp_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结束
资深工程师
13:56:24  
在上面有一段函数声明,感觉那些声明很麻烦,其实,如果不用这种方式,在DCD的命令前面用 IMPORT声明会简洁很多。当然,这里面具体的差异还有些不太明白,希望懂的朋友解释一下。下面是stm32f10x_vector.s里面的import方式Stm32f10x_vector.s
; If you need to useexternal SRAM mounted on STM3210E-EVAL board as data memory,; change the followingdefine value to '1' (or choose ENABLE in Configuration Wizard window);//& &&o& External SRAM Configuration &0=& DISABLE &1=& ENABLE DATA_IN_ExtSRAM&&EQU& & 0
; 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& & 0x & && && && && &&&AREA& & STACK, NOINIT, READWRITE, ALIGN=3Stack_Mem& && &&&SPACE&&Stack_Size __initial_sp; If you need to useexternal SRAM mounted on STM3210E-EVAL board as data memory; and internal SRAM forStack, uncomment the following line and comment the line above;__initial_sp& & EQU 0x + Stack_S &UseMicroLIB& must be checked in& && && && && && && && && && && && && && && &;the Project-&Options-&Target window ; Amount of memory (inbytes) allocated for Heap; Tailor this value toyour application needs;// &h& HeapConfiguration;//& &&o& Heap Size (in Bytes) &0x0-0xFFFFFFFF:8&;// &/h& Heap_Size& && &&&EQU& & 0x00000C60 & && && && && &&&AREA& & HEAP, NOINIT, READWRITE, ALIGN=3__heap_baseHeap_Mem& && && &SPACE&&Heap_Size__heap_limit& && && &&& & && && && && &&&THUMB& && && && && &&&PRESERVE8 & && && && && &&&; Import exceptions handlers& && && && && &&&IMPORT&&NMIException& && && && && &&&IMPORT&&HardFaultException& && && && && &&&IMPORT&&MemManageException& && && && && &&&IMPORT&&BusFaultException& && && && && &&&IMPORT&&UsageFaultException& && && && && &&&IMPORT&&SVCHandler& && && && && &&&IMPORT&&DebugMonitor& && && && && &&&IMPORT&&PendSVC& && && && && &&&IMPORT&&SysTickHandler& && && && && &&&IMPORT&&WWDG_IRQHandler& && && && && &&&IMPORT&&PVD_IRQHandler& && && && && &&&IMPORT&&TAMPER_IRQHandler& && && && && &&&IMPORT&&RTC_IRQHandler& && && && && &&&IMPORT&&FLASH_IRQHandler& && && && && &&&IMPORT&&RCC_IRQHandler& && && && && &&&IMPORT&&EXTI0_IRQHandler& && && && && &&&IMPORT&&EXTI1_IRQHandler& && && && && &&&IMPORT&&EXTI2_IRQHandler& && && && && &&&IMPORT&&EXTI3_IRQHandler& && && && && &&&IMPORT&&EXTI4_IRQHandler& && && && && &&&IMPORT&&DMA1_Channel1_IRQHandler& && && && && &&&IMPORT&&DMA1_Channel2_IRQHandler& && && && && &&&IMPORT&&DMA1_Channel3_IRQHandler& && && && && &&&IMPORT&&DMA1_Channel4_IRQHandler& && && && && &&&IMPORT&&DMA1_Channel5_IRQHandler& && && && && &&&IMPORT&&DMA1_Channel6_IRQHandler& && && && && &&&IMPORT&&DMA1_Channel7_IRQHandler& && && && && &&&IMPORT&&ADC1_2_IRQHandler& && && && && &&&IMPORT&&USB_HP_CAN_TX_IRQHandler& && && && && &&&IMPORT USB_LP_CAN_RX0_IRQHandler& && && && && &&&IMPORT&&CAN_RX1_IRQHandler& && && && && &&&IMPORT&&CAN_SCE_IRQHandler& && && && && &&&IMPORT&&EXTI9_5_IRQHandler& && && && && &&&IMPORT&&TIM1_BRK_IRQHandler& && && && && &&&IMPORT&&TIM1_UP_IRQHandler& && && && && &&&IMPORT&&TIM1_TRG_COM_IRQHandler& && && && && &&&IMPORT&&TIM1_CC_IRQHandler& && && && && &&&IMPORT&&TIM2_IRQHandler& && && && && &&&IMPORT&&TIM3_IRQHandler& && && && && &&&IMPORT&&TIM4_IRQHandler& && && && && &&&IMPORT&&I2C1_EV_IRQHandler& && && && && &&&IMPORT&&I2C1_ER_IRQHandler& && && && && &&&IMPORT&&I2C2_EV_IRQHandler& && && && && &&&IMPORT&&I2C2_ER_IRQHandler& && && && && &&&IMPORT&&SPI1_IRQHandler& && && && && &&&IMPORT&&SPI2_IRQHandler& && && && && &&&IMPORT&&USART1_IRQHandler& && && && && &&&IMPORT&&USART2_IRQHandler& && && && && &&&IMPORT&&USART3_IRQHandler& && && && && &&&IMPORT&&EXTI15_10_IRQHandler& && && && && &&&IMPORT&&RTCAlarm_IRQHandler& && && && && &&&IMPORT&&USBWakeUp_IRQHandler& && && && && &&&IMPORT&&TIM8_BRK_IRQHandler& && && && && &&&IMPORT&&TIM8_UP_IRQHandler& && && && && &&&IMPORT&&TIM8_TRG_COM_IRQHandler& && && && && &&&IMPORT&&TIM8_CC_IRQHandler& && && && && &&&IMPORT&&ADC3_IRQHandler& && && && && &&&IMPORT&&FSMC_IRQHandler& && && && && &&&IMPORT SDIO_IRQHandler& && && && && &&&IMPORT&&TIM5_IRQHandler& && && && && &&&IMPORT&&SPI3_IRQHandler& && && && && &&&IMPORT&&UART4_IRQHandler& && && && && &&&IMPORT&&UART5_IRQHandler& && && && && &&&IMPORT&&TIM6_IRQHandler& && && && && &&&IMPORT&&TIM7_IRQHandler& && && && && &&&IMPORT&&DMA2_Channel1_IRQHandler& && && && && &&&IMPORT&&DMA2_Channel2_IRQHandler& && && && && &&&IMPORT&&DMA2_Channel3_IRQHandler& && && && && &&&IMPORT&&DMA2_Channel4_5_IRQHandler& && && && && &&&;*******************************************************************************; Fill-up the VectorTable entries with the exceptions ISR address;*******************************************************************************& && && && && &&&AREA& & RESET, DATA, READONLY& && && && && &&&EXPORT&&__Vectors& && && && && && && & __Vectors& && &&&DCD __initial_sp& && && && &&&; Top ofStack& && && && && &&&DCD&&Reset_Handler& && && && && &&&DCD&&NMIException& && && && && &&&DCD&&HardFaultException& && && && && &&&DCD&&MemManageException& && && && && &&&DCD&&BusFaultException& && && && && &&&DCD&&UsageFaultException& && && && && &&&DCD&&0& && && && && &&&; Reserved& && && && && &&&DCD&&0& && && && && &&&; Reserved& && && && && &&&DCD&&0& && && && && &&&; Reserved& && && && && & DCD&&0& && && && && &&&; Reserved& && && && && &&&DCD&&SVCHandler& && && && && &&&DCD&&DebugMonitor& && && && && &&&DCD&&0& && && && && &&&; Reserved& && && && && &&&DCD&&PendSVC& && && && && &&&DCD&&SysTickHandler& && && && && &&&DCD&&WWDG_IRQHandler& && && && && &&&DCD&&PVD_IRQHandler& && && && && &&&DCD&&TAMPER_IRQHandler& && && && && &&&DCD&&RTC_IRQHandler& && && && && &&&DCD&&FLASH_IRQHandler& && && && && &&&DCD&&RCC_IRQHandler& && && && && &&&DCD&&EXTI0_IRQHandler& && && && && &&&DCD EXTI1_IRQHandler& && && && && &&&DCD&&EXTI2_IRQHandler& && && && && &&&DCD&&EXTI3_IRQHandler& && && && && &&&DCD&&EXTI4_IRQHandler& && && && && &&&DCD&&DMA1_Channel1_IRQHandler& && && && && &&&DCD&&DMA1_Channel2_IRQHandler& && && && && &&&DCD DMA1_Channel3_IRQHandler& && && && && &&&DCD&&DMA1_Channel4_IRQHandler& && && && && &&&DCD&&DMA1_Channel5_IRQHandler& && && && && &&&DCD&&DMA1_Channel6_IRQHandler& && && && && &&&DCD&&DMA1_Channel7_IRQHandler& && && && && &&&DCD&&ADC1_2_IRQHandler& && && && && &&&DCD&&USB_HP_CAN_TX_IRQHandler& && && && && &&&DCD&&USB_LP_CAN_RX0_IRQHandler& && && && && &&&DCD&&CAN_RX1_IRQHandler& && && && && &&&DCD&&CAN_SCE_IRQHandler& && && && && &&&DCD&&EXTI9_5_IRQHandler& && && && && &&&DCD&&TIM1_BRK_IRQHandler& && && && && &&&DCD&&TIM1_UP_IRQHandler& && && && && &&&DCD&&TIM1_TRG_COM_IRQHandler& && && && && &&&DCD&&TIM1_CC_IRQHandler& && && && && &&&DCD&&TIM2_IRQHandler& && && && && &&&DCD&&TIM3_IRQHandler& && && && && &&&DCD&&TIM4_IRQHandler& && && && && &&&DCD&&I2C1_EV_IRQHandler& && && && && &&&DCD&&I2C1_ER_IRQHandler& && && && && &&&DCD&&I2C2_EV_IRQHandler& && && && && &&&DCD&&I2C2_ER_IRQHandler& && && && && &&&DCD&&SPI1_IRQHandler& && && && && &&&DCD&&SPI2_IRQHandler& && && && && &&&DCD USART1_IRQHandler& && && && && &&&DCD&&USART2_IRQHandler& && && && && &&&DCD&&USART3_IRQHandler& && && && && &&&DCD&&EXTI15_10_IRQHandler& && && && && &&&DCD&&RTCAlarm_IRQHandler& && && && && &&&DCD&&USBWakeUp_IRQHandler & && && && && &&&DCD&&TIM8_BRK_IRQHandler& && && && && &&&DCD&&TIM8_UP_IRQHandler& && && && && &&&DCD&&TIM8_TRG_COM_IRQHandler& && && && && &&&DCD&&TIM8_CC_IRQHandler& && && && && &&&DCD&&ADC3_IRQHandler& && && && && &&&DCD&&FSMC_IRQHandler& && && && && &&&DCD&&SDIO_IRQHandler& && && && && &&&DCD&&TIM5_IRQHandler& && && && && &&&DCD&&SPI3_IRQHandler& && && && && &&&DCD&&UART4_IRQHandler& && && && && &&&DCD&&UART5_IRQHandler& && && && && &&&DCD&&TIM6_IRQHandler& && && && && &&&DCD&&TIM7_IRQHandler& && && && && &&&DCD&&DMA2_Channel1_IRQHandler& && && && && &&&DCD&&DMA2_Channel2_IRQHandler& && && && && &&&DCD&&DMA2_Channel3_IRQHandler& && && && && &&&DCD&&DMA2_Channel4_5_IRQHandler& && && && && &&&& && && && && &&&AREA& & |.text|, CODE, READONLY ; Reset handler routineReset_Handler& & PROC& && && && && &&&EXPORT&&Reset_Handler& && && && && && && &&&& && && && && && & & && && && && && && && && && && && && && && && && &&&IMPORT __main& && && && && &&&LDR& &&&R0, =__main& && && && && &&&BX& && &R0& && && && && &&&ENDP & && && && && &&&ALIGN ;*******************************************************************************; User Stack and Heapinitialization;*******************************************************************************& && && && && &&&IF& && &:DEF:__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 2008 STMicroelectronics *****END OF FILE*****Stm32f10x_vector.s结束
sp?&u:????& && && && &&&EXPORT&&DebugMon_Handler& && && &&&[WEAK]
& && && && && & B& && & .& && && && && & ENDP;PendSV_Handler&&PROC;& && && && && & EXPORT&&PendSV_Handler& && && && & [WEAK]; (for uCOS-II)OSPendSV& && &&&PROC& && && && && & EXPORT&&OSPendSV& && && && && && & [WEAK]& && && && && & B& && & .& && && && && & ENDPSysTick_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_IRQHandlerPVD_IRQHandlerTAMPER_IRQHandlerRTC_IRQHandlerFLASH_IRQHandlerRCC_IRQHandlerEXTI0_IRQHandlerEXTI1_IRQHandlerEXTI2_IRQHandlerEXTI3_IRQHandlerEXTI4_IRQHandlerDMA1_Channel1_IRQHandlerDMA1_Channel2_IRQHandlerDMA1_Channel3_IRQHandlerDMA1_Channel4_IRQHandlerDMA1_Channel5_IRQHandlerDMA1_Channel6_IRQHandlerDMA1_Channel7_IRQHandlerADC1_2_IRQHandlerUSB_HP_CAN1_TX_IRQHandlerUSB_LP_CAN1_RX0_IRQHandlerCAN1_RX1_IRQHandlerCAN1_SCE_IRQHandlerEXTI9_5_IRQHandlerTIM1_BRK_IRQHandlerTIM1_UP_IRQHandlerTIM1_TRG_COM_IRQHandlerTIM1_CC_IRQHandlerTIM2_IRQHandlerTIM3_IRQHandlerTIM4_IRQHandlerI2C1_EV_IRQHandlerI2C1_ER_IRQHandlerI2C2_EV_IRQHandlerI2C2_ER_IRQHandlerSPI1_IRQHandlerSPI2_IRQHandlerUSART1_IRQHandlerUSART2_IRQHandlerUSART3_IRQHandlerEXTI15_10_IRQHandlerRTCAlarm_IRQHandlerUSBWakeUp_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结束
贵州茅台酒&
资深工程师
14:03:48  
上面的两个文件,个人比较喜欢Stm32f10x_vector.s这种方式,代码比较简洁。当然,在使用Stm32f10x_vector.s这个文件时,应用程序的main()里面要有stm32单片机的外设初始化步骤。而使用startup_stm32f10x_md.s,需要将初始化外设的步骤放在一个单独的函数SystemInit& && & ()里面。具体采用哪种方式,看个人习惯了。
还有一点需要补充的是,在跳转语句:& && && && && &&&LDR& &&&R0, =__main& && && && && &&&BX& &&&R0& && && && && &&&ENDP__MAIN并不是你的应用程序中写的main(),而是编译器产生的几行代码,通过keil的模拟,定位到了如下几个地方:
1.jpg (18.18 KB, 下载次数: 0)
ucOS_II移植:Stm32启动代码分析1
14:01 上传
2.jpg (30.25 KB, 下载次数: 0)
ucOS_II移植:Stm32启动代码分析2
14:01 上传
3.jpg (21.22 KB, 下载次数: 0)
ucOS_II移植:Stm32启动代码分析3
14:01 上传
4.jpg (22.63 KB, 下载次数: 0)
ucOS_II移植:Stm32启动代码分析4
14:01 上传
5.jpg (40.93 KB, 下载次数: 0)
ucOS_II移植:Stm32启动代码分析5
14:01 上传
6.jpg (21.67 KB, 下载次数: 0)
ucOS_II移植:Stm32启动代码分析6
14:01 上传
7.jpg (48.92 KB, 下载次数: 0)
ucOS_II移植:Stm32启动代码分析7
14:02 上传
上述的几个代码执行完成之后,才跳转到用户编写的main()里面。上面的这些代码,从其名称来看,应该是初始化堆栈,初始化零代码区的功能。不过这个与我们的目标关系不大,暂且不去深究。
21:30:49  
正好要学!
14:50:02  
20:06:26  
其实云里雾里。不懂。。。
20:07:04  
我还需要学习。希望多指导。
18:24:50  
{:14:}{:14:}{:14:}{:14:}
14:35:06  
助理工程师
09:36:02  
学习了,希望楼主能在深入一点!
12:16:48  
原来学过,现在看的是半懂半不懂啊,头大!!
CellWise周军
15个问题&&&&&&&&3263个浏览
14个问题&&&&&&&&16567个浏览
6个问题&&&&&&&&6409个浏览
Powered by

我要回帖

更多关于 pendsv是什么中断 的文章

 

随机推荐