天天看點

RTP之程式設計限制

RTP的特點是隔離保護,不能直接通路Kernel。是以,在程式設計上,會有一些限制。

最大的限制是記憶體的通路。如果RTP與RTP之間,或者RTP與Kernel之間,需要傳遞少量資料,可以使用Public的Message Queue。大量資料,可以使用共享資料區。

RTP不能直接通路Device,可以通過IO操作中轉,或使用共享資料區映射Device的Memory。

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

RTP之程式設計限制

還有一些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()作用于單個任務

    還有要補充的嗎