2015-05-26 18 views
-1

在pSOS RTOS中,每個任務都有記事本寄存器。 Task Notepad寄存器的用途是什麼?關於pSOS中的任務記事本寄存器

有多少個任務記事本寄存器將與每個任務相關聯?

在什麼情況下可能記事本寄存器是有用的(例如,將這個被在IPC或內存管理等使用?)。

+1

什麼是「記事本寄存器」? –

+0

vxworks – mjs

+0

中的「notepad register」我不認爲有這樣的事情。也許混淆來自WindRiver的收購和隨後放棄pSOS而贊成自己的VxWorks? 2000年收購時出現了一個[「融合」兼容層](http://www.embedded.com/print/4219411);我不知道這是否發生過,但可能包括記事本註冊?我想像一下,只有現有的pSOS客戶才能使用它。 – Clifford

回答

-1

每個任務有16個軟件記事本32位寄存器。它們被攜帶在任務的TCB中,可分別使用t_setreg和t_getreg調用進行設置和讀取。

這些寄存器的目的是提供給每個任務,在一個標準的全系統的方式,一組可以由其他任務設置和讀取,其中包括通過在其他處理器節點的遠程任務命名變量。

這些記事本寄存器中的八個保留給系統使用。其餘八個可用於任何特定應用的目的。

+0

您確定這是vxworks嗎?我找不到任何對記事本寄存器或t_setreg和t_getreg調用的引用。這些甚至不符合vxworks命名約定 – mjs

+0

對不起,這不是vxworks。這是PSOS。但是,vxworks提供了TCB擴展,我們可以在其中記錄註冊表,以便從psos遷移到vxworks將沒有什麼區別。基於psos中記事本寄存器的現有功能在遷移到vxworks後不會受到影響。 – chandran

+0

我認爲你應該真的要麼刪除這個問題,要麼將它和答案都重寫,並添加正確的標籤。如目前所示,您的問題和答案表明,vxworks具有這些記事本寄存器,並且在它沒有時調用t_setreg和t_getreg。 – mjs

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尤其如此。

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的語法調用可能是不正確的,我不沒有我的手冊在我面前。但我認爲你會得到漂移。我發現它比通過隊列傳遞消息更清潔。