有一段数据放在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中。这样下次上电还以上次掉电前的数据为准。
请问该怎么操作呢?
Martin Yu:
加了const声明后就放在.econst段中,可以链接到Flash中;不加的话放到.ebss段,链接到RAM中。
有一段数据放在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中。这样下次上电还以上次掉电前的数据为准。
请问该怎么操作呢?
Eric Ma:
he code,
我不认为你可以简单的就修改flash的值,因为对flash的操作必须用flash API函数,必须erase, program, verify. 就算你把变量映射到flash中,你要修改它,只能擦除再烧写,这样会浪费一个扇区。
不知道你用什么功能,也许我们可以用别的方式巧妙的解决。
Eric
有一段数据放在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中。这样下次上电还以上次掉电前的数据为准。
请问该怎么操作呢?
he code:
回复 Eric Ma:
的确需要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 varsextern 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 linkerextern 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部分多加的部分。
不是很理解,请讲解一下。
有一段数据放在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中。这样下次上电还以上次掉电前的数据为准。
请问该怎么操作呢?
he code:
回复 Eric Ma:
另外我还想咨询一下:
在cmd文件里面的很多字段定义的具体意思是什么?
比如
.cinit
.pinit
.text等一些。
主要想知道F28035_CLA_C.CMD文件和f28035_rom_api.cmd
里面的字段的定义。
有参考文档吗?
有一段数据放在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中。这样下次上电还以上次掉电前的数据为准。
请问该怎么操作呢?
Martin Yu:
回复 he code:
请参照
TMS320C28x Optimizing C/C++ Compiler v5.0.0 User's Guide
.
http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=SPRU514&fileType=pdf
有一段数据放在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中。这样下次上电还以上次掉电前的数据为准。
请问该怎么操作呢?
he code:
回复 Martin Yu:
这文档还不是很准确
比如
.bss_cla
.const_cla
这些基本的都没有介绍耶
有一段数据放在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中。这样下次上电还以上次掉电前的数据为准。
请问该怎么操作呢?
he code:
回复 Eric Ma:
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);
有一段数据放在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中。这样下次上电还以上次掉电前的数据为准。
请问该怎么操作呢?
he code:
回复 Eric Ma:
1.flash_api函数
对同一扇区进行擦除
第一次擦除和第二次擦除的间隔时间有要求没有?
对不同扇区擦除,第一次与第二次擦除间隔时间有没有要求?
同理,编程、校验对同一扇区的间隔有没有要求?
2.另外再问一个DATA_SECTION的问题:
DATA_SECTION能不能对数组指定区域还是说有一堆数据得一个一个的指定要固定地址。
我想定义一个数组到固定的flash区域。难道得一个一个数组元素定义吗?
还是说有其他方法能够一下把一个数组定义到固定区域??