商铺名称:厦门光沃自动化设备有限公司
联系人:吴(先生)
联系手机:
固定电话:
企业邮箱:1878187406@qq.com
联系地址:厦门市海沧区沧湖东一里海景奥斯卡
邮编:361000
联系我时,请说是在汽配名企网上看到的,谢谢!
由于非特权代码不能禁用中断,因此应用代码被迫使用RTOS服务来访问共享资源。由于RTOS服务在特权模式下运行,因此非特权任务必须通过Cortex-M提供的SVC机制切换回特权模式。SVC的行为类似中断,但由CPU指令触发。
在Cortex-M上,SVC指令使用一个8位参数来256个可能的RTOS服务。设计者决定非特权代码可以使用的RTOS服务。例如,你可能不希望允许非特权任务终止其它任务(或其本身)。此外,这些服务都不允许禁用中断,因为这将破坏在非特权模式下运行代码的目的。一旦调用,SVC指令跳转到SVC异常处理程序。
在Cortex-M3上,SVC处理程序将增加约1k字节的代码,需要执行75~125条CPU指令。因此,相同RTOS服务,在非特权代码中调用比特权模式调用需要更多的处理时间。
在非特权模式下运行代码还可以防止用户代码禁用中断,从而减少了锁定系统的机会。当然,如果用户代码进入无限循环,特别是在高优先级任务或ISR中时,锁定仍然可能发生。在这种情况下,通过使用看门狗可以恢复。
进程间通信
1、互斥量用于确保两个进程不同时访问相同的数据。注意,互斥量驻留在RTOS内存空间中,通过RTOS API,所有进程可以访问该互斥量。
2、需要访问受保护资源的任务必须首先获取互斥量。当任务完成共享资源访问后,互斥量将被释放。沙漏表示可选超时,当任务不希望永久等待所有者释放互斥量时,可以使用超时机制。
3、信号量也可以用来指示数据可用。
4、进程中的任务将数据存储到共享内存中,然后发出信号。
5、进程B中的任务等待进程A的信号。沙漏表示一个可选的超时,以避免永远等待信号。如果该信号未在规定的时间内发生,则RTOS将恢复该任务。在这种情况下,任务知道共享区域中没有存入任何东西。
6、如果没有发生超时,进程B确认数据处理完成。
7、进程A发信号量后,等待具有可选超时的确认。
8、通信也可以使用RTOS的消息队列机制。此时,从共享RAM区域动态分配缓冲区,进程A中的发送任务填充缓冲区,并将指针发送给进程B中的任务。
9、与信号量情况类似,等待进程B中的任务确认,并一个可选的超时。
内存和I/O访问错误处理
进程间可以通过共享内存进行通信,两个进程的MPU配置表中将出现相同的区域。
应用中也可以包含具有完全权限的系统级任务和ISR,允许它们访问所有内存、外设或CPU。
当违规发生时,系统的行为取决于应用程序,是哪个任务违规。例如,如果违规是由图形用户界面(GUI)造成的,可以终止并重新启动GUI,并且不会影响系统的其它部分。
但是,如果违规任务控制一个制动器,则异常处理程序可能需要在重启任务之前立即停止制动器。理想情况下,在产品开发过程中会捕获并纠正访问违规,否则,系统设计人员将需要评估所有可能的结果,并决定发生这种情况时该做什么。
MPU的工作是确保进程中的任务只能访问分配给它的内存和外设。但是,如果任务试图访问允许区域以外的数据呢?MPU会触发一个称为内存管理(MemManage)故障的CPU异常。
当故障发生时,系统行为取决于应用程序,但如何处理故障可能是很难确定的事情。首先,这些类型的故障应该在开发过程中被检测和纠正。然而,使用MPU的原因之一是为了防止发生的无效内存或外设访问,要么是因为系统验证期间未捕获某些偶发情况,或者是未经授权的访问。
MemManage故障通常由RTOS处理。理想情况下,嵌入式系统有一些机制可以记录和报告故障,以便在产品的下一个版本中修正。文件系统是记录这些故障的好地方,当然,还取决于故障处理程序。