找回密码
 立即注册
查看: 61|回复: 1

使用DMA_UART发送数据C51和C251区别

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:492
  • 最近打卡:2025-12-16 21:17:24
已绑定手机

270

主题

393

回帖

2166

积分

金牌会员

积分
2166
发表于 2025-11-16 19:25:34 | 显示全部楼层 |阅读模式
我在xdata内存申请了一段局部内存,给这段内存赋值后使用DMA_UART发送


在DMA_UART发送还没有结束我就退出了发送函数,因为xdata内存只有这个发送函数使用

所有不考虑局部内存的使用有效寿命

很奇怪的是C51中这么写没有问题,发送的数据是对的

但是在C251中这样写发送的数据后半段被修改过了

实在无法想象到底是被什么修改掉的,而且在C251把局部内存改成全局内存时同样数据也被修改掉了

修改掉的数据是一样的,帮忙分析下被什么修改掉的数据

一段内存使用DMA_UART发送没有结束退出函数后所在的xdata段数据被莫名修改掉了

但是等到发送完再退出函数是正常的

按理说我就一个发送函数使用的了xdata内存,其他没地方使用xdata内存,没理由会被修改掉数据
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:641
  • 最近打卡:2025-12-17 10:15:23
已绑定手机
已实名认证

123

主题

3278

回帖

8316

积分

版主

积分
8316
发表于 2025-11-17 11:43:39 | 显示全部楼层
可以尝试加入volatile关键词防止编译器优化
同时需要注意,C51最大可发送长度为256,C251最大可发送长度为65536
同时,C251需要8位8位的载入寄存器,16位一次性载入的需要对应的寄存器支持,否则载入顺序会错误
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-12-17 13:11 , Processed in 0.096962 second(s), 43 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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