找回密码
 立即注册
查看: 73|回复: 4

求救贴:使用CAN对STC的程序进行读出(已解决!!memcpy使用不当造成的后果)

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-07-21 14:09:45

5

主题

19

回帖

86

积分

注册会员

积分
86
发表于 2025-7-21 14:09:45 | 显示全部楼层 |阅读模式
如图:使用MOV进行对0x00ff 0000地址上的128字节进行读出,然后通过CAN进行发送,但是读出与实际烧录进去的HEX数据有误,请问这个该如何处理达到效果?
截图202507211155529103.jpg


截图202507211407223789.jpg


截图202507211408152092.jpg

附上代码可以可以直接测试一下

main.c

16.08 KB, 下载次数: 0

main.crf

64.58 KB, 下载次数: 1

main.LST

27.05 KB, 下载次数: 1

main.OBJ

15.43 KB, 下载次数: 1

sample

11.93 KB, 下载次数: 1

sample.build_log.htm

1.35 KB, 下载次数: 2

sample.hex

4.13 KB, 下载次数: 1

sample.lnp

85 Bytes, 下载次数: 3

sample.MAP

33.7 KB, 下载次数: 1

sample.uvgui.Administrator

174.61 KB, 下载次数: 2

sample.uvopt

6.19 KB, 下载次数: 0

sample.uvproj

12.38 KB, 下载次数: 1

功能说明.txt

839 Bytes, 下载次数: 3

回复

使用道具 举报 送花

3

主题

247

回帖

-795

积分

等待验证会员

积分
-795
发表于 2025-7-21 14:12:00 | 显示全部楼层
针对您提出的关于使用CAN接口从STC单片机中读取特定地址(0x00FF 0000)的128字节数据并进行发送的问题,以下为专业分析与建议:

首先,需明确STC系列单片机的存储结构。STC单片机通常采用Flash存储器作为程序存储空间,其地址范围一般从0x0000开始,具体取决于芯片型号。例如,STC89系列的Flash地址范围通常为0x0000至0x3FFF(对于16K Flash芯片),而部分高容量型号可能支持更大的地址空间。因此,0x00FF 0000这一地址是否在可访问范围内,需根据具体型号确认。

其次,您提到使用MOV指令对0x00FF 0000地址进行读取。然而,STC单片机的汇编语言中,MOV指令用于寄存器间的数据传输,无法直接访问外部存储器或特定地址空间。若要读取Flash中的数据,应使用专门的指令或库函数,例如通过调用内部Flash读取函数或使用ISP(In-System Programming)功能。

此外,您提到通过CAN接口发送读取的数据,但实际结果与HEX文件内容不符。这可能涉及以下几个方面的原因:

1. 地址映射问题:确保0x00FF 0000地址确实在Flash的可访问范围内。若该地址超出Flash范围,读取操作将返回错误数据或未定义值。

2. 读取方式不正确:STC单片机的Flash读取需遵循特定时序和协议。若直接使用MOV指令,可能无法正确获取数据,建议使用官方提供的API或参考数据手册中的读取方法。

3. CAN通信配置问题:检查CAN控制器的初始化配置,包括波特率、帧格式、ID设置等,确保发送端与接收端参数一致。

4. 数据校验机制缺失:在发送数据前,建议添加校验码(如CRC)以确保数据完整性,避免因通信错误导致数据失真。

综上所述,建议您采取以下步骤进行排查与优化:
确认目标地址0x00FF 0000是否在STC单片机的Flash地址范围内。
使用官方提供的Flash读取方法替代MOV指令。
检查CAN通信配置,确保发送与接收参数匹配。
添加数据校验机制,提高通信可靠性。

如需进一步帮助,请提供具体的STC型号及完整代码,以便进行更详细的分析。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 0 反对 1

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-07-31 08:58:47
已绑定手机

87

主题

5532

回帖

1万

积分

超级版主

DebugLab

积分
10123
发表于 2025-7-21 14:36:02 | 显示全部楼层
*(unsigned char far *)(addr)
截图202507211438414977.jpg

DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-07-21 14:09:45

5

主题

19

回帖

86

积分

注册会员

积分
86
发表于 2025-7-21 16:59:26 | 显示全部楼层
Debu*** 发表于 2025-7-21 14:36
*(unsigned char far *)(addr)

这个是对的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-07-31 08:58:47
已绑定手机

87

主题

5532

回帖

1万

积分

超级版主

DebugLab

积分
10123
发表于 2025-7-21 17:28:57 | 显示全部楼层

我用printf显示到TFT的,改成无符号才能正常显示,还以为是这里的问题
DebugLab
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-1 01:53 , Processed in 0.113285 second(s), 71 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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