[问题] 请益标头档内的结构共用问题

楼主: wargods8402 (维尼X维尼)   2020-01-30 18:13:10
开发平台(Platform): (Ex: Win10, Linux, ...) win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Atmel studio GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)

问题(Question):
小弟第一次在这发文,如有不对烦请指证,谢谢!
目前正在学习韧体开发,遇到一个结构与标头档使用的问题,问题如下:
我在范例程式专案中加入了我自己写的Library,分别为a_measure.c、
a_measure.h、a_REG.h,结构都放在a_REG.h里面。
范例为b.c、b.h
现在我想把a_measure.c运算后的结果存放进a_REG.h的一个名为temp的结构里面
,并且让b.c能够存取temp的内容。
我的认知中,应该是只要在b.c#include "a_REG.h" 这个标头档即可使用temp
这个结构,并能赋值与取值。
目前的各函式include内容:
a.c => #include a.h
#include a_REG.h
b.c => #include a_REG.h
但是,在实作的后却出现a_REG.h多重定义的错误。
将a_REG.h从b.c拿掉后却又造成temp undeclared。
怎么做都不对...故想请问各位先进该如何解决呢?
或是有参考的资料,谢谢!
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
抱歉,程式内容过于庞大,无法贴上来...请见谅
补充说明(Supplement):
作者: Lipraxde (Lipraxde)   2020-01-30 18:47:00
恩...你知道 definition、declaration 的差别吗?
作者: chuegou (chuegou)   2020-01-30 22:44:00
#ifndef A_REG_H #define A_REG_H (中略) #endif
作者: LPH66 (-6.2598534e+18f)   2020-01-31 01:29:00
我的水晶球看起来可能也是楼上这个但还是想请你贴一下完整的错误讯息 (不要只有错误那行)
作者: Lipraxde (Lipraxde)   2020-01-31 11:59:00
我猜他可能是写了 struct { ... } temp = { ... };
作者: tsoahans (ㄎㄎ)   2020-01-31 14:33:00
使用别的档案的变量没有extern?
作者: Lipraxde (Lipraxde)   2020-01-31 16:24:00
通常是在标头档放 declaration,在原始档案 definition。Linker 找不到 definition 就会出现 undefined reference 啊不然你找找看编译参数有没有 -fno-common资源就官方范例、论坛、datasheet、google
作者: kobe8112 (小B)   2020-02-01 10:29:00
你想太多了,才不会是大家不太愿意分享技术勒= =重复include的速解2楼跟你说了,变量你直接宣告在某.c,其他要用的.c直接extern最快
作者: loveme00835 (发箍)   2020-02-01 14:47:00
因为你连基本常识都不会,所以就算前几楼把答案直接打出来,你也会以为人家藏步。如果有好好买本书看完基本上连这个问题都不会遇到
作者: Lipraxde (Lipraxde)   2020-02-01 18:41:00
官方论坛啊,还会有他们的人员专门处理问题。如果你是用中断更新 temp 的话 读的时候要暂时关掉中断
作者: Schottky (顺风相送)   2020-02-01 22:52:00
MCU 的 C 程式码可以在这问,纯粹讨论 Datasheet 可以到 Electronics 板这些没什么好藏的,都是公开资讯不是门派机密
作者: descent (“雄辩是银,沉默是金”)   2020-02-03 08:48:00
Uart 没办法print出浮点数, 请问这是什么意思?
作者: chuegou (chuegou)   2020-02-04 01:40:00
我猜library给的printf是输出到uart然后设定可能是tiny之类 所以有些型别不能输出
作者: easypro   2020-02-04 19:39:00
MCU用的Lib有些printf会被精简掉,需要设定成full才会全函数能使用,不然可以用sprintf的方式来做输出,这种通常内部实作不会精简。不同.c 呼叫外部的变量时请加extern 变量类型 变量名称;这样编译器才会知道这变量是要找外部变量教学文件 就datasheet 你要的是application note用example code 如果说一般通讯模组无带通讯协议通常都会有给,带通讯协议则看各厂家规范,有些需要花钱或签订NDA才会给
作者: descent (“雄辩是银,沉默是金”)   2020-02-05 08:46:00
https://descent-incoming.blogspot.com/2014/11/for-stm32f4discovery-10.html怎么印出 float 的作法, 给你参考一下。

Links booklink

Contact Us: admin [ a t ] ucptt.com