I'm trying to create a class framework around tasks with the task function being a member function of a class.
//being debugged so ignore any syntax or formatting errors in sprintf
class AppTask {
private:
/**
* Task handle.
* Within SYS/BIOS tasks are identified by their task handle. This variable maintains the private handle that is accessible through the \sa get_taskHandle function
*/
Task_Handle _taskHandle;
Error_Block _eb;
char * _taskName;
protected:
extern "C" Void taskFxn(UArg a0, UArg a1);
Void systemLog(char *logMsg);
public:
AppTask(char * taskName);
virtual ~AppTask();
Task_Handle get_taskHandle(Void);
Void get_eb(Error_Block * eb);
char * get_taskName(Void);
};
AppTask::AppTask(char * taskName) {
int i;
char holdBuf[128];
Error_init(&_eb);
_taskHandle = Task_create(taskFxn, NULL, &_eb);
if (_taskHandle == NULL) {
sprintf(holdBuf,"AppTask::AppTask Failed to create task %s\n",taskName);
systemLog(holdBuf);
}
else
{
i = strlen(taskName);
_taskName =(char *)malloc(i);
memcpy(_taskName,taskName,i);
sprintf(holdBuf,"AppTask::AppTask Task name: %s Handle: %d",taskName,_taskHandle);
systemLog(holdBuf);
}
}
AppTask::~AppTask() {
// TODO Auto-generated destructor stub
char holdBuf[128];
Task_delete(&_taskHandle)
sprintf(holdBuf,"AppTask:~AppTask Task %c (%i) destroyed.",_taskName,(int)_taskHandle)
free(_taskName);
}
Void AppTask:: systemLog(char * logMsg)
{
System_printf("%s",logMsg);
}
Task_Handle AppTask:: get_taskHandle(Void)
{
return _taskHandle;
}
Void AppTask:: get_eb(Error_Block * perrorBlock)
{
memcpy(perrorBLock,&_eb,sizeof (Error_Block));
}
char * AppTask:: get_taskName(Void)
{
return _taskName;
}
Void AppTask:: taskFxn(UArg a0, UArg a1)
{
while(1) Task_sleep(10);
}
Task_create does not like being passed a cpp class function pointer. Any suggestions?