首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >RTP之编程限制

RTP之编程限制

作者头像
Taishan3721
发布2022-06-30 19:01:40
发布2022-06-30 19:01:40
9810
举报
文章被收录于专栏:这里只有VxWorks这里只有VxWorks

RTP的特点是隔离保护,不能直接访问Kernel。因此,在编程上,会有一些限制。

最大的限制是内存的访问。如果RTP与RTP之间,或者RTP与Kernel之间,需要传递少量数据,可以使用PublicMessage Queue。大量数据,可以使用共享数据区

RTP不能直接访问Device,可以通过IO操作中转,或使用共享数据区映射Device的Memory。

Kernel里的IO重定向函数ioGlobalStdGet()、ioGlobalStdSet()、ioTaskStdGet()、ioTaskStdSet(),在RTP里也就不能用了。但可以使用dup()、dup2()进行整个RTP的IO重定向。

还有一些Kernel的机制不能在RTP里使用了

  • intLock()/intCpuLock()、intUnlock()/intCpuUnlock(),因为RTP里不能锁中断
  • taskLock()/taskCpuLock()、taskUnlock()/taskCpuUnlock(),因为RTP里不能锁调度策略
  • taskInit(),可以使用taskCreate()代替
  • taskOptionsSet(),因为RTP任务的option没有可以修改的
  • taskSwitchHookAdd()、taskSwitchHookDelete()

既然中断受限,那么RTP里也不能使用WatchDog了,可以使用POSIX的timerLib代替。

  • wdCreate() - timer_create()
  • wdStart() - timer_connect() + timer_settime()
  • wdCancel() - timer_cancel()
  • wdDelete() - timer_delete()

还有几个函数的作用不一样了:exit()、kill()、raise()、sigqueue()

  • 在Kernel里,作用域是单个任务
  • 在RTP里,作用域是整个进程
  • 在RTP里,可以使用taskXxx()作用于单个任务 还有要补充的吗
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这里只有VxWorks 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档