你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于头文件里函数声明的问题。

[复制链接]
any012 提问时间:2016-5-30 13:58 /
本帖最后由 any012 于 2016-5-31 12:38 编辑

在crc.c文件里定义了这么一个函数,crc.h文件里也只有这个函数的声明。
u16 getCRC16(volatile u8 *ptr, u8 len);

在另一个.c文件里的某个函数调用该函数,并在.c文件开始时#include crc.h。不过第一个参数给的是16位数组的指针。
编译时,提示错误:
..\..\User\spi.c(111): error:  #167: argument of type "u16 *" is incompatible with parameter of type "u8 *"

然后,在主程序main.c里,加入include "crc.h",编译就通过了。
请教:main.c里并没有直接调用 getCRC16(),为何加入了相应的头文件就可以编译了?


-------------------------------------------------------------

更新上传下工程文件.
还是想不通,为什么在main.c里 include "crc.h"后编译能通过?

SPI从模式测试.zip (4.4 MB, 下载次数: 5)
收藏 评论17 发布时间:2016-5-30 13:58

举报

17个回答
Dylan疾风闪电 最优答案 回答时间:2016-5-31 08:33:48
提示错误:
..\..\User\spi.c(111):


错误提示中说明的很明白,错误位置位于“spi.c”文件的第111行代码处。所以和main没有关系的。

至于你在main中包含头文件后,使编译通过。那要从“spi.c”与main的关联去思考。

评分

参与人数 1ST金币 +2 收起 理由
肖久 + 2

查看全部评分

wofei1314 最优答案 回答时间:2016-5-31 09:51:00
main函数中并未调用,所以不会判断

后面spi。c里调用了,传错参数了,自然是要报错的

既然知道是16位数组指针,为毛还用8位的形参?直接改成16位的不好吗?
如果不改的话,起码也加个强转....

评分

参与人数 1ST金币 +2 收起 理由
肖久 + 2

查看全部评分

moyanming2013 最优答案 回答时间:2016-6-2 10:58:57
“非常危险的”默认类型转换,多个包含头文件可能会优先用main.c里面的(不知道你对crc.h加预编译指示了没有),而这里面仅仅是让编译器获取一个指针信息,指针的大小和类型在C中都是4字节和void*的,故后面再调用就不显示错误了。
其实error#167是一个非常负责的错误提示,早期编译器可能不会在这个上面处理的那么细致。你看即使现在处理了也很难处理完整。
huaiqiao 回答时间:2016-5-31 10:26:10
我觉的是因为你在spi.c中调用这个getCRC16函数的时候,第一个参数的数据类型和 crc中定义的函数的数据类型不一致造成的。
操作的数据类型不一致,当然会报错了。

评分

参与人数 1ST金币 +2 收起 理由
肖久 + 2

查看全部评分

dsjsjf 回答时间:2016-5-31 08:38:10
顶楼上的
人之颠 回答时间:2016-5-31 08:42:51
数据指针的格式不一样,操作结果就会出错,
wenyangzeng 回答时间:2016-5-31 10:48:47
u8和u16数据类型不一致所致, "crc.h"里可能重新定义了。
zjg_lizhen 回答时间:2016-5-31 11:09:48

顶楼上的
荣丰宇 回答时间:2016-5-31 13:21:01
可能是getCRC16中u8与u16定义冲突了?
潇潇雨歇pku 回答时间:2016-5-31 15:39:21
好多人都答非所问,楼主又不是问为什么错了,楼主问的是为什么错误会莫名其妙的消失
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版