Свежие обсуждения
Микроконтроллеры

Ошибки при компиляции - прошу помочь !

1 4 5

Wladimir_TS: Напоминаю
Помню.

Wladimir_TS: Кстати вопрос ко всем - русскоязычное описание этого Си где-нибудь водится ?
Си вообще - есть. Конкреные компиляторы - сомневаюсь.

 

Понятно, что Си. С конкретным компилятором уже не знаю как разбираться. Английский мануал есть, но в нем черт ногу сломит.

ЗЫЗ Если какая идея будет лучше на форуме, я завтра с работы выйду - там поковыряюсь.

 

Вопрошаю еще раз. Хоть ткните носом - как подпрограммы оформить для корректного вызова ?

 

void MoyaPodprogramma(void)
{
// текст
}

void - отсуствие параметров

Вызываете ее как MoyaPodprogramma();

или

unsigned char MoyaPodprogramma(unsigned char T)
{
return T+1;
}

вызов как: T1=MoyaPodprogramma(T5); или T1=MoyaPodprogramma(10);

Подпрограмма должа быть выше места ее вызова.
Или в самом верху листинга нужно вписать название подпрограммы с точкой с запятой в конце:
unsigned char MoyaPodprogramma(unsigned char T);

 

Там чуть больше проблем. Расшаренные переменные надо тоже выносить во внешние определения.
Wladimir_TS, я прошу прощения за задержку, был несколько занят.

 

Понятно - вопрос тогда такой, если эта подпрограмма находится в другом файле, тогда как ее надо описать ? В AVRовском ассемблере проще - там и файл в проект вносить надо и Include ему делать. И все проходит. А тут как-то непонятно.

Еще вопрос - почему он на пустом месте после окончания описания подпрограммы и закрытия "}" требует зяпятую ?

void Delay_Us( UBYTE dcnt)

dcnt - это точно переменная

UBYTE - это ее тип ?

Error [1098] C:\OSC\projekt\proj\delay.c; 34. conflicting declarations for variable "_Delay_Us" (C:\OSC\projekt\proj\delay.c:34)

Не могу понять структуру системы Delay.C и Вудфнюр - в них обоих есть по одинаковой подпрограмме DelayUs(x)

Только в *.h она выглядит так :

#define DelayUs(x) { unsigned char _dcnt; \
if(x>=4) _dcnt=(x*(FREQ_MULT)/2); \
else _dcnt=1; \
while(--_dcnt > 0) \
{\
asm("nop");\
asm("nop");\
continue; }\
}

extern void DelayMs(unsigned char);

Особенно последняя строка неясна ???

А в delay.c - вот так :

void Delay_Us( UBYTE dcnt)
{
--dcnt;
do
{
#asm
nop;
nop;
nop;
nop;
nop;
nop;
nop;
#endasm
}while(--dcnt != 0);
#asm
nop;
nop;
nop;
#endasm
}

 

extern void MoyaProgramma(void); Примерно так Насчет "пустого места" давайте пример.

 

#include "delay.h"

void
DelayMs(unsigned char cnt)
{
#if XTAL_FREQ <= 2MHZ
do {
DelayUs(996);
} while(--cnt);
#endif

#if XTAL_FREQ > 2MHZ
unsigned char i;
do {
i = 4;
do {
DelayUs(240);
DelayUs(240);
DelayUs(240);
DelayUs(240);
} while(--i);
} while(--cnt);
#endif
}
##########################
## Вот прямо в этом месте ##
##########################
void Delay_Us( UBYTE dcnt)
{
--dcnt;
do
{
#asm
nop;
nop;
nop;
nop;
nop;
nop;
nop;
#endasm
}while(--dcnt != 0);
#asm
nop;
nop;
nop;
#endasm
}

 

Собственно вопрос о взаимодействии вот этого участка

#define DelayUs(x) { unsigned char _dcnt; \
if(x>=4) _dcnt=(x*(FREQ_MULT)/2); \
else _dcnt=1; \
while(--_dcnt > 0) \
{\
asm("nop");\
asm("nop");\
continue; }\
}

extern void DelayMs(unsigned char);

С остальной программой в посте перед этим.

 

Говорить что-то трудно, судя по всему, у вас дважды встретилось объявление _Delay_Us (возможно, в виде #define ... ). Просмотрите глазами все файлы - боюсь, другим способом проблему не решить...