求助!!!MDK下的ARM指令集swi操作
当 SWI 处理程序得到对特定的例程编号的一个请求的时候,它找到这个例程的位置并执行它,并传递(有关的)任何数据。它是如何工作的?
首先查看一下如何使用它。一个 SWI 指令(汇编语言)看起来如下:
SWI &02
或
SWI "OS_Write0"
这些指令实际上是相同的,将被汇编成相同的指令。唯一的不同是第二个指令使用一个字符串来表示 SWI 编号 &02。在使用采用了字符串编号的程序的时候,在执行之前首先查找这个字符串。
让我们再次看一下第一个指令:
SWI &02
这是什么意思? 字面的意思是进入 SWI 处理程序并传递值 &02。在 RISC OS 中这意味着执行编号是 &02 的例程。
它是如何这么作的? 它如何传递 SWI 编号和进入 SWI 处理程序?
在ADS下是这样编写的,在MDK下面还是这样写么??
__swi(0x00) void OS_TASK_SW(void); /*任务级任务切换函数 */
__swi(0x01) void _OSStartHighRdy(void); /*运行优先级最高的任务 */
__swi(0x02) void OS_ENTER_CRITICAL(void); /*关中断 */
__swi(0x03) void OS_EXIT_CRITICAL(void); /*开中断 */
__swi(0x40) void *GetOSFunctionAddr(int Index); /*获取系统服务函数入口 */
__swi(0x41) void *GetUsrFunctionAddr(int Index);/*获取自定义服务函数入口 */
__swi(0x42) void OSISRBegin(void); /*中断开始处理 */
__swi(0x43) intOSISRNeedSwap(void); /*判断中断是否需要切换 */
__swi(0x80) void ChangeToSYSMode(void); /*任务切换到系统模式 */
__swi(0x81) void ChangeToUSRMode(void); /*任务切换到用户模式 */
__swi(0x82) void TaskIsARM(INT8U prio); /*任务代码是ARM代码 */
__swi(0x83) void TaskIsTHUMB(INT8U prio); /*任务代码是THUMB */ 我也一直被这个问题困扰,期待大虾来帮帮忙!
页:
[1]