关于pSOS

时间:2015-05-26 09:08:46

标签: rtos

在pSOS RTOS中,每个任务都有记事本寄存器。任务记事本寄存器的用途是什么?

每个任务会关联多少个任务记事本寄存器?

在什么情况下记事本寄存器可能有用(例如,这会在IPC或内存管理中使用吗?)。

3 个答案:

答案 0 :(得分:0)

该概念特定于pSOS,并在documentation中描述:

enter image description here

所以基本上它们只不过是存储在每个任务的TCB中的共享内存块。它们不是通常意义上的寄存器

我猜他们通过共享内存提供了一种简单但有限的IPC方式,但在32位系统上,对32位内存对象的访问已经是原子的,因此不清楚它们对具有访问器的静态变量提供了什么优势。如下:

static volatile uint32_t shared = 0 ;
uint32_t getShared(){ return shared ; }
void setShared( uint32_t val ){ shared = val ; }

这种自己动手的方法优于使用记事本寄存器;例如,您可以添加范围检查或其他验证,如果需要捕获对数据的所有读取或所有写入访问,则只需一个地方来设置断点。您甚至可以将一个或另一个访问器设置为一个任务专用,因此外部数据具有只读或只写语义,这使得系统更加健壮,而这些语义适用。

基本上我看到使用记事本寄存器的优点很少,因为它们特定于pSOS,它们的使用只会使其他系统的可移植性变得复杂。鉴于pSOS is largely obsolete

,尤其如此

答案 1 :(得分:0)

我过去曾使用过这些寄存器。通常用于将指针传递给需要信息的任务。这项技术是

  • 发送任务:

    t_setreg(INFO_REG_ID, task_id,(u32)&info);
    ev_send(INFO_REG_EVENT, task_id);
    
  • 接收任务:

    ev_receive(INFO_REG_EVENT,...);
    info = (info_struct *)t_getreg(INFO_REG_ID...);
    

pSOS调用的语法可能不正确,我没有在我面前提供我的手册。但我认为你得到了漂移。我发现它比通过队列传递消息更清晰。

答案 2 :(得分:-1)

每个任务有16个软件记事本32位寄存器。它们在任务的TCB中携带,可以分别使用t_setreg和t_getreg调用进行设置和读取。

这些寄存器的目的是以标准的系统范围方式为每个任务提供一组命名变量,这些变量可由其他任务设置和读取,包括其他处理器节点上的远程任务。

其中八个记事本寄存器保留供系统使用。其余八个可用于任何特定应用目的。