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.

[参考译文] TMS570LS0714:闪存 API 问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/905646/tms570ls0714-flash-api-question

器件型号:TMS570LS0714

您好 Champ、

在执行闪存扇区 擦除函数期间、 我能否在 while 环路中添加 CAN 发送代码。 有什么需要 注意的吗?

Fapi_issue19 CommandWithAddress (Fapi_EraseSector、flash_sector[i].start);

while (fapi_check_FSM_ready_busy =fapi_Status_FsmBusy)


CANtrasmit();


 

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

    您好、Huihuang、

    是的、您可以在循环中执行一些代码。 由于 LS0714只有一个闪存组、该函数和该函数使用的所有变量应位于 SRAM 中。  

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

    您好 QJ、

    您能否提供一个如何分配 functo 的示例

    在 RAM 中运行?

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

    您好、Huihuang、

    如果可以使用将函数分配给链接器 cmd 文件中的某个段,则在 man()中执行 memcopy,但不会将此段复制到 SRAM:

    部分

      .intvecs:{}>向量

       CANTX:
      {
         .\source\CAN.obj (.text)
      }palign =8 load = FLASH、run = SRAM、load_start (cantxLoadStart)、run_start (cantxRunStart)、size (cantxLoadSize)

    在 main.c 中:


    extern unsigned int cantxLoadStart;
    extern unsigned int cantxLoadSize;
    extern unsigned int cantxRunStart;

    main(){

      memcpy (&cantxRunStart、&cantxLoadStart、(uint32)&cantxLoadSize);

    BTW、为什么您的客户在此循环中传输 CAN 消息、以检查闪存状态机的状态? 您的客户擦除闪存扇区的频率如何?

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

    您好 QJ、

    是否有任何方法来分配要在 RAM 中运行的函数、而不是 obj 文件?

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

    您可以使用 ramfunc 在 RAM 中运行函数:

    链接器命令:

    binit:{}> FLASH0
    .TI.ramfunc:{} load=FLASH0, run=RAM, table(BINIT)

    main.c:

    __attribute__( ramfunc ))

    void myRamFunc (void){

       uint32 i、j;
       for (i=0;i<100;i++){
         J=2*I;
        }

    myRamFunc ()将被复制到 RAM 中,因此您可以从 RAM 中运行此函数。

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

    此方法有问题。

    调用此函数时,将首先跳转到闪存,然后转至 RAM,它不直接转至 RAM,如果您查看.map 文件。,则会发现问题

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

    映射文件:。

    TI.ramfunc  

    * 0 0000656c 00000050运行 ADDR = 08001500