网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> 技术文库 >> 嵌入式 >> 文章正文
  GCC中”naked”的使用: 如何使中断程序不保护现场           ★★★ 【字体:
GCC中”naked”的使用: 如何使中断程序不保护现场
作者:61IC录入    文章来源:本站原创    点击数:    更新时间:2006-4-7    
发现一点小窍门,与大家分享。大家如果发现其他的窍门能继续跟贴。
进入中断程序时,gcc会自动保护现场,把有改动的寄存器的值自动保存。
例如:
SIGNAL (SIG_OVERFLOW1) /* Note [2] */
{
    OCR = pwm; /* Note [4] */
}
编译后的结果如下:
//////////////////////////////////////////////////////////////////////////////////////
//(进入中断程序时,自动保存了将要改动的寄存器r0,r1,r24,r25,以及返回时加入了"reti")
//////////////////////////////////////////////////////////////////////////////////////

SIGNAL (SIG_OVERFLOW1) /* Note [2] */
{
  5c:   1f 92          push   r1
  5e:   0f 92          push   r0
  60:   0f b6          in   r0, 0x3f   ; 63
  62:   0f 92          push   r0
  64:   11 24          eor   r1, r1
  66:   8f 93          push   r24
  68:   9f 93          push   r25
    OCR = pwm; /* Note [4] */
  6a:   80 91 61 00    lds   r24, 0x0061
  6e:   90 91 62 00    lds   r25, 0x0062
  72:   9b bd          out   0x2b, r25   ; 43
  74:   8a bd          out   0x2a, r24   ; 42
  76:   9f 91          pop   r25
  78:   8f 91          pop   r24
  7a:   0f 90          pop   r0
  7c:   0f be          out   0x3f, r0   ; 63
  7e:   0f 90          pop   r0
  80:   1f 90          pop   r1
  82:   18 95          reti


加入以下这句以后,不保护现场:
void SIG_OVERFLOW1( void ) __attribute__ ( ( signal, naked ) );
检查编译的结果如下:
SIGNAL (SIG_OVERFLOW1) /* Note [2] */
{
    OCR = pwm; /* Note [4] */
  5c:   80 91 61 00    lds   r24, 0x0061
  60:   90 91 62 00    lds   r25, 0x0062
  64:   9b bd          out   0x2b, r25   ; 43
  66:   8a bd          out   0x2a, r24   ; 42

注意这时最后要手动加入”reti”, 返回中断程序。

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号