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.

[参考译文] MSP432E401Y:通过 SysConfig 设置 NDK 栈优先级时出错

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1296657/msp432e401y-error-when-setting-ndk-stack-priorities-via-sysconfig

器件型号:MSP432E401Y
主题中讨论的其他器件:SysConfig

SysConfig 版本1.17.0和1.18.0

SimpleLink MSP432e4 SDK 6.41.00.17

更改 SysConfig 中 NDK 创建的线程部分的默认值时、将使用 ti_ndk_config.c 中未声明的变量"u32cval"。

.syscfg

Fullscreen
1
2
3
4
5
General.kernPriLevel = 20;
General.highPriTaskPriLevel = 15;
General.normPriTaskPriLevel = 10;
General.stackThreadPriLevel = 15;
General.lowPriTaskPriLevel = 5;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

自动生成的  ti_ndk_config.c:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* config low priority task level */
u32cval = ;
CfgAddEntry(hCfg, CFGTAG_OS, CFGITEM_OS_TASKPRILOW, CFG_ADDMODE_UNIQUE,
sizeof(uint32_t), (unsigned char *)&u32cval, 0);
/* config normal priority task level */
u32cval = 10;
CfgAddEntry(hCfg, CFGTAG_OS, CFGITEM_OS_TASKPRINORM, CFG_ADDMODE_UNIQUE,
sizeof(uint32_t), (unsigned char *)&u32cval, 0);
/* config high priority task level */
u32cval = 15;
CfgAddEntry(hCfg, CFGTAG_OS, CFGITEM_OS_TASKPRIHIGH, CFG_ADDMODE_UNIQUE,
sizeof(uint32_t), (unsigned char *)&u32cval, 0);
/* config kernel priority task level */
u32cval = 20;
CfgAddEntry(hCfg, CFGTAG_OS, CFGITEM_OS_TASKPRIKERN, CFG_ADDMODE_UNIQUE,
sizeof(uint32_t), (unsigned char *)&u32cval, 0);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

"General.lowPrithaskPriLevel = 5;"条目被转换为一个空值、其他值被正确设置、只是之前从未声明过"u32cval"。

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

    尊敬的 Peter:

     不幸的是、我实际上并不知道生成的代码出了什么问题。 如果我更 改为 General.lowPrithaskPriLevel = 5、我确实看到 u32cval 变为未分配。

     当我查看 SDK 中针对 tcpecho 的库存示例时、u32cval 应该是任务堆栈的指针、而不是优先级。 优先级应 在 CFGITEM_OS_TASKPRILOW 中进行编码。 在我看来、似乎不止是 没有正确声明 u32cval。 似乎还有其他问题、我对生成的代码一无所知。  

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


    我添加了一个设置 PRIO 级别的函数作为权变措施、因此我不依赖 SysConfig 设置、不过这里有问题。

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

    尊敬的 Peter:

     同意这里有什么问题。 请告诉我、您添加的功能是否能够完全解决此问题。  

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

    是的是、添加该函数可解决该问题。 我只是告诉你,以防有人想修复这个...

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* config low priority task level */
    p = TASK_PRIO_LOW;
    CfgAddEntry(hCfg, CFGTAG_OS, CFGITEM_OS_TASKPRILOW, CFG_ADDMODE_UNIQUE, sizeof(uint32_t), &p, 0);
    /* config normal priority task level */
    p = TASK_PRIO_MEDIUM;
    CfgAddEntry(hCfg, CFGTAG_OS, CFGITEM_OS_TASKPRINORM, CFG_ADDMODE_UNIQUE, sizeof(uint32_t), (unsigned char*) &p, 0);
    /* config high priority task level */
    p = TASK_PRIO_HIGH;
    CfgAddEntry(hCfg, CFGTAG_OS, CFGITEM_OS_TASKPRIHIGH, CFG_ADDMODE_UNIQUE, sizeof(uint32_t), (unsigned char*) &p, 0);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    尊敬的 Peter:

     感谢您的分享。