QQ624353765 发表于 2025-11-16 19:25:34

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

我在xdata内存申请了一段局部内存,给这段内存赋值后使用DMA_UART发送


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

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

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

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

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

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

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

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

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

王昱顺 发表于 2025-11-17 11:43:39

可以尝试加入volatile关键词防止编译器优化
同时需要注意,C51最大可发送长度为256,C251最大可发送长度为65536
同时,C251需要8位8位的载入寄存器,16位一次性载入的需要对应的寄存器支持,否则载入顺序会错误
页: [1]
查看完整版本: 使用DMA_UART发送数据C51和C251区别