我无法在文件之间共享一个typef结构,具体来说是从一个文件和main.c.总结一下,我有以下内容:
pagos.h:
typedef struct
{
uint8_t usuario[LONGITUD_USUARIO];
uint8_t importe[LONGITUD_IMPORTE];
uint8_t fecha[LONGITUD_TIMESTAMP];
bool posicion_ocupada;
}trama_tpv_t;
pagos.c:
#include "pagos.h"
trama_tpv_t trama_tpv;
trama_tpv_t trama_tpv;
trama_tpv_t array_trama_tpv[TAMCOLAPAGOS];
我在这里使用trama_tpv和 array_trama_tpv [TAMCOLAPAGOS] ,因为我使用某些函数用trama_tpv填充数组。
main.c中:
extern trama_tpv_t array_trama_tpv[TAMCOLAPAGOS];
编辑: 解释如何填充数组有点复杂,因为我在pagos.c中收集了蓝牙帧。这是一个编译的代码,用作nRF51蓝牙开发套件的固件。问题是我在pagos.c中获取了信息,因为我能够使用自己的lib打印 importe 和 usuario ,以便在LCD-TFT显示器上打印。问题是我需要获取数组的值以便使用存储在数组中的数据打印数组,并使用 bool posicion_ocupada 来知道哪个数组位置可以写入。问题不在于代码的目标,而是如何共享一个typedef数组结构,因为在Java中创建objetc时使用公共就足够了,但在C中我必须缺少一些东西。 为了链接和编译我使用Keil,这应该做得很好。无论如何我正在尝试在XCODE中编写一个孤立的例子,结果是一样的,我可以共享bool,int ...但不是结构数组:
typedef struct
{
bool posicion_ocupada;
}trama_tpv_t;
隔离示例: main.c中:
#include <stdio.h>
#include <stdbool.h>
#include <time.h>
#include "test.h"
int main(){
init();
change();
for (int i=0; i<9; i++) {
if(array_trama_tpv[i].posicion_ocupada)
printf("\nel array es true");
else
printf("\nel array es false");
}
printarray(); /*Used only because I though that maybe calling a function which is located into test.c it could be able to access the values I want from the array.*/
return(0);
test.c的:
#include <stdio.h>
#include <stdbool.h>
#include <time.h>
#include "test.h"
//#include "global.h"
trama_tpv_t trama_tpv;
trama_tpv_t array_trama_tpv[9];
void init(void){
for (int i=0; i<9; i++) {
array_trama_tpv[i].posicion_ocupada=false;
}
}
void change(void){
for (int i=0; i<9; i++) {
if (i<6) {
array_trama_tpv[i].posicion_ocupada=true;
}
else{
array_trama_tpv[i].posicion_ocupada=false;
}
}
}
void printarray(void){
for (int i=0; i<9; i++) {
if (array_trama_tpv[i].posicion_ocupada) {
printf("\nes true");
}
else
{
printf("\nes false");
}
}
}
test.h:
#ifndef __bittest__test__
#define __bittest__test__
#include <stdio.h>
#include <stdbool.h>
#include <time.h>
typedef struct
{
bool posicion_ocupada;
}trama_tpv_t;
extern trama_tpv_t array_trama_tpv[9];
void init(void);
void change(void);
void printarray(void);
#endif /* defined(__bittest__test__) */
我得到的输出如下:
el array es true
el array es true
el array es true
el array es true
el array es true
el array es true
el array es false
el array es false
el array es false
es true
es true
es true
es true
es true
es true
es false
es false
es false
问题是,如果它应该是相同的数组,为什么我没有相同的结果。这可能吗? init()应该将所有布尔值设置为false,但它不是这样的。
我尝试在一个函数中使用它。所以我检查了设置一些断点 array_trama_tpv [0] .posicion_ocupada 设置为 true ,但是当我沿着数组并打印数组的所有posicion_ocupada值时,所有这些都是假的。好奇,我能够分享变量,如int,bool或类似的东西,但有了这个,我无法分享价值。
提前谢谢你。我已经检查并从这里尝试过很多帖子,如果我错过了什么就很抱歉。
此致
伊万