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:TM4C129ENCPDT 引导加载程序+ SysCtlReset

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/659722/rtos-tm4c129encpdt-bootloader-sysctlreset

工具/软件:TI-RTOS

您好!

在某些情况下、我想使用 SysCtlReset 重置我的器件、但器件使用引导程序通过复位矢量进行以太网更新:

/*========================= Hwi 配置=================== //
var halHwi = xdc.useModule('ti.sysbios.hal.Hwi');
var m3Hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi');
m3Hwi.resetVectorAddress = 0x00004000; 

我的问题是 SysCtlReset 似乎不起作用。 我正在使用 XDS100v2调试器、但在未设置复位矢量的其他项目中、函数调用效果良好。

感谢你的帮助。  

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

    您能否提供有关引导加载程序和应用程序中矢量表的更多信息? 您在哪里尝试调用 SysCtlReset...引导加载程序或应用程序?

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

    您好、

    感谢你的答复。

    我要调用 SysCtlReset 的第一种情况是我的器件丢失了其 IP 地址。 在多交换网络中,可以删除 DHCP 服务器。 当我在挂钩函数中丢失 IP 时、我可以检测到该事件。

    void netIPAddressHook (IPN ipaddr、uint IfIdx、uint fAdd){
    
    IPN IPTmp;
    
    如果(fADD){
    xdc_runtime_System_printf ("CustomHook:网络已添加:");
    }
    否则{
    xdc_runtime_System_printf ("CustomHook Network Removed:");
    System_printf ("复位设备\n");System_flush ();
    HWREG (NVIC_APINT)= NVIC_APINT_VECTKEY | NVIC_APINT_SYSRESETREQ;
    }
    
    //打印消息
    IPTmp = ntohl (ipaddr);
    xdc_runtime_System_printf ("如果-%d:%d.%d.%d.%d\n"、IfIdx、
    (uint8)(IPTmp>>24)&0xFF、(uint8)(IPTmp>16)&0xFF、
    (uint8)(iptmp>>8)&0xFF、(uint8) iptmp&0xFF);
    
    system_flush();
    
    } 

    如上所示。  

    关于引导加载程序、我将使用矢量表地址为0x4000的 dk-tm4c129器件示例代码中的标准 boot_emac_flash。

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

    此行:  

    HWREG (NVIC_APINT)= NVIC_APINT_VECTKEY | NVIC_APINT_SYSRESETREQ; 

    来自 BOOT_EMAC_FLASH 示例代码。 正如我看到的、这一行将重置器件并启动自定义固件。 此行已替换为  

    SysCtlReset(); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想它现在正在工作。 如果我从0x00开始对基于闪存的引导加载程序进行编程、并将应用程序编程到0x4000位置、则其工作正常。 我认为我的案例中的问题是缺少引导加载程序。

    谢谢、