找回密码
 立即注册
查看: 852|回复: 13

关于函数参数报错的问题

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2024-09-10 11:25:27

4

主题

13

回帖

88

积分

注册会员

积分
88
发表于 2024-8-15 17:40:24 | 显示全部楼层 |阅读模式

请教一下大佬,这样的传参数会有问题,怎么解决?
第一个函数,两个结构体指针,会报错
第二个不会,
第三个会报错
截图202408151735478925.jpg

报错如下
截图202408151737008048.jpg

PS:网上说可以加关键字,加上后虽然不报错了,但是调试时传过去的值是有问题的。。。。。
截图202408151740218303.jpg

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-8-15 17:46:44 | 显示全部楼层
为什么报错是和C51 编译器对于形参的使用有规定的问题,,这个问题常见于指针函数中,,,

为什么调试时会出错,你可以继续关注一下reentrant关键字的用法。。在咱们论坛里面随便搜搜这个关键字就有文章介绍了
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2024-09-10 11:25:27

4

主题

13

回帖

88

积分

注册会员

积分
88
发表于 2024-8-15 17:57:48 | 显示全部楼层
_奶*** 发表于 2024-8-15 17:46
为什么报错是和C51 编译器对于形参的使用有规定的问题,,这个问题常见于指针函数中,,,

为什么调试时会 ...

大佬,像C51编译器对于形参的使用有规定的这个,我能在哪里找到官方的说明文档呀
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-8-15 23:31:15 | 显示全部楼层
Lair*** 发表于 2024-8-15 17:57
大佬,像C51编译器对于形参的使用有规定的这个,我能在哪里找到官方的说明文档呀 ...

keil 里面有个book页面 里面有介绍 或者去keil官网里面搜
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2024-09-10 11:25:27

4

主题

13

回帖

88

积分

注册会员

积分
88
发表于 2024-8-19 15:16:34 | 显示全部楼层
本帖最后由 LairdXin 于 2024-8-19 15:19 编辑
_奶*** 发表于 2024-8-15 23:31
keil 里面有个book页面 里面有介绍 或者去keil官网里面搜

大佬,我看见你以前的回复了,但是我加上reentrant通过Printf打印出来还是错的?我人都快懵了,是我哪里没弄对吗?

调用顺序是这样的


截图202408191515108771.jpg


函数声明
截图202408191516228610.jpg

截图202408191519003092.jpg

打印输出
截图202408191515582583.jpg

串口打印结果
截图202408191517432383.jpg



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-8-19 16:36:34 | 显示全部楼层
Lair*** 发表于 2024-8-19 15:16
大佬,我看见你以前的回复了,但是我加上reentrant通过Printf打印出来还是错的?我人都快懵了,是我哪里没 ...

从头到尾没看到你用什么单片机,,基于之前我说C51等等的时候没有反驳我说你用的C251,,那么以下就基于你用C51编译器的单片机来说,,,

首先你要注意,printf函数中格式字符与数据类型的匹配,,至于怎么匹配,还是我上面说的,去小书里面看或者论坛里面搜,都可以。推荐还是看keil的官方文档。
看到你的EventTimeout_InitTypeDef_t 这个结构体中 event_id 这个成员变量的uint8_t类型的 而你这里用的%d 这样即使后面正确使用reentrant关键字,他也不会出现正确的结果。

其次,reentrant这个关键字怎么使用,还是上面推荐的方法 看小书里面或者再论坛中搜索相关内容。这个关键字联系着很多知识,不是说你在函数后面加上了关键字工程就一定能用,这里一句两句说不清楚,

最后,还是推荐你先别一块处理这两个问题,,一个一个来,先弄懂 printf怎么正确打印变量,再去全力做么reentrant关键字,,



参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-8-19 16:38:16 | 显示全部楼层
Lair*** 发表于 2024-8-19 15:16
大佬,我看见你以前的回复了,但是我加上reentrant通过Printf打印出来还是错的?我人都快懵了,是我哪里没 ...

还有要注意 printf知识在搜索的时候 要搜索keil c51 这里是和PC上的C语言区别的地方。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2024-09-10 11:25:27

4

主题

13

回帖

88

积分

注册会员

积分
88
发表于 2024-8-19 17:21:02 | 显示全部楼层
_奶*** 发表于 2024-8-19 16:36
从头到尾没看到你用什么单片机,,基于之前我说C51等等的时候没有反驳我说你用的C251,,那么以下就基于 ...


好的,大佬
1.我用的单片机是STC8H8K64U
2.其次是printf,C51的是不一样,确实是我的问题。



代码修改后,地址也添加了打印:




打印结果



现在看起来传的第一个指针传过去,并且值是没有问题的,但是第二个指针地址都变了,值也不对
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2024-09-10 11:25:27

4

主题

13

回帖

88

积分

注册会员

积分
88
发表于 2024-8-19 17:21:02 | 显示全部楼层
本帖最后由 LairdXin 于 2024-8-19 17:25 编辑
_奶*** 发表于 2024-8-19 16:36
从头到尾没看到你用什么单片机,,基于之前我说C51等等的时候没有反驳我说你用的C251,,那么以下就基于 ...

好的,大佬
1.我用的单片机是STC8H8K64U
2.其次是printf,C51的是不一样,确实是我的问题。



代码修改后,地址也添加了打印:
截图202408191724106964.jpg

截图202408191723543552.jpg


打印结果
截图202408191724238091.jpg
现在看起来传的第一个指针传过去,并且值是没有问题的,但是第二个指针地址都变了,值也不对
截图202408191706265543.jpg
截图202408191720185705.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2024-09-10 11:25:27

4

主题

13

回帖

88

积分

注册会员

积分
88
发表于 2024-8-19 17:28:55 | 显示全部楼层
本帖最后由 LairdXin 于 2024-8-19 17:30 编辑
_奶*** 发表于 2024-8-19 16:38
还有要注意 printf知识在搜索的时候 要搜索keil c51 这里是和PC上的C语言区别的地方。 ...

不知道回复有什么问题,出Bug了,我重新发一次

官方示例如下:
截图202408191730064506.jpg


1.我用的单片机是STC8H8K64U
2.其次是printf,C51的是不一样,确实是我的问题。



代码修改后,地址也添加了打印:

截图202408191728081341.jpg

截图202408191728214539.jpg

打印结果

截图202408191728384996.jpg


现在看起来传的第一个指针传过去,并且值是没有问题的,但是第二个指针地址都变了,值也不对


回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 17:26 , Processed in 0.147100 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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