IAR的stm32f10x_vector.c文件的定义

来源:互联网 发布:js onload方法 编辑:程序博客网 时间:2024/06/08 11:16

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 

来自:http://bbs.ednchina.com/BLOG_ARTICLE_1819668.HTM

0 0
原创粉丝点击