Chinaunix首页 | 论坛 | 博客
  • 博客访问: 723665
  • 博文数量: 124
  • 博客积分: 3156
  • 博客等级: 中校
  • 技术积分: 1584
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-02 10:29
文章分类

全部博文(124)

文章存档

2012年(3)

2011年(2)

2010年(61)

2009年(34)

2008年(24)

我的朋友

分类: 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'属性阻止编译器生成任何函数入口或退出代码。现在变异这段代码,会得到更少的编译器输出:

阅读(2765) | 评论(0) | 转发(0) |
0

上一篇:m68k-elf-tools-20030314.sh

下一篇:ARM bl 和ldr

给主人留下些什么吧!~~