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.

flash中的数据怎么修改

Other Parts Discussed in Thread: CONTROLSUITE

有一段数据放在FLASH中,正常程序会调用这段数据然后还要修改。

但是CCS中比较奇怪。

程序做了如下修改

f28035.cmd文件中在sections中加入了

flashtest   :>FLASHB PAGE=1

定义flashtest空间从FLASHB开始。

在main文件中加入

#pragma DATA_SECTION(test,"flashtest");
const Uint16 test=1;

这两条语句。这样在程序连接到目标板的时候再flashhb空间是可以看到test的值为1.

如果是下面两句则不行。

#pragma DATA_SECTION(test,"flashtest");
 Uint16 test=1;

难道定位到flash空间的数据类型定义前要加const,这样变量就无法修改了。

如果我要在程序运行的时候修改test中的值该怎么操作呢?

要求是:1.调用test值运算

2.根据规则有的时候会要修改test中的值。

3.修改后的test的值还得保存到flash中。这样下次上电还以上次掉电前的数据为准。

请问该怎么操作呢?

  • 加了const声明后就放在.econst段中,可以链接到Flash中;不加的话放到.ebss段,链接到RAM中。

  • he code,

    我不认为你可以简单的就修改flash的值,因为对flash的操作必须用flash API函数,必须erase, program, verify. 就算你把变量映射到flash中,你要修改它,只能擦除再烧写,这样会浪费一个扇区。

    不知道你用什么功能,也许我们可以用别的方式巧妙的解决。

    Eric

  • 的确需要FLASH API函数功能,正在看。

    实现功能是这样的

    1.软件要用PWM AD TIMER CAN外设

    2.使用CLA,用C来写CLA

    3.有一段数据放在FLASH,程序运行的时候从FLASH中拷贝出来,程序运行过程中这段数据中某些数据会被修改

    修改后在程序准备关机之前要将这些修改过的数据再次的存入到对应的FLASH中去。

    使用flashapi的cmd文件和F28035_CLA_C.cmd有哪些区别?需要注意修改哪些地方?有没有现成的比较合适的CMD文件可以参考修改的。

    另外怎么将这段数据从FLASH中拷贝到RAM中。

    使用MEMCPY指令码?

    比如以下一些CMD文件会用到的变量

    //Linker defined vars
    extern Uint16 Cla1Prog_Start;
    extern Uint16 Cla1funcsLoadStart;
    extern Uint16 Cla1funcsLoadEnd;
    extern Uint16 Cla1funcsRunStart;
    extern Uint16 Cla1funcsLoadSize;
    extern Uint16 Cla1mathTablesLoadStart;
    extern Uint16 Cla1mathTablesRunStart;
    extern Uint16 Cla1mathTablesLoadSize;
    // These are defined by the linker
    extern Uint16 RamfuncsLoadStart;
    extern Uint16 RamfuncsLoadSize;
    extern Uint16 RamfuncsRunStart;

    这些变量的空间指定地址好像没有分配啊。在CMD文件中LOAD_START LOAD_SIZE RUN_START这些调用没有数值怎么分配空间呢?

    还是说这些变量在其他什么地方已经赋值了啊?

    另外FLASH API函数在FLASH哪个阵列里面,EXAMPLE_flash28035_rom_api.cmd文件中ramfuncs 的载入flash为什么是flasha?

    还有example_flash28035_rom_api.cmd与example_flash28035_sw_api.cmd这两个文件在SECTION中有一些区别。

    Flash28_API:
    {
    -lFlash2803x_API_V100.lib(.econst)
    -lFlash2803x_API_V100.lib(.text)
    } LOAD = FLASHA,
    RUN = PRAML0,
    LOAD_START(_Flash28_API_LoadStart),
    LOAD_END(_Flash28_API_LoadEnd),
    RUN_START(_Flash28_API_RunStart),
    PAGE = 0

    这是SW_API.Cmd里面在section部分多加的部分。

    不是很理解,请讲解一下。

  • he code,

    1.你要用C语言编CLA的话要用F28035_CLA_C.cmd文件,使用下面这个新的,添加了两个CLA的C环境初始化段在里面。

    2.使用flashapi的cmd文件和F28035_CLA_C.cmd有哪些区别?

    CLA_C.cmd增加了对CLA C语言编译的一些段,建议你在这个基础上进行修改,把flash api.cmd中关于flash api那不分copy过来。所以你应该得将flash api的例程和CLA C例程融合起来。

    3.

    另外怎么将这段数据从FLASH中拷贝到RAM中。

    使用MEMCPY指令码?

    比如以下一些CMD文件会用到的变量

    //Linker defined vars extern Uint16 Cla1Prog_Start; extern Uint16 Cla1funcsLoadStart; extern Uint16 Cla1funcsLoadEnd; extern Uint16 Cla1funcsRunStart; extern Uint16 Cla1funcsLoadSize; extern Uint16 Cla1mathTablesLoadStart; extern Uint16 Cla1mathTablesRunStart; extern Uint16 Cla1mathTablesLoadSize; // These are defined by the linker extern Uint16 RamfuncsLoadStart; extern Uint16 RamfuncsLoadSize; extern Uint16 RamfuncsRunStart;

    这些变量的空间指定地址好像没有分配啊。在CMD文件中LOAD_START LOAD_SIZE RUN_START这些调用没有数值怎么分配空间呢?

    还是说这些变量在其他什么地方已经赋值了啊?

    是用memcpy函数,配合CMD文件对段的特殊配置,如

     ramfuncs            : LOAD = FLASHA,                         

                       RUN = PRAML0,                         

                       LOAD_START(_RamfuncsLoadStart),    

                          LOAD_END(_RamfuncsLoadEnd),                        

                         RUN_START(_RamfuncsRunStart),                          PAGE = 0

    这些变量在cmd中已经在编译过程中被定义和赋值,main中的memcpy要使用这些变量,所以要外部变量声明。

    4

    另外FLASH API函数在FLASH哪个阵列里面,EXAMPLE_flash28035_rom_api.cmd文件中ramfuncs 的载入flash为什么是flasha?

    还有example_flash28035_rom_api.cmd与example_flash28035_sw_api.cmd这两个文件在SECTION中有一些区别。

    flash api在2803x的ROM中就有了,所以可以不用外面加载flash API的函数库,所以就有这个example_flash28035_rom_api.cmd,这里面用到的就是ROM中的flash api. 但是flash api也可以使用外部加载,即包含一个软件库flash api,而不用ROM中的,但是要保证这个库中的函数加载在flash,运行在ram,所以就有这个cmd文件example_flash28035_sw_api.cmd。

    5. flash api如果你不用ROM里面的,可以加载在任意的flash 扇区,只要保证空间够就可以。

    Eric

     

  • 另外我还想咨询一下:

    在cmd文件里面的很多字段定义的具体意思是什么?

    比如

    .cinit

    .pinit

    .text等一些。

    主要想知道F28035_CLA_C.CMD文件和f28035_rom_api.cmd

    里面的字段的定义。

    有参考文档吗?

  • 这文档还不是很准确

    比如

    .bss_cla

    .const_cla

    这些基本的都没有介绍耶

  • he code,

    到TI 官网下载TMS320C28x Optimizing C/C++ Compiler v6.1 User's Guide,里面就有介绍。

    其实.bss_cla .cosnt_cla的意义跟普通的.bss .const意义是一样的,只不过前者是用于CLA的C环境编译中而已。

    Eric

  • FLASH_API例程中V100中在main之前有如下语句,可是在v100的cmd文件里面没有找到flashscalingvar, flashcallbackvar定义的内存区域。

    这些区域是不是又在什么地方自定义过了啊?在哪些地方可以找到啊?

    另外V100实验和V100A实验有什么区别吗?

    /* -- Global variable used by the delay function -- */

    #pragma DATA_SECTION(Flash_CPUScaleFactor, "FlashScalingVar");

    Uint32 Flash_CPUScaleFactor;

    /* -- Callback function pointer -- */

    #pragma DATA_SECTION(Flash_CallbackPtr, "FlashCallbackVar");

    void (*Flash_CallbackPtr) (void);

  • 1.flash_api函数

    对同一扇区进行擦除

    第一次擦除和第二次擦除的间隔时间有要求没有?

    对不同扇区擦除,第一次与第二次擦除间隔时间有没有要求?

    同理,编程、校验对同一扇区的间隔有没有要求?

    2.另外再问一个DATA_SECTION的问题:

    DATA_SECTION能不能对数组指定区域还是说有一堆数据得一个一个的指定要固定地址。

    我想定义一个数组到固定的flash区域。难道得一个一个数组元素定义吗?

    还是说有其他方法能够一下把一个数组定义到固定区域??

  • 没有时间要求,只要erase函数执行完就ok,可以根据其是否正确地返回了success或fail来判断。

    可以对数组同样进行地址的指定,另外也可以使用指针,或结构体。从宏观上讲,这些数据类型对应的只是一个变量而已。

  • 你好,在哪可以下载关于28035在线FLASH烧写的例程啊?

  • TI 有一个利用BOOT ROM中的bootloader 来烧写代码的历程:

    C:\ti\controlSUITE\device_support\f2803x\v130\DSP2803x_examples_ccsv5\f2803x_flash_kernel

    配合SerialLoader2000的上位机软件。

    如果你不想用这个ROM中的bootloader,则需要自己开辟一个flash扇区,自己写bootloader, 可以搜一个论坛,我有发过一个bootloader的帖子。

    ERIC

  • 您好!请问一下 SerialLoader2000  这个软件在哪里可以下载?我搜索了整个网络,包括TI官网,都没找到这个关键词,就只搜索到您这个帖子里有这么一句话而已

  • C:\ti\controlSUITE\device_support\~Utilities\serial_flash_programmer