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.

[参考译文] TMS570LC43x SAFETI

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1233110/tms570lc43x-safeti

您好!

我尝试使用  TMS570LC43x Hercules 开发套件中的演示代码2.4.0来运行 SAFETI 库。

我面临一个问题、即代码是堆栈的、我没有 在代码中找到会发生什么情况。 安全库正在工作、或者在某个地方挂起。

我正在使用 TI safeTI 诊断库。 CCS IDE 和 TI 样片/演示代码。  

注:-在开发套件中,nERROR LED 亮起。

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

    尊敬的 Pankaj:

    您可以参考以下两个主题吗?

    (︎) RM57L843:SAFETI_DIAG_LIB Hercules SafeTI 诊断库问题-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    在上一主题中、他们建议启用自动 ECC 生成。

    (+) LAUNCHXL2-RM57L:Hercules SafeTI ︎ 诊断库 V2.4.0演示应用卡在清除 ESM 错误状态-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    在上面的线程中、它们识别了诊断库中的一个错误。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    感谢您的宝贵答复。

    我已将 sl_esmREG->ekr = 0xAu 放入_sl_HoldNClear_nError (void)函数中。

    问题1: 现在、它从 while 循环中输出。 但我的问题是、将0x0A 放置在 ESM EKR 电阻器中是正确的吗?  

    问题2. 现在我 已经卡在 esmREG->SSR2寄存器显示 0x00000004。 它在组2中显示 CPU 比较错误。

    如何解决此问题?

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

    Jagadish、您好!

    我们在运行 safeTI 库中找不到解决方案、它显示了意外行为。

    1.一段时间它被卡在 esmREG->SR[0]!= 0条件下  

    2.某些时间代码卡在以下 while (1)循环中

    if (esmREG->SSR2 == 0u)
    {
    SL_SelfTest_STC (STC1_COMPARE_SELFCHECK、true、&stcSelfTestConfig);

    否则
    {
    while (1);//ESM 组2错误

    3.某些时间代码被重置并进入  SL_Init_R5Registers ();

    请帮助我们如何运行整个程序并检查诊断错误、以及对与代码流相关的文档进行排序。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1. 有时它被卡在 esmREG->SR[0]!= 0条件

    esmREG->SR[0]!= 0不应导致代码卡滞。

    2. 某些时间代码卡在以下 while (1) loop

     esmREG->SSR2 - 0x00000004是否意味着 CCM-R5F-CPU 比较错误?

    TMS570LC43x 包括运行在锁步操作模式下的双 Cortex-R5F CPU。 一个内核比较模块(CCM-R5F)比较每个 R5F CPU 的输出信号。 两个 CPU 输出间的任何差异被标记为一个高严重等级故障。 对于两个 CPU、不能保证 CPU 内部寄存器在相同状态下加电。 CPU 使用一个函数调用将内部寄存器推入堆栈、这样会检测到一个内核比较错误。 因此、CPU 内部内核寄存器需要在进行任何函数调用前被初始化至一个预先定义的状态。

    3. 某些时间代码已重置 AD 传入  SL_Init_R5Registers (); [/报价]

    您是指  SL_Init_R5Registers () 复位器件?  systemREG1->SYSESR 的价值是什么?

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

    尊敬的 QJ Wanj:

    谢谢您重播

    以下是答案  

    QJ Wang 说:

    1.  esmREG->SR[0]!= 0不应导致代码卡滞

    回答:-我把这行 " esmGroup3Notification (esmREG、esmREG->SR1[2]);"而不是 while (1) ;  

    如果((esmREG->SR1[2])!= 0U)
    {
    // while (1);//ESM 组3错误
    esmGroup3Notification (esmREG、esmREG->SR1[2]);

    如果发生了这个错误 ,我们必须做什么来解决这个错误,我们如何知道这是什么错误,如何解决它" 纽约文件将会很有帮助 "。  

    我之所以提出这个问题、是因为 我使用  TMS570LC43x Hercules 开发套件和 SAFETI 库 2.4.0或2.3.2代码构建雷达。

    我希望 EVK 和演示代码应该工作正常、并且看到诊断结果以及我们如何在应用中实现。

    QJ Wang 说:

    2、 您是说  SL_Init_R5Registers ()  复位器件?  systemREG1->SYSESR 的价值是什么?  

    回答:-不、我不是在说  SL_Init_R5Registers ()  对器件进行复位、我说在进入 sl_Init_ResetReason ();函数后、如果我运行代码、那么 iit 将变为  SL_Init_R5Registers ()(由于某些复位条件)。

     systemREG1->SYSESR---的价值是什么 > 值为0x00000800

    如果出现此错误 ,我们必须解决此错误,以及我们如何知道这是什么错误以及如何解决它" 如果有任何文档需要帮助、 " 。  

    QJ Wang 说:

    3.好的由于  两个 CPU 输出的差异被标记为一个故障和 产生了内核比较错误,而不是我们需要做什么来解决这个问题,以及是否有任何其他错误涉及到任何组1/2/3我们是如何解决它的。

      

    4.大多数情况下代码在小于 while (1)条件中挂起、原因是 "TYPE_DEBUG!= resetReason"  

    /*确保在运行 STC 之前没有挂起的 ESM Grp2错误*/
    if (esmREG->SSR2 == 0u)
    {
    SL_SelfTest_STC (STC1_COMPARE_SELFCHECK、true、&stcSelfTestConfig);

    否则
    {
    while (1);//ESM 组2错误 始终在此处停止。

    Q·王  请帮助我们如何运行整个程序并检查诊断错误、以及对与代码流相关的文档进行排序。

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

    尊敬的 QJ Wang 和 Jagadish

    我对它进行了更多的研究、并且已经看到初始值 SL_systemREG1->SYSESR;寄存器为0x00000800、resetReason 为 RESET_TYPE_DEBUG。

    当我们进入某个系统内部时、  SL_Init_Memory (RAMTYPE_RAM);  执行以下内容后执行  sl_systemREG1->MSINENA = ramSet;指令  低于   sl_systemREG1->SYSESR;  寄存器也从" 0x00000800 "更改为" 0x00000000 "因此,复位重置也将从  "RESET_TYPE_DEBUG"至"RESET_TYPE_UNKNOWN"。

    为什么 SL_systemREG1->SYSESR 的值在执行后发生变化   sl_systemREG1->MSINENA = ramSet  指令

    此致、

    V·潘卡

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

    SL_Init_Memory (RAMTYPE_RAM)不会导致复位。

    在 调用 sl_Init_ResetReason ()之后、SYSESR 寄存器会清零为0x0000。

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

    感谢您的答复。 作为您的回复、我们看到我们不会给您  SL_Init_ResetReason ()再次"只有一次调用"

    但结果是相同的 resetReason 在调用 sl_Init_Memory (RAMTYPE_RAM)后发生更改;函数  

    供您参考:-

    resetReason = SL_Init_ResetReason ();         <-  初始 resetReason 值为"reset_type_unknown"

                            
    开关(复位重置)                           <--   resetReason 值为"RESET_TYPE_DEBUG"
    {
    案例 RESET_TYPE_POWERON:
    案例 RESET_TYPE_DEBUG:
    案例 RESET_TYPE_EXTRST:
    case RESET_TYPE_EXTRST_nERROR:

    SL_Init_Memory (RAMTYPE_RAM);              <- 直到此处  resetReason 值为"reset_type_debug"、这是正确的  

    /*启用 CPU 事件导出*/
    /*这允许 CPU 发出检测到的任何单个位或双位错误的信号
    *通过其 ECC 逻辑访问程序闪存或数据 RAM。
    */
    _sl_Init_EnableEventExport();                 <- again resetReason  值已更改"reset_type_unknown"

    /*用户代码结束*/

    /*检查在加电期间是否有 ESM 组3错误。
    *这些操作可能会在 eFuse 自动加载期间或从闪存 OTP 读取期间发生
    *加电期间。 器件操作不可靠、不建议使用
    *在这种情况下。 */
    如果((esmREG->SR1[2])!= 0U)
    {
    // while (1);//ESM 组3错误
    // esmGroup3Notification (esmREG、esmREG->SR1[2]);


    /*初始化系统-带有电子保险丝自检的时钟、闪存设置*/
    systemInit();

    //////////////////////////////////////////////////////////////////////////

    在此之后  

    /*用户代码开始(22)*/
    if (reset_type_debug!= resetReason)                               <- 直到此处  resetReason 值为"reset_type_unknown"
    {
    if (RESET_TYPE_ICSTRST!= resetReason)
    {
    /*内存互连自检*/
    sl_SelfTest_MemoryInterconnect (MEMINTRCNT_selftest);

    /*确保 CPU 自检控制器可以实际检测到 CPU 内部的故障*/
    stcSelfTestConfig.stcClockDiv = 0;/* STC 时钟分频器= 1 */
    stcSelfTestConfig.intervalCount = 1;/*仅一个间隔*/
    stcSelfTestConfig.restartInterval0 = true;/*从间隔0开始*/
    stcSelfTestConfig.timeoutCounter = 0xFFFFFFFF;/*超时计数器*/
    _sl_HoldNClear_nError ();

    /*运行 STC 前屏蔽 vim 中断*/
    vimREG->REQMASKCLR0 = 0xFFFFFFFFu;
    vimREG->REQMASKCLR1 = 0xFFFFFFFFu;
    vimREG->REQMASKCLR2 = 0xFFFFFFFFu;
    vimREG->REQMASKCLR3 = 0xFFFFFFFFu;
    /*确保在运行 STC 之前没有挂起的 ESM Grp2错误*/
    if (esmREG->SSR2 == 0u)
    {
    SL_SelfTest_STC (STC1_COMPARE_SELFCHECK、true、&stcSelfTestConfig);

    否则
    {
    while (1);//ESM 组2错误                    <- 由于   resetReason 值为"reset_type_unknown"我们始终只在其中一个。


    否则
    {
    AfterSTC();                    <- 如果  resetReason 值为"reset_type_debug"、那么只有代码会调用这个不是这样的函数                                     发生

    请了解出现这种情况的原因、我们需要对代码进行哪些更改吗?

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

    尊敬的 Pankaj:

    请检查以下方法是否可以解决此问题:

    在检查 RESET 资源之前初始化 MCU SRAM:

      SL_Init_R5Registers ();

      sl_Init_StackPointers ();

      SL_Init_Memory (RAMTYPE_RAM);

      _sl_Init_EnableEventExport();

      resetReason = SL_Init_ResetReason ();

      开关(复位重置)
      {

          ...

       }

    2.将 resetReason 声明为寄存器。 关键字"注册器"意味着变量存储在 处理器寄存器中、而不是存储器中。

       寄存器 resetSource_t rstSrc  ;
      rstSrc = SL_Init_ResetReason ();

      开关(rstSrc)

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

    感谢您发送编修。  

    由于这些变化 、resetReason 没有改变并且将进入主()函数。

    问题现已在下方

    主要()

    {

    while (1)                     <-我 来了她

    {
    maintaskcount++;            <- 来正确的她,跑了 10次循环
    if (maintaskcount>10)
    {

    #ifdef __TI_Compiler_version__
    __ asm (" b #-8 ");                          <-- 代码在此内联指令中挂起。
    #endif

    ……

    ......

     

    问题1: 您能告诉我们这条内联指令有什么含义吗?

    问题2. 这需要运行还是我们可以将其注释掉?

    问题3: 其中定义了  __TI_Compiler_version__?

    问题4: 在哪里可以获取/存储 以下代码的数据?

    #if function_profiling_enabled
    fptests = fopen ("Profile_tests.txt"、"w+");                              <- Q4其中位于 Profile_tests.txt 文件"I not found in folder"?
    fppbisttests = fopen ("Profile_pbist_tests.txt"、"w+");
    if ((fptests == NULL)|||(fppbisttests == NULL)){
    printf ("无法打开文件进行写入!\n");

    否则
    {
    printf ("Hi!\n");

    fputs ("testye\tlastentrytick\tLast_exittick\terrorism_creation_tick、texecution_count\tcumilative_execution_tick、tesm_entrytick、tesm_exittabortthandler_entrytick、tabortthandler_exittick、");

    for (I =0;I<(TESTTYPE_MAX - TESTTYPE_MIN);I++)
    {

    fprintf (fptests、"%s\t"、stringFromTestType (i));
    fprintf (fptest、"%d\t"、SL_Profile_Struct[i].Last_entrytick);                     <- Q5如何在 CCS IDE 中启用 printf?  
    fprintf (fptest、"%d\t"、SL_Profile_Struct[I].Last_exittick);
    fprintf (fptest、"%d\t"、SL_Profile_Struct[i].error_creation_tick);
    fprintf (fptest、"%d\t"、SL_Profile_Struct[i].execute_count);
    fprintf (fptests、"%d\t"、sl_Profile_Struct[i].***);
    fprintf (fptests、"%d\t"、SL_Profile_Struct[I].ESM_entrytick);
    fprintf (fptest、"%d\t"、SL_Profile_Struct[I].ESM_exittick);
    fprintf (fptests、"%d\t"、sl_Profile_Struct[i].aborthandler_entrytick);
    fprintf (fptests、"%d\n"、sl_Profile_Struct[i].aborthandler_exittick);

    fclose (fptures);

    fputs ("ramgroup\talgoinfo\tLast_entrytick\tLast_exittickt\texecution_count\tcumilative_execution_tickn"、fppbisttests);
    for (I =0;I<PBIST_MEM_MAX;I++)
    {
    for (j =0;j<PBIST_algo_MAX;j++)
    {

    fprintf (fppbisttests、"%s\t"、stringFromgroup (i);
    fprintf (fppbisttests、"%s\t"、stringFromalgo (j));
    fprintf (fppbisttests、"%d\t"、sl_PBist_Profile_Struct[i][j].last_entrytick);
    fprintf (fppbisttests、"%d\t"、sl_PBist_Profile_Struct[i][j].last_exittick);
    fprintf (fppbisttests、"%d\t"、SL_PBist_Profile_Struct[i][j].execut_count);
    fprintf (fppbisttests、"%d\n"、sl_PBist_Profile_Struct[i][j].***);


    fclose (fptures);



    for (i=0;i<10000;i++);//等待 fprintf 完成
    __ asm (" b #-8 ");                           <-为什么要使用它?
    #endif

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    q1. 您能告诉我们这条内联指令的含义是什么吗?

    该指令与 C/C++中的 while (1)相同。

    Q2. 这是否需要运行或我们可以将其注释掉?

    是的、您可以将其注释掉。

    Q3. 其中定义了  __TI_Compiler_version__?

    它是预定义的 ARM 宏名称。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Q4. 在哪里可以获取/存储 以下代码的数据?

    默认情况下不会启用对函数的分析。 它是否在您的项目中启用? 您是否检查了"Debug"文件夹?

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

    您好、Wang、

    我已经启用 "功能评测_启用" 完成。

    但我没有找到任何" Profile_tests.txt "文件中找到。

    我有一个问题:

    器件内部   在 STC 后变为空(空) 停止。 如果出现任何"RAMTYPE_MIBSPI2_RAM"故障、  

    /*初始化 MIBSPI SRAM */
    SL_Init_Memory (RAMTYPE_MIBSPI1_RAM);
    SL_Init_Memory (RAMTYPE_MIBSPI2_RAM);
    SL_Init_Memory (RAMTYPE_MIBSPI3_RAM);
    SL_Init_Memory (RAMTYPE_MIBSPI4_RAM);
    SL_Init_Memory (RAMTYPE_MIBSPI5_RAM);

    如果  没有设置 MSTDONE 的状态位、那么我们将如何解决该问题。

    我们希望再次运行该测试用例。 我们必须要做什么?

    如果您有任何关于解决特定测试故障的错误的文档、请告知我们。 它将对我们非常有帮助。

    感谢并尊重

    V·潘卡

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们想重新运行此测试案例。 我们必须做什么?

    自动初始化可以通过向 MINITGCR 寄存器写入0x5来禁用、然后重新启用(将0xA 写入 MINITGCR)。  

    但我没有找到任何" Profile_tests.txt "文件。

    我会检查此内容

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但我没有找到任何" Profile_tests.txt "文件。

    它位于调试文件夹。

    代码将循环位于:

         __ asm (" b #-8 ");

    要达到 fptests = fopen ("Profile_tests.txt"、"w+");请在_asm (" b #-8)暂停执行、并指向行 fptests = fopen (...) 然后单击"移至线路"

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

    您好、Wang、

    感谢您的快速重播。

    我又面临一个问题:

    我将这个 safeTI 库与 RTOS 一起使用。

    由于软件的原因、我发现调度程序 CPSR 寄存器处于管理员模式(0x13)

    如果我们要初始化 RTOS 调度程序我们需要在用户/系统模式(0x1F)下正确运行内核

    在 safeTI 代码始终在   管理员模式(0x13) 。 我已尝试将模式从   监控器模式(0x13)到 用户/系统模式(0x1F) )在 栈指针汇编函数 sl_Init_StackPointers() ;  

    但如果我使用汇编 代码进行调试、它会更改模式、但 它将在 SL_ESM_Init (ESM_ApplicationCallback)之后进行软件复位; 而代码将进行重置、 resetReason 处于软件复位模式 。  

    您能帮助我说明我们如何以及在哪里可以将模式从 s 为成功地完成 safeTI 初始化以及为 schedular 正确初始化的用户模式超限模式。

    重要提示:  

    1.有必要   在 管理器模式(0x13)下运行 safeTI all 测试(在 main 之前和 main 之后)吗?

    2.在哪里我们可以将模式从 监控模式(0x13)更改为 用户/系统模式(0x1F)?

    感谢并尊重

    V·潘卡

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

    您好、Wang、

    我已经检查了

    SL_Init_Memory (RAMTYPE_MIBSPI1_RAM);                     <--  此处的状态为"成功完成"

    此处、  MINITGCR 寄存器中的值为0x0A
    SL_Init_Memory (RAMTYPE_MIBSPI2_RAM);                     <--由于   MSTDONE 的状态位没有被置位,因此在此处闪烁  

    SL_Init_Memory (RAMTYPE_MIBSPI3_RAM);                         <--  此处的状态为"成功完成"

    此处、  MINITGCR 寄存器中的值为0x0A

    SL_Init_Memory (RAMTYPE_MIBSPI4_RAM);                     <--由于   MSTDONE 的状态位没有被置位,因此在此处闪烁  

    SL_Init_Memory (RAMTYPE_MIBSPI5_RAM);                       <--  此处的状态为"成功完成"

     

       在所有测试用例中、这里的值 MINITGCR 寄存器中的值为0x0A

    感谢并尊重

    V·潘卡

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

    尊敬的 Pankaj:

    1.您能否仔细检查测试中是否使用了 TMS570LC43x 或 RM57L8x? TMS570LSx 器件不支持 MibSPI2和 MibSPI4。

    2.请检查是否正确声明了 MibSPI2和 MibSPI4 RAM 组(组18和组19):

    sl_types.h:

    RAMTYPE_MIBSPI2_RAM = 0x00040000u、/** RAMTYPE_MIBSPI4_RAM = 0x00080000u、/**

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

    SDL 中的某些诊断测试无法在用户模式下运行。  

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

    您好、Wang、

    我已经检查了控制器版本和详细信息。 这里是 TMS570LC43x 供参考、我 还要附上图像。

    sl_types.h:

    RAMTYPE_MIBSPI2_RAM = 0x00040000u、/**  <--已定义  
    RAMTYPE_MIBSPI4_RAM = 0x00080000u、/**    <--已定义  

    重要提示:  

    我们需要在管理器模式(0x13)下运行哪些测试用例、我们可以在系统模式(0x1F)下运行哪些测试用例? 是否有可用的文档、请告知我?

    2.在哪里我们可以将模式从 监控模式(0x13)更改为系统模式(0x1F)? 因此、我们可以 正确初始化 RTOS 调度程序。 否则代码将无法激活调度程序? 请支持。  

    谢谢和尊重  

    V·潘卡

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1. 我们需要在监控器模式(0x13)下运行哪些测试用例、我们可以在哪些系统模式(0x1F)下运行? 是否有可用的文档,请告诉我?

    如果自检 API 需要写入 WP 位字段、则在调用此 API 之前、您必须将 MCU 切换到特权模式(非用户模式)。

    例如:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    2. 我们可以在其中将模式从 监控器模式(0x13)更改为系统模式(0x1F)? 因此、我们可以 正确初始化 RTOS 调度程序。 否则代码将无法激活调度程序? 请支持。  [/报价]

    可以创建 FreeRTOS 任务、以便在特权模式或非特权模式下运行。  可以使用 xTaskCreate()或 xTaskCreateLimited() API 函数创建访问整个内存映射的特权任务。  非特权任务只能访问其堆栈,并且只能使用 xTaskCreateLimited() API 创建。

    特权模式任务可以调用 PORTswitch_to_user_mode () 将自身设置为非特权模式。 在非特权模式下运行的任务不能将自身设置为特权模式。

    无论是监控器模式(0x13)还是系统模式(0x1F)都是 特权模式。