最近在學習 VxWorks,想在 VxWorks 上開發一個較大的項目,考慮用 C++ 來開發,但是 VxWorks 提供的 API 好像都是 C 的,例如 taskSpawn 等,我不知道該怎麼在 .cpp 的程序中,開啟一個新的進程等相關工作。

所以我想詢問一下,當調用系統函數的時候,這些問題怎麼解決,以及在 VxWorks 系統下,開發 C++ 項目的可行性。


你在其它平臺也會有C++調用C的需求啊,Windows API很多也都是C寫的,難道你就不用了?顯然沒道理的事情啊。

一個CPP文件訪問C文件裏定義的函數,聲明那加上extern "C"就夠了,實際上VxWorks的系統頭文件裏都有加,直接用沒有任何問題,所以看不出來你說的C++會有什麼問題。

VxWorks的DKM模式下C++的庫是有點殘缺,是有這個問題,但你還可以用RTP啊,RTP裏對CPP的支持很好。不要告訴我你還用55x,那都是多少年前的事情了,而且除了特殊客戶,早就不賣這個license了,除非你用的就是盜版。

前面回答說要加INCLUDE_CTORS_DTORS的,我是沒加過,也用的好好的,不知道你們是不是還用的上個世紀的版本。

看了一下前面回答給的鏈接是6.2的,現在VxWorks 7都發布一年多了,7之前還有6.9.3 6.9.2 6.9.1 6.9 6.8.3 6.8.2 6.8.1 6.8 6.7 6.6 6.5 6.4在64之前的都已經很少有人買了


嗯,你連這個也想不明白,我表示對你的項目很擔心...

無論taskSpawn,sysClkRateSet,semTake等都是操作系統提供的介面,要使用時一樣是include頭文件,然後調用。

剩下的問題就是C和C++混合編譯的問題了。extern "c"可以解決絕大多數的問題。


以前的版本(5.4?)有WFC( Windriver Foundation Class), 其實就是把OS的一些東西封裝成了類,比如Process, Timer等等。現在版本好像沒有了。 不過自己做這個事情也不難,你可以試試看哦。

20150726

謝邀,手機不太方便,先佔坑了下午好好寫。

20150727

題主,你好,抱歉拖延了。

其實我是比較好奇你用C++的出發點?

我只能講講我日常見到的用途,我們都是用C語言,只有.h .c。

然後我們主要還是Vx5.5,現在也有Vx6.9的了,但是少。編譯工具5.5用的是TORNADO

6.9的工程,目前是用WindRiver Workbench.

不過我也很好奇題主用C++實現的一些高大上的功能,期待向題主學習。
誰告訴你這樣不行的?

說兩句可行性相關(可能的坑).

1. 我們知道gcc編譯器下, 在執行main函數前, 編譯器會幫我們做好全局對象和靜態對象的動態初始化工作, 運行的時候優先於main入口函數運行, 輪到vxworks,爽了,默認的內核壓根不支持,請看下面,只有打開了這個開關,vxworks才能支持全局靜態對象的動態初始化.

INCLUDE_CTORS_DTORS
/*
call complimer generated init functions
....c++ related
*/

這還沒完, 把開關打開了還不行,還有一些工作要做比如:

Munching | VxWorks on WordPress.com不過好像最近的版本不需要了? 建議全局搜索下配置文件中C++ 開關不止一處應該.

2. 嵌入式系統都有的, 還要自己設計allocator.

發現這已經有了一個list, 可參考:http://www.vxdev.com/docs/vx55man/vxworks/guide/c-wfc.html

@北極 說的是對的,新版本就沒那問題了。 新起的項目用最新靠譜,老的真折騰不動,我上學的時候實驗室用iar4.5(盜版。。) 現在他們還在用,iar已經6.*了
推薦閱讀:
查看原文 >>
相關文章