[应用相关] 各位大佬,同样的C代码执行结果不同的问题?

[复制链接]
4454|53
 楼主| stormwind123 发表于 2024-9-5 13:58 | 显示全部楼层 |阅读模式
我使用STM32控制NRF24L01时,出现下面的问题:有两份代码(烧录到发送机里,接收机的代码是没问题的)

两份代码的内容,文件,文件储存路径都是一样的,

但是A代码烧录进STM32后,接收机很快能收到发送机发送的数据

B代码烧录进STM32后,接收机要过很久才能收到发送机发送的数据

同样的AB代码(C代码是一样的),用Keil运行的汇编代码不一样

请问这是为什么
内政奇才 发表于 2024-9-5 16:19 | 显示全部楼层
即使C代码相同,不同的编译器优化设置(如优化等级、特定的优化选项等)可能会导致生成的汇编代码差异很大。这些差异可能影响到程序的执行效率、中断响应时间等,进而影响NRF24L01的通信性能。
检查两份代码在Keil中的项目设置,特别是编译器优化选项(如O0, O1, O2, O3等),确保它们完全一致。
七毛钱 发表于 2024-9-5 19:23 | 显示全部楼层
硬件连接是否稳定,电源是否足够且稳定,以及是否有其他潜在的电磁干扰源。
duo点 发表于 2024-9-5 20:23 | 显示全部楼层
检查链接器脚本(如果有的话),确保内存布局和初始化代码(如启动文件)在两个项目中是相同的。
两只袜子 发表于 2024-9-5 21:00 | 显示全部楼层
检查代码是否存在未定义行为
jcky001 发表于 2024-9-5 22:00 | 显示全部楼层
在初始化NRF24L01之前,STM32的时钟、GPIO、中断等都已经正确配置。
cr315 发表于 2024-9-5 22:56 | 显示全部楼层
如果可能的话,检查两个STM32开发板是否有任何硬件差异(如晶振频率、电容电阻值等),这些差异可能会影响程序的执行。
febgxu 发表于 2024-9-9 10:18 | 显示全部楼层
不同的编译器或编译器的不同版本可能会生成不同的机器码,这可能导致相同的C代码在编译后有不同的行为。
jonas222 发表于 2024-9-9 10:58 | 显示全部楼层
链接器也可能有影响性能的选项,如内存分配、库链接等。
mickit 发表于 2024-9-9 13:34 | 显示全部楼层
编译器生成的调试信息可能会影响程序的执行效率。如果两份代码的调试信息不同,可能会导致执行结果的差异。
mmbs 发表于 2024-9-9 14:57 | 显示全部楼层
如果代码中存在未初始化的变量,其初始值可能是随机的,并且在不同的编译和运行环境中可能会有所不同。这可能会影响到与 NRF24L01 的通信时序或配置。
AdaMaYun 发表于 2024-9-9 15:16 | 显示全部楼层
理论上同样型号的MCU不会有这种问题吧
plsbackup 发表于 2024-9-9 16:19 | 显示全部楼层
如果可能,尽量避免依赖全局变量和静态变量的初始化顺序,可以通过明确的初始化函数来确保变量的正确初始化。
呐咯密密 发表于 2024-9-9 17:19 | 显示全部楼层
编译器的优化等级一样吗
hearstnorman323 发表于 2024-9-9 19:37 | 显示全部楼层
如果发送机和接收机的内存访问模式不同(如DMA配置),可能会导致数据传输延迟。
lzmm 发表于 2024-9-9 22:40 | 显示全部楼层
STM32与NRF24L01之间的通信可能对时序敏感。检查代码中的延时函数和等待循环
cemaj 发表于 2024-9-10 01:41 | 显示全部楼层
不同的中断优先级或定时器配置可能导致数据发送/接收的延迟。
updownq 发表于 2024-9-10 04:43 | 显示全部楼层
检查代码中的中断处理程序和时序相关的代码
jackcat 发表于 2024-9-10 16:38 | 显示全部楼层
检查代码中的中断处理程序和时序相关的代码
everyrobin 发表于 2024-9-10 18:23 | 显示全部楼层
如果发送机和接收机的内存访问模式不同(如DMA配置),可能会导致数据传输延迟。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

605

主题

3747

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部