情况:
1.实际的BOOTLOADER 编译后的代码长度只有15K
2,设置20K FLASH
MEMORY { FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 20K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K }
3. 在程序中有两个长的USB用的 RAM DMA 缓冲区 每个16K长度
在LD 文件中,无特别指出这个 DMADATA段在哪里?
_
_attribute__ ((aligned(16))) UINT8 LONG_Databuf1[ 16384 ] __attribute__((section(".DMADATA"))); /* 端点2数据发送缓冲区 */ __attribute__ ((aligned(16))) UINT8 LONG_Databuf2[ 16384 ] __attribute__((section(".DMADATA"))); /* 端点2数据发送缓冲区 */
编译后,连接提示 DMADATA 段不适合FLASH 长度, 这个DMADATA 段是RAM的跟FLASH有什么关系?
4. 把 DMA段的属性去掉,改为如下,编译 及link都正常了,程序运行也正常
__attribute__ ((aligned(16))) UINT8 LONG_Databuf1[ 16384 ] ;/* 端点2数据发送缓冲区 */ __attribute__ ((aligned(16))) UINT8 LONG_Databuf2[ 16384 ]; /* 端点2数据发送缓冲区 */ 这样问题来了? __attribute__((section(".DMADATA")));有什么用呢? 会不会影响USB的接收发送