关于系统调用我自己再整理一下(系统调用,任务切换,pendsv中断,SVC,整个理顺打通了)
关于系统调用我自己再整理一下
https://www.sohu.com/a/163180953_777180
也就是系统调用之后还要恢复到用户态的,这感觉似乎就像中断,莫非内核态是在中断服务函数中完成的,还是说产生两次中断,用户态到内核态一次中断,内核态恢复到用户态一次中断。
https://blog.****.net/distancening/article/details/79503987
http://blog.sina.com.cn/s/blog_185268e880102xwzm.html
我想的没错,确实就是在中断服务函数里面去调用系统函数的,也就是在中断服务函数里面进行系统调用的!!!!!!!
这就和freertos里面的任务切换一样了,只不过它可以不恢复到之前的那个任务,可以恢复成其他任务,这样造成任务切换的!!!!!!它可以在中断服务函数里面去找到下一个是什么任务,现在我懂里面的原理了。现在那几个概念我都理清楚了!!!!!不乱了!!!!!这里面很关键的一点就是系统调用时pendsv的中断服务函数做的事情和任务切换时pendsv的中断服务函数做的事情不一样,系统调用时中断服务函数里面去调用了系统的函数,而且应该执行完了。任务切换时,中断服务函数做个了查找下一个任务,并设置好相应寄存器。当然两个的中断服务函数都有保存现场,最后恢复,只不过任务切换时不是恢复到原来那个任务/进程,而是恢复成想切换的那个任务/进程,这也是操作系统里的中断和单片机裸机里面的中断不同的地方,单片机的中断之后肯定是回到中断之前的那个位置了(这个华清的freertos老师似乎在第一节讲裸机和操作系统的编程区别的时候讲了,就B站上华清的freertos视频)
截图自《cortex m3权威指南(中文)》 那SVC和pendsv是什么关系?系统调用时到底用的SVC还是pendsv?
现在我看这段话也可以理解了!!!!!不乱了!!!!!你真正去把任务切换的细致过程,系统调用的过程细节都弄清楚之后这些自然就清楚了。
现在再看STM32的那个异常表就好理解很多,特别是之前说到有两个用在操作系统里面的异常,现在也理解了!
拍自《跟工程师学嵌入式开发》
拍自野火的《STM32库开发实战指南》
现在再看freertos的书也感觉就那样,没什么的。