完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
情况:
1.实际的BOOTLOADER 编译后的代码长度只有15K 2,设置20K FLASH MEMORY{FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 20KRAM (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的接收发送 |
|
相关推荐
2个回答
|
|
段属性加上时的错误如下图:
取掉DMADATA属性,编译正常 原因是没有属性时这个缓冲区属于bss数据,不需初始化, 加上这个属性后,这块DMADATA数据放在DATA段中了,所以在FLASH占用了同样大小的初始化数据。 该如何设这个属性才是正确的? |
|
|
|
你好,Ld中并没有定义这个段,所有编译器编译连接的时候不会把这个数组按照bss段处理,而是类似于data,导致编译的时候flash变大,ram也变大,上电CPU从flash搬运到ram中执行。__attribute__((section(".DMADATA")))这个属性可以去掉,对你的功能不会有任何影响。
|
|
|
|
只有小组成员才能发言,加入小组>>
512 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2901 浏览 2 评论
2394 浏览 1 评论
854浏览 2评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
395浏览 1评论
675浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
410浏览 1评论
507浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-16 11:01 , Processed in 1.183454 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号