#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; имя метки; имя макроса; или параметр макроса «.