我有一些嵌入式操作系統功能,我需要在Linux機器上模擬。我被指示採用的方法是將嵌入式操作系統函數重載並將其包裝在POSIX線程中,以便Linux機器可以在單元測試期間處理嵌入式OS函數。功能指針typedef在c
的嵌入式操作系統函數來創建一個新的線程是: OSCreateTask(OStypeTFP functionPointer, OSTypeTcbP taskId, OStypePrio priority)
我需要轉換的是OStypeTFP
型成空函數指針pthread_create
預計:(void * (*)(void *)
就是編譯器告訴我這是期待)
我希望創建一個我可以使用它像一個typedef:
typedef void (*OStypeTFP)(void);
// Function to run task/thread in
void taskFunction(void) { while(1); }
// Overloaded Embedded OS function
void OSCreateTask(OStypeTFP tFP, OStypeTcbP tcbP, OStypePrio prio)
{
pthread_attr_t threadAttrs;
pthread_t thread;
pthread_attr_init(&threadAttributes);
pthread_create(&thread, &threadAttributes, &tFP, NULL);
}
// Creates a task that runs in taskFunction
OSCreateTask (taskFunction, id, prio);
但編譯器抱怨functionPointer
類型void (**)(void)
當pthread_create期望void * (*)(void *)
我需要改變我的typedef莫名其妙,還是我需要做一些類型轉換?都?
功能必須採取一個'無效*'參數和返回'無效*' – imreal
你需要閱讀更多關於['pthread_create'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_create.html)以及一般可能的線程。以及指向函數和函數的指針會衰減指針,以及操作符用指針變量的地址。 –
要「重載」一個函數(名稱),就是提供具有相同名稱但參數類型不同的不同函數。 C不支持。 –