0
struct MemoryTag1;

typedef struct MemoryTag1{
    char a[8]= {'+','0','2','6','.','5','EA','\r'}; // setpoint temperature value
    char b[8]= {'-','0','2','4','.','5','EB','\r'};
    char c[6]= {'+','0','2','0','EC','\r'};
    }Memory1;

// これは、シリアル インターフェイス (RS232) を介して転送し、後で整数値に変換したいメッセージ構造です。これで私を導いてください。

4

4 に答える 4

0

それは実際には C 構文ではありません。

型の宣言に初期化子を含めることはできません。これには意味がありません。

メッセージを作成するには、次のようにする必要があります。

 typedef struct {
   char a[10];
   char b[10];
   char c[8];
 } Memory1;

 int main(void)
 {
   Memory1 m1;

   strcpy(m1.a, "+026.5EA\r");
   strcpy(m1.b, "-024.5EB\r");
   strcpy(m1.c, "+020EC\r");
   return 0;
 }

上記により、メッセージのフィールドに適切な C 文字列が作成されることに注意してください。つまり、ターミネータとして機能する 0 文字があります。サイズが小さかったので交換しました。

ターミネータ文字を許可しない形式でこれを送信する必要がある場合は、ターミネータ文字を無視するのは簡単です。各フィールドを個別に送信します。

フィールドの 1 つを整数に変換するには、たとえば を使用sscanf()します。

于 2013-05-21T09:37:53.787 に答える
0

あなたの構文は少しずれています - これを試してください:

// declare Memory1 struct type to hold data

typedef struct MemoryTag1 {
    char a[9]; // setpoint temperature value
    char b[9];
    char c[7];
} Memory1;

// allocate and initialise a Memory1 struct

Memory1 m = { {'+','0','2','6','.','5','E','A','\r'},
              {'-','0','2','4','.','5','E','B','\r'},
              {'+','0','2','0','E','C','\r'} };
于 2013-05-21T09:38:25.280 に答える
0

この方法で C で struct を宣言することはできません。

そのはず

typedef struct MemoryTag1{
    char a[9];
    char b[9];
    char c[7];
    }Memory1;

この構造体のオブジェクトの宣言で値を設定できます。

Memory1 test = {
    {'+','0','2','6','.','5','E','A','\r'},
    {'-','0','2','4','.','5','E','B','\r'},
    {'+','0','2','0','E','C','\r'}
};

オブジェクトの各開始でこのブロックを使用すると、Memory1マクロを使用して簡単にすることができます。

#define INIT_MEMORYTAG1 {\
    {'+','0','2','6','.','5','E','A','\r'},\
    {'-','0','2','4','.','5','E','B','\r'},\
    {'+','0','2','0','EC','\r'}\
}

そして、Memory1オブジェクトの宣言で:

Memory1 test = INIT_MEMORYTAG1;

ところで: ,を1 文字のように'EA','EB''EC'区切る必要がある ため、構造体定義で char 配列のサイズを更新する必要があります。'E','A''E','B''E','C'

于 2013-05-21T09:36:33.327 に答える