This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI-RTOS
大家好、
我有以下类,只要它实现了 Run()函数,它的任何子类都可以运行。
在 SYS/BIOS 中创建任务时、我必须附加静态类函数(与 POSIX API 相同)、因此我使用了静态类函数
函数技巧。 这种方法的问题在于、在运行时、所有任务基本上都具有相同的函数
嗯 (我认为是意外的)、当我创建 了更多的子应用程序崩溃时。
我认为任务堆栈存在问题 、但我不知道如何处理。
====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
类 ActiveCls{
专用:
Task_Params taskParams;
Task_handle taskLa;
ERROR_Block EB;
受保护:
void attach (void*(* tsk_fxn)(void* arg)、int priority){
ERROR_INIT (&EB);
Task_Params_init (&taskParams);
taskParams.priority = priority;
taskParams.STACKSIZE = 0x100000;
taskParams.arg0 =(UArg)此;
taskLa = Task_create (ActiveCls::__run、_taskParams、&EB);
if (taskLa ==空)
{
System_printf ("任务创建()失败!\n"\});
BIOS_exit (0);
}
/* pthread API 也是如此-但在 Windows 7下运行良好!! *
}
虚拟 void* Run(){
log
"警告.. 此类未实现 run()函数。\n");
返回0;
}
ActiveCls (int pri){
附加(&ActiveCls::run、pri);
}
ActiveCls(){
log ("警告.. 未设置类优先级,默认为优先级1。\n");
attach (&ActiveCls::run、1);
}
静态空_run (UARg a0、UARg A1){
(((ActiveCls*) a0)->Run();
}
};
类 AnExampleChild:公共 ActiveCls {
公共:
void* Run() {
日志("嘿!、我正在运行。。。\n")
}
};
====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
此致、
餐巾温泉
您好、Emmanuel、
没有堆崩溃、因为我之前遇到过堆崩溃、日志消息指示如果发生了堆崩溃。 我提供了64 MB 堆。 器件为6678、BIOS 版本为6.46.00.23。 C6000编译器为8.1.1。 请注意
此版本中已存在复制分配错误。
当我尝试调试内核时,我已经看到任务创建在 pthread.c 中使用 Memory_alloc(),从而使堆足够大,并在那里输入中断,这是安全的(我用-o 0重新编译内核)。
此外,当我以传统方式在 main()函数中创建任务时,不会发生崩溃。 (我为它们分配了完全相同的子函数和优先级、也分配了相同的堆栈存储器、所有这些都与我的第一个帖子中的相同)。
我还在这里附加了类的 POSIX 版本 -- e2e.ti.com/.../1323.ActiveCls.h (我尝试了其他版本以确保它不是 POSIX API 错误)。 但也发生了同样的事情。
如果您希望我也可以添加.pp 文件来尝试它。
此致、
餐巾温泉
我还附加了一些用于调试的捕获。