簡體   English   中英

在結構內初始化指針成員

[英]Initializing pointer member within structure

我正在嘗試編寫一個將從微控制器讀取特定地址值的模塊,初始化代碼已經自行編譯,但是當我嘗試在結構中編譯它時,似乎會抱怨。 在結構中初始化指針是否有限制?

#include <stdio.h>
#include <esper.h>
#include <stdlib.h>
#include <stdint.h>
#include "lmk04800.h"

#define NUM_MSS_GPIO 32

#define SEL_NIM     3
#define SOURCE_SEL  4
#define SEL_EXT     5
#define CLK0_3_EN   6
#define CLK4_7_EN   7
#define CLK8_11_EN  8
#define CLK12_15_EN 9
#define CLK16_19_EN 10
#define CLK20_23_EN 11
#define LMK_SYNC    12

typedef struct {
  int fd_gpio[NUM_MSS_GPIO];
  uint8_t data_gpio[NUM_MSS_GPIO];
  uint32_t esata_freqCounter;
  uint32_t ext_freqCounter;
  uint32_t esata_trgCounter;
  uint32_t ext_trgCounter;

  tLMK04800 settings;
  volatile uint32_t *freqCounter_addr;
  volatile uint32_t *trgCounter_addr;
  volatile uint32_t *manSync_addr;
  freqCounter_addr = (volatile uint32_t *)0x30000000;
  trgCounter_addr = (volatile uint32_t *)0x30000100;
  manSync_addr = (volatile uint32_t *)0x30000200;

 } tESPERModuleTest;

我得到的編譯錯誤是:

test/mod_test.h:32: error: expected specifier-qualifier-list before 'freqCounter_addr'

定義類型時,不能為結構成員定義初始值。 如果允許,它可能會很有用,並且初始值將自動應用於該類型的任何對象。 C只是不允許這樣做。

您只能初始化對象。

您已經定義了一個名為tESPERModuleTest的類型。 如果要定義和初始化該類型的對象,則可以在定義類型(未測試的代碼)之后執行以下操作:

tESPERModuleTest obj = {
    .freqCounter_addr = (volatile uint32_t *)0x30000000,
    .trgCounter_addr = (volatile uint32_t *)0x30000100,
    .manSync_addr = (volatile uint32_t *)0x30000200
};

(其他成員將默認為零初始化,或者您可以為其提供值。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM