PIC18F46J50 microctontroller に FatFs モジュールを実装したいのですが、プロジェクトのビルド中にエラーが発生し、先に進むことができません。低レベルのディスク Io モジュールで必要な変更を行いましたが、まだ機能していないようです。SPIモジュールを初期化するコードは次のとおりです。
spi.c
#include <xc.h>
#include "spi.h"
/**
Section: Macro Declarations
*/
#define SPI_RX_IN_PROGRESS 0x0
/**
Section: Module APIs
*/
void SPI2_Initialize(void) {
// Set the SPI2 module to the options selected in the User Interface
// R_nW write_noTX; P stopbit_notdetected; S startbit_notdetected; BF RCinprocess_TXcomplete; SMP Sample At Middle; UA dontupdate; CKE Active to Idle; D_nA lastbyte_address;
SSP2STATbits.CKE = 1;
// SSPEN enabled; WCOL no_collision; CKP Idle:Low, Active:High; SSPM FOSC/64; SSPOV no_overflow;
SSP2CON1bits.WCOL = 1;
// SSP2ADD 0;
SSP2ADD = 0x00;
}
void SPI2_Open(void) {
// Set the SPI2 module to the options selected in the User Interface
// R_nW write_noTX; P stopbit_notdetected; S startbit_notdetected; BF RCinprocess_TXcomplete; SMP Sample At Middle; UA dontupdate; CKE Active to Idle; D_nA lastbyte_address;
SSP2STATbits.CKE = 1;
// SSPEN enabled; WCOL no_collision; CKP Idle:Low, Active:High; SSPM FOSC/4; SSPOV no_overflow;
SSP2CON1bits.WCOL = 1;
SSP2CON1bits.SSPM = 0b0010;
// SSP2ADD 0;
SSP2ADD = 0;
}
uint8_t SPI2_Exchange8bit(uint8_t data) {
// Clear the Write Collision flag, to allow writing
SSP2CON1bits.WCOL = 0;
SSP2BUF = data;
while (SSP2STATbits.BF == SPI_RX_IN_PROGRESS) {
}
return (SSP2BUF);
}
uint8_t SPI2_Exchange8bitBuffer(uint8_t *dataIn, uint8_t bufLen, uint8_t *dataOut) {
uint8_t bytesWritten = 0;
if (bufLen != 0) {
if (dataIn != NULL) {
while (bytesWritten < bufLen) {
if (dataOut == NULL) {
SPI2_Exchange8bit(dataIn[bytesWritten]);
} else {
dataOut[bytesWritten] = SPI2_Exchange8bit(dataIn[bytesWritten]);
}
bytesWritten++;
}
} else {
if (dataOut != NULL) {
while (bytesWritten < bufLen) {
dataOut[bytesWritten] = SPI2_Exchange8bit(DUMMY_DATA);
bytesWritten++;
}
}
}
}
return bytesWritten;
}
bool SPI2_IsBufferFull(void) {
return (SSP2STATbits.BF);
}
bool SPI2_HasWriteCollisionOccured(void) {
return (SSP2CON1bits.WCOL);
}
void SPI2_ClearWriteCollisionStatus(void) {
SSP2CON1bits.WCOL = 0;
}
spi.h
#ifndef _SPI_H
#define _SPI_H
/**
Section: Included Files
*/
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#define DUMMY_DATA 0x0
void SPI2_Initialize(void);
void SPI2_Open(void);
uint8_t SPI2_Exchange8bit(uint8_t data);
uint8_t SPI2_Exchange8bitBuffer(uint8_t *dataIn, uint8_t bufLen, uint8_t *dataOut);
bool SPI2_IsBufferFull(void);
bool SPI2_HasWriteCollisionOccured(void);
void SPI2_ClearWriteCollisionStatus(void);
#endif
私が得るエラーは spi.c:59: エラー: (1098) 変数 "_SPI2_Exchange8bit" の宣言の競合 (diskio.c:78) (908) 終了ステータス = 1
私の知る限り、このエラーは、プロトタイプ関数の欠落またはヘッダー ファイルのインクルードの欠落が原因です。しかし、ここではそうではありません。some1がこれを手伝ってくれることを願っています。ありがとう