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.

[参考译文] RTOS/TM4C1294NCPDT:动态任务_创建问题

Guru**** 2220740 points
Other Parts Discussed in Thread: SYSBIOS
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/642296/rtos-tm4c1294ncpdt-dynamic-task_create-issue

器件型号:TM4C1294NCPDT
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好!

我使用以下版本进行应用开发。

CCS - 6.2.

TI RTOS - tirtos_tivac_2_16_01_14

NDK -  NDK_2_25_00_09

BIOS - BIOS_6_45_02_31

我想使用 Task_create() API 从另一个任务动态创建任务。 但它返回 NULL 并且任务未被创建。 查找用于创建任务的以下代码。

Task_handle userPgmHandle;
Task_Params userPgmParams;

Task_Params_init (&userPgmParams);
userPgmParams.STACKSIZE = 2048;
userPgmParams.priority = 5;
userPgmHandle =
Task_create ((Task_FuncPtr) UserFunc、&userPgmParams、&EB);
if (userPgmHandle == NULL){
         System_printf ("用户程序启动失败\n");

但是、在 tcpHandlerHook 函数中添加任务时、创建任务的代码相同。

我还向 CFG 文件中添加了以下代码。

/*允许运行时创建/内存分配*/
VAR 默认值= xdc.useModule('xdc.runtime.Defaults');
VAR 类型= xdc.useModule('xdc.runtime.Types');
Defaults.common$.memoryPolicy = types.create_policy;
BIOS.runtimeCreatesEnabled = true;

 

如果我将上述代码添加到 cfg 文件中、则在运行时收到以下错误。

TI.SYSBIOS.KNL.Semaphore:删除策略错误

xdc.runtime.Error.raise:终止执行

这里错过了什么?

此致

巴拉

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我还使用 Task_construct,动态创建任务,但没有训练。

    Task_Params_init (&userPgmParams);
    userPgmParams.STACKSIZE = 2048;
    userPgmParams.priority = 5;
    userPgmParams.stack =&userPgmStack;
    Task_construct(&userPgmStruct,(Task_Functr)UserFunc,&userPgmParams,&EB);

    此致
    巴拉
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bala、

    您的堆大小是多少?当您尝试创建任务时、有多少可用? 您可以查看 Tools->ROV->HeapMem。 我希望您没有足够的内存来分配 Task_create 中的 Task_object 和堆栈。

    注意:使用 types_create_policy 意味着您将创建对象,但不会删除它们。 如果我们知道这一点、我们就可以优化内核。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Todd、

    我增加了堆内存和堆栈、但堆栈无法正常工作。 请找到 ROV->heap 的快照。 task_create()失败后,它仍然有超过20KB 的可用内存。

    除了此 task_create()失败之外,我的应用程序仍继续运行。

    此致

    巴拉

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,巴厘岛

    您是否有重现问题的示例程序? 如果是、您能否将其导出并连接到此线程?

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Todd、

    在这里、我已经尝试使用默认的 hello world 示例项目、但这对我也不起作用。

    有一个静态任务,即在 cfg 文件中创建的 task0fxn,我正尝试从该任务创建动态任务,即。

    我在这里附上了代码。 请检查并建议解决方案。

    此致

    巴拉

    e2e.ti.com/.../hello_5F00_world.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bala、

    谢谢。 问题是未初始化 Error_Block。 在将其传递到 Task_create 之前、您需要添加以下内容。
    ERROR_INIT (&EB);

    由于 EB 未初始化、因此内容为"随机"。 在内部、EB 在创建调用的几个位置进行检查。 当没有问题时、似乎有问题。

    堆也将其切近了。 gcc 中的 printf 分配内存。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Todd、

    谢谢你。 现在、我将能够动态创建/删除任务。

    此致
    巴拉