本帖最后由 邵明亚 于 2019-7-12 18:58 编辑
STM32F103RCT6,以战舰V3例程寄存器版的实验一为模板,Target中ROM的SIZE改成0x40000(256KB FLASH容量),在程序中定义256个16位常量数组到FLASH最后512字节即0x0803 FE00~0x0803 FFFF,- #include "sys.h"
- #include "delay.h"
- #include "led.h"
- //ALIENTEK战舰STM32开发板 实验1
- //跑马灯 实验
- //技术支持:www.openedv.com
- //广州市星翼电子科技有限公司
- const uint16_t gamma_red[256]__attribute__((at(0x0803FE00)))={
- 0 ,1 ,2 ,4 ,7 ,11 ,17 ,24 ,32 ,42 ,53 ,65 ,79 ,94 ,111 ,129 ,
- 148 ,169 ,192 ,216 ,242 ,270 ,299 ,330 ,362 ,396 ,432 ,469 ,508 ,549 ,591 ,635 ,
- 681 ,729 ,779 ,830 ,883 ,938 ,994 ,1053 ,1113 ,1175 ,1239 ,1305 ,1373 ,1443 ,1514 ,1587 ,
- 1663 ,1740 ,1819 ,1900 ,1983 ,2068 ,2154 ,2243 ,2334 ,2427 ,2521 ,2618 ,2717 ,2817 ,2920 ,3024 ,
- 3131 ,3240 ,3350 ,3463 ,3578 ,3694 ,3813 ,3934 ,4057 ,4182 ,4309 ,4438 ,4569 ,4703 ,4838 ,4976 ,
- 5115 ,5257 ,5401 ,5547 ,5695 ,5845 ,5998 ,6152 ,6309 ,6467 ,6628 ,6792 ,6957 ,7124 ,7294 ,7466 ,
- 7640 ,7816 ,7994 ,8175 ,8358 ,8542 ,8730 ,8919 ,9111 ,9305 ,9501 ,9699 ,9899 ,10102 ,10307 ,10514 ,
- 10724 ,10936 ,11150 ,11366 ,11585 ,11806 ,12029 ,12254 ,12482 ,12712 ,12944 ,13179 ,13415 ,13655 ,13896 ,14140 ,
- 14386 ,14634 ,14885 ,15138 ,15394 ,15651 ,15911 ,16174 ,16439 ,16706 ,16975 ,17247 ,17521 ,17798 ,18076 ,18358 ,
- 18641 ,18927 ,19216 ,19506 ,19799 ,20095 ,20393 ,20693 ,20996 ,21301 ,21608 ,21918 ,22231 ,22545 ,22862 ,23182 ,
- 23504 ,23828 ,24155 ,24484 ,24816 ,25150 ,25487 ,25826 ,26167 ,26511 ,26857 ,27206 ,27558 ,27911 ,28267 ,28626 ,
- 28987 ,29351 ,29717 ,30085 ,30456 ,30830 ,31206 ,31584 ,31965 ,32349 ,32735 ,33123 ,33514 ,33907 ,34303 ,34702 ,
- 35103 ,35506 ,35912 ,36321 ,36732 ,37145 ,37561 ,37980 ,38401 ,38825 ,39251 ,39680 ,40111 ,40545 ,40981 ,41420 ,
- 41862 ,42306 ,42752 ,43202 ,43653 ,44108 ,44564 ,45024 ,45486 ,45950 ,46418 ,46887 ,47360 ,47834 ,48312 ,48792,
- 49275 ,49760 ,50248 ,50738 ,51231 ,51727 ,52225 ,52726 ,53229 ,53735 ,54244 ,54755 ,55269 ,55786 ,56305 ,56827,
- 57351 ,57878 ,58408 ,58940 ,59475 ,60013 ,60553 ,61096 ,61641 ,62189 ,62740 ,63294 ,63850 ,64408 ,64970 ,65534
- };
- int main(void)
- {
- Stm32_Clock_Init(9);//系统时钟设置
- delay_init(72); //延时初始化
- LED_Init(); //初始化与LED连接的硬件接口
- while(1)
- {
- LED0=0;
- LED1=1;
- delay_ms(300);
- LED0=1;
- LED1=0;
- delay_ms(300);
- }
- }
复制代码
编译报错,好像是说超出FLASH容量:- ..OBJ est.axf: Error: L6220E: Load region LR_IROM1 size (262156 bytes) exceeds limit (262144 bytes). Region contains 260274 bytes of padding and 0 bytes of veneers (total 260274 bytes of linker generated content).
复制代码
于是把at(0x0803FE00))改成at(0x0803FD00)),然后编译,没有报错。查看生成的hex文件发现,在常量数组存储区之后,紧接着存放了12个0x00:
- :10FEF000C9F0EDF214F53EF76AF998FBCAFDFEFF72
- :0CFF0000000000000000000000000000F5
- :0400000508000131BD
- :00000001FF
复制代码
把常量数组注释掉,编译,发现HEX文件末尾有8个0x00:
- :100550000C0000202C0500008801000800000000AD
- :08056000000000000000000093
- :0400000508000131BD
- :00000001FF
复制代码
问一下,为什么会生成的HEX要在FLASH中加几个0x00?
怎么解决定义常量到FLASH尾端报错问题?
实验1 跑马灯实验.rar
(107.7 KB, 下载次数: 0)
7 天前 上传
点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
现在发现,FLASH最后存储的是全局变量的初始化值。但不知道如何不让它存储或者存储到别的地址?
我是楼主。
没有找到改变全局变量存放位置的办法!
只能这样避开:
常量数组存放在倒数2K空间之前,最后2K~1K由编译器存放全局变量(不大于1K)初始化值,“EEPROM”起始地址设置到最后1K空间。
一周热门 更多>