天嵌 ARM开发社区

 找回密码
 注册
查看: 2910|回复: 3

关于裸奔程序触摸测试中的void __irq AdcTsAuto(void);

[复制链接]
191817 发表于 2012-3-30 20:56:52 | 显示全部楼层 |阅读模式
5
本帖最后由 191817 于 2012-3-30 20:58 编辑

请问各位大侠,在触摸屏测试实验Touchpanel.c中这条void __irq AdcTsAuto(void);函数声明里函数名前面加上__irq是什么意思,这是在哪里定义了的字符么?怎么找不到它的定义,没有GO TO可以找呢。在这先谢谢大家了。:handshake
我用ADS1.2找不到它的定义。

最佳答案

查看完整内容

找的资料 希望有用... 关于__irq使用,首先看ARM公司的说明:ARM 编译器 armcc 支持的函数关键字和运算符。下表列出的关键字是 ARM 对 C 和 C++ 标准的扩展。 表中没有介绍不具备 ARM 编译器特有的行为或限制的标准 C 和 C++ 关键字。 ARM 编译器支持的关键字扩展表: 关键字 __align __int64 __svc __ALIGNOF__ __INTADDR__ __svc_indirect __asm __irq __svc_indirect_r7 __declspec __packed __value_in_regs __forceinline __ ...
借我你的一生 发表于 2012-3-30 20:56:53 | 显示全部楼层
找的资料 希望有用...

关于__irq使用,首先看ARM公司的说明:ARM 编译器 armcc 支持的函数关键字和运算符。下表列出的关键字是 ARM 对 C 和 C++ 标准的扩展。 表中没有介绍不具备 ARM 编译器特有的行为或限制的标准 C 和 C++ 关键字。
ARM 编译器支持的关键字扩展表: 关键字
__align __int64 __svc
__ALIGNOF__ __INTADDR__ __svc_indirect
__asm __irq __svc_indirect_r7
__declspec __packed __value_in_regs
__forceinline __pure __weak
__global_reg __softfp __writeonly
__inline __smc  
通过使用 __irq 关键字,可以将 C 或 C++ 函数用作中断例程。__irq 是一个函数限定符。 它影响函数的类型。限制:将保留所有损坏的寄存器(浮点寄存器除外),而不仅限于通常在 AAPCS 中保留的寄存器。 必须使用缺省 AAPCS 模式。
通过将程序计数器设置为 lr-4 并将 CPSR 设置为 SPSR 中的值,可以退出该函数。 不能将任何自变量或返回值与 __irq 函数配合使用。
再看其他的一些解释:
armcc的编译器的C对ANSI C的关键字做了些扩展。
比如__irq 是用来声明IRQ和FIQ中断处理函数用的,可以自动返回原来的现场。__asm用来嵌入汇编代码等。
__irq为一个标识,用来表示一个函数是否为中断函数。对于不同的编译器,__irq在函数名中的位置不一样,例如:

ADS编译器中 : void __irq IRQ_Eint0(void);
Keil编译器中 : void IRQ_Eint0(void) __irq;

但是其意义一样,它所完成的任务是标识该函数为中断函数,在编译器编译是调用此函数时,先保护函数入口现场,然后执行中断函数,函数执行完毕,恢复中断现 场,这整个过程不需要用户重新编写代码来完成,由编译器自动完成。因而这也给不具备中断嵌套功能的ARM系统带来了问题,若使用 __irq 时有中断嵌套产生,这现场保护就会混乱。因此自己编写中断入口现场保护代码,并不使用 __irq 标识符号,就是这个原因。
总结如下:
1、若不想自己编写中断入口现场保护代码,而且使用中无中断嵌套,在中断函数中用 __irq 来标识我们的中断函数,否则出错;
2、若程序中要使用中断嵌套,对于无中断嵌套功能的ARM来说,一定要自己编写中断入口现场保护代码,而且不能用 __irq 标识我们的中断函数,否则出错。
回复

使用道具 举报

借我你的一生 发表于 2012-3-31 14:32:34 | 显示全部楼层
本帖最后由 借我你的一生 于 2012-3-31 14:34 编辑

...................................
回复

使用道具 举报

 楼主| 191817 发表于 2012-3-31 15:56:07 | 显示全部楼层
借我你的一生 发表于 2012-3-31 14:34
找的资料 希望有用...

关于__irq使用,首先看ARM公司的说明:ARM 编译器 armcc 支持的函数关键字和运算符 ...

:handshake谢谢你的回答,说的很详细。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-16 03:24 , Processed in 1.031250 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表