*关于系统调用我自己再整理一下(系统调用,任务切换,pendsv中断,SVC,整个理顺打通了)

关于系统调用我自己再整理一下

 

https://www.sohu.com/a/163180953_777180

 

 

也就是系统调用之后还要恢复到用户态的,这感觉似乎就像中断,莫非内核态是在中断服务函数中完成的,还是说产生两次中断,用户态到内核态一次中断,内核态恢复到用户态一次中断。

https://blog.csdn.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的书也感觉就那样,没什么的。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值