Функция не имеет полной ошибки компилятора прототипа

#c #embedded

#c #встроенный

Вопрос:

Я пытаюсь получить доступ к следующей функции

      err = SetupForFlash();
 

Эта функция написана на blackfin.c

 ERROR_CODE SetupForFlash(void)
{   
    unsigned imask_value;

    imask_value = cli();                /* disable interrupts */ 

    /* set clock multiplier and CCLK and SCLK divider */
    *pSIC_IWR |= 0x0001;                /* enable PLL wakeup */
    *pPLL_DIV  = ((CCLK_DIVIDER amp; 0x3) << 4) | (SCLK_DIVIDER amp; 0xF); 
    *pPLL_CTL  = (CLOCK_MULTIPLIER << 9) amp; 0x7E00;    /* set new clock multplier */
    ssync();
    idle();                             /* wait until PLL settle down */

    /* enable async memory banks and defines timing/waitstate */ 
    *pEBIU_AMBCTL0 = 0x7bb07bb0;
    *pEBIU_AMBCTL1 = 0xffc27bb0;
    *pEBIU_AMGCTL  = 0x000f;            /* enable all external memory banks */

    /* */    
    sti(imask_value);                   /* enable interrupts */

    return NO_ERR;
}
 

Прототип находится в blackfin.h следующим образом

 ERROR_CODE SetupForFlash(void);
 

Я использую эту функцию в irq_software.c
Я включаю заголовок blackfin.h, в котором есть прототип
, но я получаю предупреждение о том, что у функции нет полного прототипа

вот заголовок файла blackfin.h

 #ifndef __ERRORS_H__
#define __ERRORS_H__

// enum of possible errors
typedef enum
{
        NO_ERR,
        POLL_TIMEOUT,
        VERIFY_WRITE,
        INVALID_SECTOR,
        INVALID_BLOCK,
        UNKNOWN_COMMAND,
        PROCESS_COMMAND_ERR,
        NOT_READ_ERROR,
        DRV_NOTAT_BREAK,
        BUFFER_IS_NULL,
        NUM_ERROR_CODES,
}ERROR_CODE;


// function prototypes
ERROR_CODE SetupForFlash(void);
ERROR_CODE GetCodes(void);
ERROR_CODE PollToggleBit(unsigned long ulOffset);
ERROR_CODE ResetFlash(void);
ERROR_CODE EraseFlash(void);
ERROR_CODE EraseBlock( int nBlock );
ERROR_CODE UnlockFlash(unsigned long ulOffset);
ERROR_CODE WriteData( unsigned long ulStart, long lCount, long lStride, int *pnData );
ERROR_CODE FillData( unsigned long ulStart, long lCount, long lStride, int *pnData );
ERROR_CODE ReadData( unsigned long ulStart, long lCount, long lStride, int *pnData );
ERROR_CODE ReadFlash( unsigned long ulOffset, int *pnValue );
ERROR_CODE WriteFlash( unsigned long ulOffset, int nValue );
ERROR_CODE GetSectorNumber( unsigned long ulOffset, int *pnSector );
ERROR_CODE GetSectorStartEnd( long *lStartOff, long *lEndOff, int nSector );


#endif // __ERRORS_H__
 

Комментарии:

1. ERROR_CODE Определено?

2. да, это определено в . h в blackfin .h

3. почему отрицательный мой вопрос!! без каких-либо комментариев

4. ERROR_CODE Определяется до или после SetupForFlash() ?

5. он определен перед SetupForFlash(); в .h blackfin.h

Ответ №1:

Возможно __ERRORS_H__ , определяется системным включением. Протестируйте с __MYERRORS_H__ помощью .

Комментарии:

1. Обычно следует избегать написания защитных элементов компилятора, которые начинаются с символа подчеркивания. Обратите внимание на стандарт C 7.1.3: «Все идентификаторы, которые начинаются с символа подчеркивания и либо с заглавной буквы, либо с другого символа подчеркивания, всегда зарезервированы для любого использования».

2. @Lundin, можно ли считать имя препроцессора «идентификатором»? (Ваш комментарий еще действителен! Избегайте подчеркивания в именах.)

3. Я не думаю, что C имеет много формального определения термина «идентификатор». 6.2.1 кажется наиболее близким к формальному определению: » Идентификатор может обозначать объект; функцию; тег или элемент структуры, объединения или перечисления; имя typedef; имя метки; имя макроса; или параметр макроса «.