关于函数参数报错的问题
请教一下大佬,这样的传参数会有问题,怎么解决?
第一个函数,两个结构体指针,会报错
第二个不会,
第三个会报错
报错如下
PS:网上说可以加关键字,加上后虽然不报错了,但是调试时传过去的值是有问题的。。。。。
为什么报错是和C51 编译器对于形参的使用有规定的问题,,这个问题常见于指针函数中,,,
为什么调试时会出错,你可以继续关注一下reentrant关键字的用法。。在咱们论坛里面随便搜搜这个关键字就有文章介绍了 _奶咖君_ 发表于 2024-8-15 17:46
为什么报错是和C51 编译器对于形参的使用有规定的问题,,这个问题常见于指针函数中,,,
为什么调试时会 ...
大佬,像C51编译器对于形参的使用有规定的这个,我能在哪里找到官方的说明文档呀 LairdXin 发表于 2024-8-15 17:57
大佬,像C51编译器对于形参的使用有规定的这个,我能在哪里找到官方的说明文档呀 ...
keil 里面有个book页面 里面有介绍 或者去keil官网里面搜 本帖最后由 LairdXin 于 2024-8-19 15:19 编辑
_奶咖君_ 发表于 2024-8-15 23:31
keil 里面有个book页面 里面有介绍 或者去keil官网里面搜
大佬,我看见你以前的回复了,但是我加上reentrant通过Printf打印出来还是错的?我人都快懵了,是我哪里没弄对吗?
调用顺序是这样的
函数声明
打印输出
串口打印结果
LairdXin 发表于 2024-8-19 15:16
大佬,我看见你以前的回复了,但是我加上reentrant通过Printf打印出来还是错的?我人都快懵了,是我哪里没 ...
从头到尾没看到你用什么单片机,,基于之前我说C51等等的时候没有反驳我说你用的C251,,那么以下就基于你用C51编译器的单片机来说,,,
首先你要注意,printf函数中格式字符与数据类型的匹配,,至于怎么匹配,还是我上面说的,去小书里面看或者论坛里面搜,都可以。推荐还是看keil的官方文档。
看到你的EventTimeout_InitTypeDef_t 这个结构体中 event_id 这个成员变量的uint8_t类型的 而你这里用的%d 这样即使后面正确使用reentrant关键字,他也不会出现正确的结果。
其次,reentrant这个关键字怎么使用,还是上面推荐的方法 看小书里面或者再论坛中搜索相关内容。这个关键字联系着很多知识,不是说你在函数后面加上了关键字工程就一定能用,这里一句两句说不清楚,
最后,还是推荐你先别一块处理这两个问题,,一个一个来,先弄懂 printf怎么正确打印变量,再去全力做么reentrant关键字,,
LairdXin 发表于 2024-8-19 15:16
大佬,我看见你以前的回复了,但是我加上reentrant通过Printf打印出来还是错的?我人都快懵了,是我哪里没 ...
还有要注意 printf知识在搜索的时候 要搜索keil c51 这里是和PC上的C语言区别的地方。 _奶咖君_ 发表于 2024-8-19 16:36
从头到尾没看到你用什么单片机,,基于之前我说C51等等的时候没有反驳我说你用的C251,,那么以下就基于 ...
好的,大佬
1.我用的单片机是STC8H8K64U
2.其次是printf,C51的是不一样,确实是我的问题。
代码修改后,地址也添加了打印:
打印结果
现在看起来传的第一个指针传过去,并且值是没有问题的,但是第二个指针地址都变了,值也不对
本帖最后由 LairdXin 于 2024-8-19 17:25 编辑
_奶咖君_ 发表于 2024-8-19 16:36
从头到尾没看到你用什么单片机,,基于之前我说C51等等的时候没有反驳我说你用的C251,,那么以下就基于 ...
好的,大佬
1.我用的单片机是STC8H8K64U
2.其次是printf,C51的是不一样,确实是我的问题。
代码修改后,地址也添加了打印:
打印结果
现在看起来传的第一个指针传过去,并且值是没有问题的,但是第二个指针地址都变了,值也不对
本帖最后由 LairdXin 于 2024-8-19 17:30 编辑
_奶咖君_ 发表于 2024-8-19 16:38
还有要注意 printf知识在搜索的时候 要搜索keil c51 这里是和PC上的C语言区别的地方。 ...
不知道回复有什么问题,出Bug了,我重新发一次
官方示例如下:
1.我用的单片机是STC8H8K64U
2.其次是printf,C51的是不一样,确实是我的问题。
代码修改后,地址也添加了打印:
打印结果
现在看起来传的第一个指针传过去,并且值是没有问题的,但是第二个指针地址都变了,值也不对
页:
[1]
2