IAR的stm32f10x_vector.c文件的定义
- annel2_IRQHandler,
- DMA2_Channel3_IRQHandler,
- DMA2_Channel4_5_IRQHandler,
- };
- #ifdef DATA_IN_ExtSRAM
- #pragma language=extended
- __interwork int __low_level_init(void);
- #pragma location="ICODE"
- __interwork int __low_level_init(void)
- {
- /* FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is
- required, then adjust the Register Addresses*/
- /* Enable FSMC clock */
- *(vu32 *)0x40021014 = 0x00000114;
- /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */
- *(vu32 *)0x40021018 = 0x000001E0;
- /* --------------- SRAM Data lines, NOE and NWE configuration ---------------*/
- /*---------------- SRAM Address lines configuration -------------------------*/
- /*---------------- NOE and NWE configuration --------------------------------*/
- /*---------------- NE3 configuration ----------------------------------------*/
- /*---------------- NBL0, NBL1 configuration ---------------------------------*/
- *(vu32 *)0x40011400 = 0x44BB44BB;
- *(vu32 *)0x40011404 = 0xBBBBBBBB;
- *(vu32 *)0x40011800 = 0xB44444BB;
- *(vu32 *)0x40011804 = 0xBBBBBBBB;
- *(vu32 *)0x40011C00 = 0x44BBBBBB;
- *(vu32 *)0x40011C04 = 0xBBBB4444;
- *(vu32 *)0x40012000 = 0x44BBBBBB;
- *(vu32 *)0x40012004 = 0x44444B44;
- /*---------------- FSMC Configuration ---------------------------------------*/
- /*---------------- Enable FSMC Bank1_SRAM Bank ------------------------------*/
- *(vu32 *)0xA0000010 = 0x00001011;
- *(vu32 *)0xA0000014 = 0x00000200;
- return (1);
- }
- #endif /*DATA_IN_ExtSRAM*/
- /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
typedef void( *intfunc )( void );
定义一个新类型,这个类型是一个函数指针,指针指向的函数类型是void (void)型,
符合标准C
typedef union { intfunc __fun; void * __ptr; } intvec_elem;
定义一个新类型,这个类型是一个联合体,联合体有两个元素,一个元素类型是intfunc,一个元素类型是void *
符合标准C
#pragma language=extended
#pragma segment="CSTACK"
void __iar_program_start( void );
申明外部函数,extern可以用,也可以不用
符合标准C
#pragma location = ".intvec" // 下面的变量存放在段 .intvec
//IAR扩展
/* STM32F10x Vector Table entries */
const intvec_elem __vector_table[] =
{
{ .__ptr = __sfe( "CSTACK" ) },
// { .__ptr = 常量 },
// 数组元素是联合体,联合体有两个元素,对联合体元素__ptr赋初值
//符合标准C
//__sfe( "CSTACK" ) 是段CSTACK的尾地址,更准确是段CSTACK下一个段的首地址(记忆中应该是这样)。
//IAR扩展
__iar_program_start,
//数组元素是联合体,联合体有两个元素,对联合体第一个元素__fun赋初值
//完整的写法是 { .__fun= __iar_program_start },
//这里简写成__iar_program_start,是否符合标准C,有待考证
.....
}
}
补充:
对联合体第一个元素赋初值,可以简写。
{ .__fun= __iar_program_start },
//__fun是联合体第一个元素,可直接简写成__iar_program_start.
//符合标准C
__sfe是IAR的“段操作符”segment operator。表示取某个段的后一个字节的地址。
比如"CSTACK"定义为0x20001000~0x20001fff。那__sfe( "CSTACK" ) 就得到0x20002000这个值,刚好用来初始化msp堆栈指针。
注意使用segment operator前,需要先定义段名如下:
#pragma segment="CSTACK"
IARstm32f10xvector c文 相关文章:
- 单片机检测矩阵键盘.c文件(11-30)
- 51单片机KEIL如何建立多个C文件及注意事项(11-28)
- keil 工程下多个C文件之间的关系(11-28)
- 如何将将字库或图片以数组的形式储存在.c 文件中(11-27)
- 51笔记2:keil中建立多个c文件时,变量重复定义(11-27)
- keil中建立多个c文件时,出现*** ERROR LXX(11-26)