嵌入式微处理器系统的应用-Chapter12 嵌入式系统驱动软件开发.ppt

嵌入式微处理器系统的应用-Chapter12 嵌入式系统驱动软件开发.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
本文观看结束!!! 谢 谢 欣 赏! * * * * * * * * * 12.6.1 可重入函数与互斥 各种设备都是系统中的共享资源,设备驱动程序可能被各种运行的软件实体所调用,比如中断处理程序、任务或它们所调用的子函数,因此在编写驱动程序的时候需要考虑将来可能会在一个什么样的环境中使用这些设备,也就是说要考虑是否要编写可重入的驱动软件。 可重入性是指函数可以被多个任务/线程调用。 在多任务/线程系统中,函数是否具有可重入性是非常重要的,因为这是多个任务/线程可以共用此函数的必要条件。 编写可重入的驱动函数的一个重要原则是,如果使用全局变量、static变量,则应通过一定的互斥机制如关中断、信号量P/V操作等对其加以保护。 示例代码:不可重入函数 T_MODULE T_UWORD Example(T_WORD wPara) { T_UWORD temp; wTEST_Exam = wPara; // (**)wTEST_Exam是全局变量 temp = SquareExam( ); return temp; } 示例代码:可重入函数 T_MODULE T_UWORD Example(T_WORD wPara ) { T_UWORD temp; [申请信号量操作] wTEST_Exam = wPara; temp = SquareExam( ); [释放信号量操作] return temp; } 12.6.2 中断嵌套与可重入的中断处理程序 嵌套的中断处理方式将使系统响应外部紧急事件的能力得到提高,对于实时性要求较高的嵌入式系统是很重要的。 但是,中断嵌套将使代码更加复杂,对中断服务程序也有可重入性的要求。 如果有采取特殊的步骤防止系统状态的丢失,在另一个高优先级中断抢占了当前中断的情况下,中断是可以嵌套的。 对于ARM处理器而言,在进入中断处理程序后,需要注意保存LR_irq和SPSR_irq的内容。 在ARM系统中,要编写可重入的中断处理程序,还需注意并处理好以下问题: 注意 BL 指令的使用,因为BL 指令的返回地址信息可能会被第二个到来的中断破坏掉,而导致子程序不能正确返回,比如进入无限循环! 解决的方法是在使用BL指令之前切换模式(一般使用系统模式),以保证LR_irq的内容不被破坏。但是在处理程序的最后,必须切换回IRQ模式,并屏蔽中断(当 SPSR 的内容出栈保存到一个临时的寄存器后,避免它的内容被新的中断破坏) 对于第一级的中断处理程序必须用汇编语言编写,不能使用“__irq”关键字来帮助编译器识别并产生中断处理程序的汇编代码 在中断处理程序中还需要注意堆栈对齐的要求。ARM体系要求调用外部函数时须保持8字节的堆栈对齐,然而,当我们在中断处理程序中切换到系统模式下时,该模式下的堆栈并不要求8字节对齐,因此需注意以下的处理: 在中断处理程序中需要确认堆栈是8字节对齐的; 如果有必要,矫正堆栈的对齐,并且在中断返回前“撤消”这种矫正; 这些处理需要在重新使能中断前进行。 12.6.3 错误处理 一个设备可能在如下情况下产生中断: 正确完成了一次数据的发送 正确完成了一次数据的接收 传输过程中出现各种各样的错误如传输总线错误、位错误、校验和错误、超时错误、过载错误(overrun,即发送与接收速率不匹配,来不及接收或设备FIFO缓冲区溢出)、噪声干扰过大等 通常每个设备只通过一条中断请求线通知系统,因此当其中断请求被响应后还需要在中断处理程序中对该设备产生中断的具体原因做进一步的检查和分析(一般是查看其状态寄存器),并进行对应的处理 位 名称 描述 0 TDRE 传输数据寄存器空标志 1 TC 传输完成标志 2 RDRF 接收数据寄存器满标志. 3 IDLE IDLE线标志 4 OR Overrun标志 5 NF Noise标志 6 FE 帧错误标志 7 PF 极性错误标志 11 BERR 位错误标志 15 RAF 接收器激活标志 16 RXRDY eSCI 接收到了LIN 数据. 17 TXRDY LIN FSM 可以接受向ESCIx_LTR的又一个写操作. 18 LWAKE 接收到了LIN唤醒信号 19 STO 从设备超时. 20 PBERR 物理总线错误 21 CERR CRC校验错误 22 CKERR 校验和错误 23 FRC 祯完成. LIN 祯完成传输. 所有的LIN 数据字节都接收到 31 OVFL ESCIx_LRR 溢出. eSCI状态寄存器位域图 错误处理的动机和策略 完备的驱动软件设计在原则上应该考虑到可能出现的所有错误情况,并作出相应处理。 各种错误出现的概率也不相同,这与系统环境有一定的关系。

文档评论(0)

lingyun51 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档