マイクロコントローラから特定のアドレス値を読み取るモジュールを作成しようとしていますが、初期化コードは独自にコンパイルされていますが、構造内でコンパイルしようとすると、 。構造内のポインターの初期化に制限はありますか?私が手構造内のポインタメンバーの初期化
#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'
'(uint32_t *)'にしてください。 –
ポインタをvolatileとして定義しても、ポインタが正しく指している値については何も保証されません。 –
確認するには 'lmk04800.h'ファイルに' tLMK04800'が指定されています。そして 'lmk04800.h'はコンパイラによって発見されました。 –