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
文章评论(0条评论)
登录后参与讨论