野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 213|回复: 0

关于《stm32库开发实践指南》中第21章第一个实验的问题

[复制链接]
发表于 2024-1-24 20:28:42 | 显示全部楼层 |阅读模式
本帖最后由 sunyw 于 2024-1-24 20:38 编辑

如果像之前的工程一样,建立bsp_dma.h和bsp_dma.c,并将要传输的数据(aSRC_Const_Buffer和aDST_Buffer)声明在bsp_dma.h中,会报重定义的错误,原因是编译时main.c和bsp_dma.c都会#include bsp_dma.h,外部链接的静态变量aSRC_Const_Buffer和aDST_Buffer被声明了两次。
如果在aSRC_Const_Buffer和aDST_Buffer声明前添加static关键字使之成为内部链接的静态变量,可以解决重定义的问题,但是这种方法其实是在bsp_dma.c和main.c创建了两个一样的变量副本,在mian.c中调用DMA_Config()函数会跳转到bsp_dma.c中,并且传输bsp_dma.c中的副本,main.c中的副本不会传输。而mian.c的中的Buffercmp()对比的是main.c中的副本,所以对比结果是不同。

固件库例程中为了解决这个问题,把bsp_dma.h和bsp_dma.c的代码全部放在了main.c中。

我将要传输的数据(aSRC_Const_Buffer和aDST_Buffer)声明在main.c中,并在bsp_dma.c使用extern引用声明要传输的数据,并通过串口打印传输的数据和LED灯亮灭指示,验证下来可行。



YHF103_DMA.zip

291.61 KB, 下载次数: 5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-28 05:33 , Processed in 0.141816 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表