完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
有一段数据放在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中。这样下次上电还以上次掉电前的数据为准。 请问该怎么操作呢? |
|
相关推荐
10 个讨论
|
|
guigui_7044 发表于 2018-8-27 16:36 的确需要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 - ERIC |
|
|
|
|
|
guigui_7044 发表于 2018-8-27 17:05 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); |
|
|
|
|
|
guigui_7044 发表于 2018-8-27 17:45 1.flash_api函数 对同一扇区进行擦除 第一次擦除和第二次擦除的间隔时间有要求没有? 对不同扇区擦除,第一次与第二次擦除间隔时间有没有要求? 同理,编程、校验对同一扇区的间隔有没有要求? 2.另外再问一个DATA_SECTION的问题: DATA_SECTION能不能对数组指定区域还是说有一堆数据得一个一个的指定要固定地址。 我想定义一个数组到固定的flash区域。难道得一个一个数组元素定义吗? 还是说有其他方法能够一下把一个数组定义到固定区域?? |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
351 浏览 1 评论
546 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
790 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
660 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1140 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
87浏览 29评论
325浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
262浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
211浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
69浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 04:43 , Processed in 1.048837 second(s), Total 69, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号