WinCE5读核笔记(五) KCall的实现
来源:互联网 发布:在线网络名片制作 编辑:程序博客网 时间:2024/05/22 16:01
KCall的实现
这个函数在内核中随处可见,它的实现是在armtrap.s中实现。
函数原型
intKCall(PKFN pfn, ...);
其中
typedefint (*PKFN)();
这个函数是可变数量的参数。第一个参数是函数指针。第二个参数是不定参数。规定,对于可变参数个数的传递,参数在4个以内,分别用r0,r1,r2,r3。超过的部分就用堆栈传递。
KCall使pfn在不可抢占的环境中运行,并在执行完之后,函数返回之前,如有需求,那么将有一次调度的机会。
过程
KCall先将CPU切换到SVCmode,执行pfn,然后切换到systemmode,检查需不需要调度。
如果需要调度,那么CPU再切回到SVCmode,并且关闭终端,跳转到SaveAndReschedule
调度条件
ldr r3, =KData ; (r3) = ptr to KDataStruct
ldrb r12, [r3,#bResched] ; (r12) = reschedule flag
cmp r12, #1
其实这里就是检测structKDataStruct 结构体的成员bResched,如果是1,那么标志需要调度。
SaveAndReschedule
用于准备thread的context,也就是填充structThread中的CPUCONTEXT ctx成员。它记录着CPU所有寄存器的内容,他们共同组成了threadcontext。之后进入FirstSchedule开始线程切换过程。
- WinCE5读核笔记(五) KCall的实现
- WinCE5读核笔记
- WinCE5读核笔记(二) 系统调用
- WinCE5读核笔记(四) 重新整理启动过程
- WinCE5读核笔记(三) 进程控制块(PCB)的初始化
- WinCE5的binfs实现
- WinCE5读核笔记(一) exception vector到底在哪里?
- Wince5.0下实现XP风格的开始菜单源码(VB.net编码实现)
- openCV学习笔记(五):滤波的实现
- ionic3学习笔记(五)-sidemenu的实现
- OPENCV笔记(五)Sobel算子的库函数实现与指针实现
- WinCE5.0 Platform builder 中实现中文手写 [WINCE 学习笔记]
- wince5.0内核的启动流程(MIPS为例)
- 写一个具体的按键驱动(WinCE5.0 S3C2440)
- Wince5.0实现xml,实现了tinyxml,ANSI版本的,与EVC之间用Unicode
- 数据结构学习笔记(五)--单链表的代码实现(未完)
- OpenCv学习笔记(五):使用VideoCapture类函数实现视频的播放
- Windows 8 Directx 开发学习笔记(五)山峰河谷模型的简单实现
- VB.NET 快速导出数据到Excel
- NUnit的使用(5)——NUnit的组成
- Excel输入编码输入时实现一键一提示功能
- 做人成功才能成为一个真正的人
- 其实有时没有风险就没有收获
- WinCE5读核笔记(五) KCall的实现
- 一个人想成功最好的办法就是仔细地审察自己
- 初始化(赋初值)的重要性
- 左眼落寞,右眼繁华
- ICMP协议与应对ICMP攻击防范
- 深入浅出理解索引结构
- 基于NHibernate的三层结构应用程序开发初步
- EXCEL中设置固定行列
- CSS 基础语法(二)