分类: LINUX
2008-11-20 09:57:37
void boot( void ) __attribute__((naked,section (".boot")));
前一节讲述了如何在C中用 signal属性来写一个ISR.,以及它是如何使 执行上下文自动保存的(只有那些被ISR修改过的处理器寄存器才会得到保存)。然而,执行一个上下文切换需要保存完整的上下文。
应用程序代码能够 在进入ISR时,明确(explicitly)地 保存所有寄存器,但是这样会使 某些处理器寄存器 保存两次---一次是由编译器生成的代码,另一次是由应用程序自己。这不是我们所需要的,可以在'signal'属性后 添加 'naked'属性来避免:
void SIG_OUTPUT_COMPARE1A( void ) __attribute__ ( ( signal, naked ) );
void SIG_OUTPUT_COMPARE1A( void )
{
/* ISR C code for RTOS tick. */
vPortYieldFromTick();
}
'naked'属性阻止编译器生成任何函数入口或退出代码。现在变异这段代码,会得到更少的编译器输出: