原创 IAR的stm32f10x_vector.c文件的定义

2010-8-17 13:33 3704 3 3 分类: MCU/ 嵌入式

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

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条