2017-03-09 20 views
1

「ストロークサイズがわからない」という問題があります。私はstackoverflowをチェックし、私はいくつかの答えを見つけた。しかし、これらのソリューションは機能しませんでしたか、私はこれらの答えをうまく使用できませんでした。「変数」のストロークサイズがわからない

私の問題を解決するのを手伝ってください。 お世話になりありがとうございました。

main.cのファイル

#include <avr/io.h> 
#include <PORT.h> 

int main(void) 
{ 

    // Insert code 
    PORT a; 

    while(1) 
    ; 

    return 0; 
} 

PORT.hファイル

#ifndef PORT_H_INCLUDED 
#define PORT_H_INCLUDED 

#include <config.h> 

    typedef enum PORT_TYPE{ 
    // All port in ATmega328P 
     PORT_B, 
     PORT_C, 
     PORT_D 
    }PORT_TYPE; 

    typedef enum PORT_PIN{ 
    // All pins in ATmega328P 
     PIN_0, 
     PIN_1, 
     PIN_2, 
     PIN_3, 
     PIN_4, 
     PIN_5, 
     PIN_6, 
     PIN_7 
    }PORT_PIN; 

    typedef struct PORT PORT; 

    void PORT_init(PORT * const me, 
        void (* setDirectionFunction)(PORT * const me, PORT_PIN pinNumber), 
        void (* setStatusFunction)(PORT * const me, PORT_PIN pinNumber), 
        void (* enablePullResistorFunction)(PORT * const me, PORT_PIN pinNumber), 
        void (* disablePullResistorFunction)(PORT * const me, PORT_PIN pinNumber), 
        void (* notifyPinChangeFunction)(PORT * const me, PORT_PIN pinNumber), 
        unsigned char (*readPINFunction)(PORT * const me, PORT_PIN pinNumber), 
        unsigned char (*readPortFunction)(PORT * const me)); 

    void PORT_setDirection(PORT * const me, PORT_PIN pinNumber); 
    void PORT_setStatus(PORT * const me, PORT_PIN pinNumber); 
    void PORT_enablePullResistor(PORT * const me, PORT_PIN pinNumber); 
    void PORT_disablePullResistor(PORT * const me, PORT_PIN pinNumber); 
    void PORT_notifyPinChange(PORT * const me, PORT_PIN pinNumber); 
    unsigned char PORT_readPIN(PORT * const me, PORT_PIN pinNumber); 
    unsigned char PORT_readPort(PORT * const me); 

    PORT * PORT_create(PORT_TYPE whichPort); 
    void PORT_destroy(PORT * const me); 



#endif // PORT_H_INCLUDED 

PORT.cファイル

#include <avr/io.h> 
#include <PORT.h> 

#define ADDR_PORTB (0x0023) 
#define ADDR_PORTC (0x0026) 
#define ADDR_PORTD (0x0029) 

typedef volatile struct{ 
// it is used for manipulating registers. 
    unsigned char pin; 
    unsigned char ddr; 
    unsigned char port; 
}PORT_hw; 

struct PORT{ 
    unsigned char changePIN; 
    PORT_hw volatile *p_hw; 
    void (* setDirection)(PORT * const me, PORT_PIN pinNumber); 
    void (* setStatus)(PORT * const me, PORT_PIN pinNumber); 
    void (* enablePullResistor)(PORT * const me, PORT_PIN pinNumber); 
    void (* disablePullResistor)(PORT * const me, PORT_PIN pinNumber); 
    void (* notifyPinChange)(PORT * const me, PORT_PIN pinNumber); 
    unsigned char (*readPIN)(PORT * const me, PORT_PIN pinNumber); 
    unsigned char (*readPort)(PORT * const me); 
}; 

static PORT g_PORT[3]; 
g_PORT[0].p_hw = (PORT_hw volatile *)ADDR_PORTB; 
g_PORT[1].p_hw = (PORT_hw volatile *)ADDR_PORTC; 
g_PORT[2].p_hw = (PORT_hw volatile *)ADDR_PORTD; 

void PORT_init(PORT * const me, 
        void (* setDirectionFunction)(PORT * const me, PORT_PIN pinNumber), 
        void (* setStatusFunction)(PORT * const me, PORT_PIN pinNumber), 
        void (* enablePullResistorFunction)(PORT * const me, PORT_PIN pinNumber), 
        void (* disablePullResistorFunction)(PORT * const me, PORT_PIN pinNumber), 
        void (* notifyPinChangeFunction)(PORT * const me, PORT_PIN pinNumber), 
        unsigned char (*readPINFunction)(PORT * const me, PORT_PIN pinNumber), 
        unsigned char (*readPortFunction)(PORT * const me)){ 
    me->changePIN = 0x00; 
    me->pinStatus = 0x00; 
    me->setDirection = setDirectionFunction; 
    me->setStatus = setStatusFunction; 
    me->enablePullResistor = enablePullResistorFunction; 
    me->disablePullResistor = disablePullResistorFunction; 
    me->notifyPinChange = notifyPinChangeFunction; 
    me->readPIN = readPINFunction; 
    me->readPort = readPortFunction; 
} 

void PORT_setDirection(PORT * const me, PORT_PIN pinNumber){} 
void PORT_setStatus(PORT * const me, PORT_PIN pinNumber){} 
void PORT_enablePullResistor(PORT * const me, PORT_PIN pinNumber){} 
void PORT_disablePullResistor(PORT * const me, PORT_PIN pinNumber){} 
void PORT_notifyPinChange(PORT * const me, PORT_PIN pinNumber){} 
unsigned char PORT_readPIN(PORT * const me, PORT_PIN pinNumber){} 
unsigned char PORT_readPort(PORT * const me){} 


PORT * PORT_create(PORT_TYPE whichPort){ 
    PORT *p_PORT = &(g_PORT[whichPort]); 
    PORT_init(p_PORT, PORT_setDirection, PORT_setStatus, PORT_enablePullResistor, PORT_disablePullResistor, PORT_notifyPinChange, PORT_readPIN, PORT_readPort); 
    return p_PORT; 
} 
void PORT_destroy(PORT * const me){} 

答えて

2

PORT.hヘッダーファイルは、struct PORTが存在することを宣言したが、doesnの定義する:

typedef struct PORT PORT; 

実際の定義はPORT.cにあり、main.cには表示されません。

この結果、タイプPORTの変数を作成することはできません。ただし、タイプPORT *のいずれかを作成できます。定義がわからないので、これはの不透明なポインタと呼ばれます。

PORT.hで定義されている関数で判断すると、PORT_create関数を使用して、PORT *を返します。この後、他の関数に渡すことができます。

関連する問題