sergeys писал(а):Значит warning такой: type of 'sec' defaults to 'int'. Это он предлагает поменять тип переменной sec на int? Зачем?
Компилятор предупреждает, что, поскольку тип формального параметра функции hextobcd явно не указан, по умолчанию он принимается int.
Разберитесь как следует с формальными параметрами и фактическими аргументами функций в языке C.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
работает! Я что-то думал что если переменная уже объявлена глобально, то тут не надо тип указывать.
А теперь еще одна проблема:
вызываю функцию hextobcd так: hextobcd(sec, sec1); т.е. с 2 аргументами, в описании соответсвенно тоже 2. А компилятор мне говорит, что слишком много аргументов для функции: too many arguments to function 'hextobcd'. Что-то я нигде не видел, что больше 1 аргумента нельзя
А, так и есть, путаю, поэтому писал:
unsigned char hextobcd(unsigned char sec, sec1) и компилятор ругался, что много аргументов, оказывается надо так:
unsigned char hextobcd(unsigned char sec, unsigned char sec1), так все работает! Goldsmith, HHIMERA, спасибо за помощь!
sergeys писал(а):оказывается надо так:
unsigned char hextobcd(unsigned char sec, unsigned char sec1), так все работает! Goldsmith, HHIMERA, спасибо за помощь!
int sum(int op1, int op2); //объявление функции(прототип функции)
/*
заголовок функции(без тела)
причем указаны типы аргументов и тип возвращаемого значения
имена аргументов можно опустить, т.е написать
int sum(int, int)
*/
int main()
{
int a=2, b=3, c;
c = sum(a, b) //вызов функции (переменной c присвоится результат выполнения функции)
/*
типы аргументов, и тип возвращаемого значения указывать не нужно
*/
}
int sum(int op1, int op2) //определение функции
/*
в заголовке указываются все типы аргументов и тип возвращаемого значения
кроме заголовка имеется тело функции
*/
{
int result;
result = op1 + op2;
return result //return возвращает результат(это может быть число, переменная или выражение)
}
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
# Compiler flag to set the C Standard level.
# c89 = "ANSI" C
# gnu89 = c89 plus GCC extensions
# c99 = ISO C99 standard (not yet fully implemented)
# gnu99 = c99 plus GCC extensions
CSTANDARD = -std=gnu99
Здравствуйте! С наступающими праздниками и НГ!
Подскажите пожалуйста, в чем секрет прошивки Atmega64 по SPI? Все что ниже этого МК прошивается как следует, а этот как будто бы и не подключен к программатору. Программатор - AVR910.
Питание подключено правильно, линии программирования тоже правильно. Тактовый сигнал подавал как с внешнего генератора, так и с кварцевого резонтора. МК новые, пробовал две штуки прошивать.
у 128-й аналогично.
откройте datasheet: Memory Programming -> SPI Serial Programming Pin Mapping
и нет там никаких проблем
ps. 64-ю не пробовал, а 128-ю спокойно шил через байтбластер+avreal
просветите чайника, будет ли работать мой экспериментальный код?
компилируется без ошибок, но я сомневаюсь что такая штука будет работать правильно
переменная ведь меняется в процессе выполнения программы, а макрос заменит код при компиляции
а что вас в этом коде пугает ? будет работать, никуда не денется...
правда какой то странный алгоритм реализуете. точно не нужен еще один delay ? в текущем варианте визуально будет казаться что светодиод всегда потушен.. так как гореть он будет очень и очень короткий промежуток времени.. глазу совершенно не заметный...
unalex писал(а):да дело не в delay, это просто пример
смущает только то что #define выполняет замену текста перед компиляцией, а переменная count меняется во время работы программы
и что?
у вас вместо LEDSTATE(LED(count), 1) после препроцессора будет (1==0)?(PORTA&=~(1<<(LED(count)))):(PORTA|=(1<<(LED(count))))
и вместо LEDSTATE(LED(count), 0) будет после препроцессора будет (0==0)?(PORTA&=~(1<<(LED(count)))):(PORTA|=(1<<(LED(count))))
из-за того что результат сравнения можно предсказать заранее то:
-первая строка с оптимизируется в (PORTA|=(1<<(LED(count))))
-вторая строка с оптимизируется в (PORTA&=~(1<<(LED(count))))
#define - это не константа в программе, это строка в тексте программы для компиляции !
при старте компиляции - препроцессором просто происходит замена строк, и потом код программы компилируется..
если в define константа - то компилятор будет использовать это значение как константу, если это код программы (как в вашем случае) - компилятор вставит в нужную часть программы этот код и потом откомпилирует весь листинг программы как программу (прямо масло масленное
Последний раз редактировалось ВитГо Пн янв 21, 2013 06:36:56, всего редактировалось 3 раза.