📄 swi_s3c2410.s
字号:
#define PID_OFT 0#define STATE_OFT 4#define COUNT_OFT 8#define PRIORITY_OFT 12#define CONTENT_OFT 16#define KERNELSP_OFT 96#define KERNELSTACK_OFT 100#define MAX_SWI_NUM 3 @ 虚拟地址=物理地址 #define SDRAM_BASE 0x30000000#define SDRAM_SIZE 0x04000000 .extern swi_table.text .global HandleSWIHandleSWI: stmdb sp!,{ r0-r12,lr } @ 保存使用到的寄存器和返回地址,不必保存那么多,以后要提高实时性时再改吧 ldr r4, [lr,#-4] @ lr-4为指令"swi n"的地址,此指令低24位就是n bic r4, r4,#0xff000000 cmp r4, #3 ldrls r5, =swi_table @ swi跳转表基址 ldrls lr, =swi_return @ 返回地址 ldrls pc, [r5,r4,lsl #2] @ 跳转到相应汇编处理函数 mov r0, #-1 @ 出错,返回-1swi_return: ldmia sp!,{ r0-r12,pc }^ @ 中断返回, ^表示将spsr的值复制到cpsr@ 进程退出处理函数,比如处理main函数退出.text.global sys_exit sys_exit: @ 将调用C函数do_exit(int error_code) @ r0=error_code ldr pc, =do_exit @ do_exit返回到swi_return.text.global sys_sleep sys_sleep: @ 将调用C函数int sleep(int time) @ r0=sleep time ldr pc, =do_sleep @ do_exit返回到swi_return.text.global sys_write sys_write: @ 将调用C函数int write(char *str) @ r0=sleep time ldr pc, =do_write @ do_exit返回到swi_return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -