0

我无法在文件之间共享 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 填充了数组。

主.c:

extern trama_tpv_t array_trama_tpv[TAMCOLAPAGOS];

编辑:解释我如何填充数组有点复杂,因为我在 pagos.c 中收集蓝牙帧。这是一个编译后的代码,用作 nRF51 蓝牙开发套件的固件。问题是我在 pagos.c 中获得了信息,因为我可以使用我自己的 lib 打印importeusuario以便在 LCD-TFT 显示器上打印。问题是我需要获取数组的值才能使用存储在数组中的数据打印数组,并且我使用bool posicion_ocupada知道可以写入哪个数组位置。问题不在于代码的目标,而在于我如何共享 typedef 数组结构,因为在 Java 中在创建 objetc 时使用 public 就足够了,但在 CI 中必须缺少一些东西。为了链接和编译,我使用 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);

测试.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");
        }
    }

}

测试.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 值时,它们都是 false。奇怪的是,我能够共享变量,例如 int、bool 或类似的东西,但是我无法共享这些值。

先感谢您。我已经检查并尝试了许多来自这里的帖子,如果我错过了什么,非常抱歉。

问候,

伊万

4

0 回答 0