isr的编写方法(isr系统包含的内容有哪些)

技术编写ISR最基本的原则是什么这篇文章将为大家详细讲解有关编写ISR最基本的原则是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。编写ISR最基本的原则就是:尽可能短。代码少是一方

本文将详细解释编写ISR的基本原则。边肖觉得挺实用的,就分享给大家参考。希望你看完这篇文章能有所收获。

写ISR的基本原则是:越短越好。一方面,代码不太重要。更重要的是,ISR不能调用可能会阻塞或延迟的操作。

因为ISR不在正常任务上下文中运行,也没有TCB,所以所有ISR共享一个堆栈(ISR_STACK_SIZE)。因此,ISR不能调用可能阻塞的函数。比如他们不能申请信号量,因为当信号量不可用时,内核会尝试将申请人切换到阻塞状态;但是,ISR可以释放信号量。此外,内存机制malloc()和free()使用信号量,因此ISR无法调用这些函数和任何Create或Delete机制。ISR无法通过VxWorks驱动程序执行输入输出。尽管在输入/输出系统中没有固定的限制,但大多数设备驱动程序需要任务上下文,因为它们可能会等待设备的反馈。一个重要的例外是VxWorks的Pipe机制,ISR可以用它来编写。ISR还可以调用一些VxWorks机制将消息打印到系统控制台:logMsg()、kprintf()和kputs()。

ISR无法使用浮点协处理器调用该机制。这是因为在VxWorks中,由intConnect()创建的中断驱动程序代码不保存和恢复浮点寄存器。如果ISR必须使用浮点指令,则需要使用fppArchLib中的函数显式保存和恢复浮点协处理器的寄存器。

在ISR中调用C语句时要非常小心。intConnect()机制要求中断发生时要执行的函数的地址,但不能使用非静态成员函数的地址,因此必须实现静态成员函数。并且您不能在ISR代码中实例化或删除对象。在ISR中执行的C代码应仅限于嵌入式C,不应使用异常或RTTI(运行时类型标识)。

ISR不应直接访问共享数据区。ISR继承它抢占的任务的内存上下文。如果任务没有映射共享数据区,它将无法访问内存并导致异常。为了可靠地访问共享数据区,ISR可以对映射共享数据区的任务进行相关操作。

那么在ISR中可以调用哪些机制或功能呢?

bLib

所有功能

errnoLib

errnoGet(),errnoSet()

事件库

事件发送()

fppArchLib

fppSave(),fppRestore()

intLib

intContext()、intCount()、intVecSet()、intVecGet()

intArchLib

intLock(),intUnlock()

logLib

日志消息()

lstLib

除lstFree()之外的所有功能

d>

mathALib

使用fppSave()/fppRestore()时,所有函数

msgQLib

msgQSend()

rngLib

除rngCreate()/rngDelete(),所有函数

pipeDrv

write()

selectLib

selWakeup(), selWakeupAll()

semLib

semFlush(),非互斥信号量的semGive()

semPxLib

sem_post()

sigLib

kill()

taskLib

taskSuspend(), taskResume(),  taskPrioritySet(), taskPriorityGet(), taskIdVerify(), taskIdDefault(),  taskIsReady(), taskIsSuspended(), taskIsPended(), taskIsDelayed(), taskTcb()

tickLib

tickAnnounce(), tickSet(), tickGet()

tyLib

tyIRd(), tyITx()

vxLib

vxTas(), vxMemProbe()

wdLib

wdStart(), wdCancel()

中断到任务的通信机制

  • 共享内存。ISR可以与任务代码共享变量、缓冲区和环形缓冲区

  • 信号量。ISRs可以释放信号量,任务可以接收或等待这些信号量(互斥信号量和VxMP共享信号量除外)

  • 消息队列。ISR可以向消息队列发送消息(使用VxMP的共享消息队列除外)。如果队列已满,则丢弃该消息。msgQSend (msgQId, buffer, nBytes, NO_WAIT,priority)

  • 管道。ISR可以向管道发送消息。如果管道已满,则丢弃该消息

  • 信号。ISR可以向任务发送信号,从而导致其信号处理程序的异步调度

  • VxWorks Event。ISR可以向任务发送VxWorks Event

关于“编写ISR最基本的原则是什么”这篇文章就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/155163.html

(0)

相关推荐

  • 缓存视频怎样转入本地视频,uc下载的视屏怎么转到本地

    技术缓存视频怎样转入本地视频,uc下载的视屏怎么转到本地打开UC浏览器点击下面状态栏中间的菜单按钮,选择【我的视频】;然后点击【已缓存的视频】;长按视频弹出的菜单中就可以看到【打开目录】;再然后长按需要移动的视频,选择【

    生活 2021年10月25日
  • 怎么开启Gzip文件做缓存

    技术怎么开启Gzip文件做缓存本篇内容介绍了“怎么开启Gzip文件做缓存”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 

    攻略 2021年11月5日
  • 舍瑟而作,一段诸子百家中的古文求译文

    技术舍瑟而作,一段诸子百家中的古文求译文1.天下有道舍瑟而作,丘不与易也【课文翻译】1.二三子何患于丧乎?天下之无道也久矣,天将以夫子为木铎。
    诸位何必为孔子丧失官位担忧呢?天下没有德政已经很久了,上天将借孔子来宣传大道

    生活 2021年10月30日
  • mysqlsla如何安装与使用

    技术mysqlsla如何安装与使用这篇文章给大家分享的是有关mysqlsla如何安装与使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mysqlsla的安装与使用1. mysqlsla[ro

    攻略 2021年12月4日
  • 十二节气顺口溜,二十四节气的顺口溜怎么说

    技术十二节气顺口溜,二十四节气的顺口溜怎么说《二十四节气歌》 春雨惊春清谷天十二节气顺口溜,夏满芒夏暑相连, 秋处露秋寒霜降,冬雪雪冬小大寒。 二十四节气,是中国古代人们用来分辨节气的时间及指导农事的一种方法。二十四节气

    生活 2021年10月21日
  • mysql中如何进行数据压缩性能对比

    技术mysql中如何进行数据压缩性能对比这篇文章给大家分享的是有关mysql中如何进行数据压缩性能对比的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 测试环境1.1 软硬件一台 64位 2

    攻略 2021年11月6日