vek писал(а):/*Здравствуйте. вопрос глупый есть
№1: Что значит : функция не принимает параметров и функция не возвращает значений? На пальцах,что-б детсадовец понял не объясните?
Попробую, пожалуй. Сначала - абстрактно. Функция - некоторый кусок кода, который для удобства оформлен этим самым отдельным куском. Какое может быть удобство? А вот какое: он выполняет некое типичное действие, которое, вероятно, потребуется не один раз. Не писать же этот код каждый раз заново... И лишний труд, и читаемость программного кода страдает. Но в разных случаях действие это может быть выполнено немного по-разному. Пример: та же самая задержка времени. В одном случае нудна одна микросекунда, в другом три. Писать разные функции или вызывать одну и ту же три раза, чтобы получить три микросекунды? Глупо. Умнее сказать функции, сколько микросекунд задержки отрабатывать. Сказать - это передать ей параметр. Для этого она пишется так, чтобы этот параметр принять. Пример:
void delay(uint16_t time);
функция delay принимает один параметр: время задержки. А другой пример - скажем, функция всегда ведёт себя одинаково, и ей параметров передавать не нужно - просто незачем. Какой пример... да хоть выставить на ноге единичный уровень сигнала (притянуто за уши, конечно):
void set_pin(void);
В скобках void указывает на то, что никаких параметров там нет.
То же самое касается и возвращаемых значений. Функция delay ничего не возвращает, просто по истечении времени она окончит свою работу и процесс пойдёт дальше. А можно захотеть функцию, которая вводит значение целого порта, и оно дальше используется в программе. Тогда пишем её так:
uint8_t get_port(void);
Функция get_port возвращает байт, который был введён через порт.
Ну вот, как-то так.
vek писал(а):И вопрос №2 по СИ для АВР: */
#define nop() {asm("nop");}//подключаем функция для формирвания задержки
...//не важно что тут
....//не важно что тут
....//не важно что тут
...//не важно что тут
void delay(int t) //Функция задержки
{
for (x=0; x<t ;x++)
nop ();
}
/*2.1 значит ли что воид делэй(инт т) будет за каждый свой проход тратить времени всего 1 такт (Т.к. на операцию NOP по даташиту тратиться 1такт времени)? или тактов будет затрачено больше?А на сколько больше?(+1 такт на безусловный переход и всё?)
/*2.2*что значит "int t" в строчке "void delay(int t)"? */
/*
№3 к примеру выше вопрос: #define nop() {asm("nop");} /*тут не могли-бы объяснить синтаксис прям всей строчки? я не пойму,то-ли в скобочках путаюсь,то-ли в точказапятых,то-ли в фигурных скобочках.
Нет. Функция будет тратить НЕКОТОРОЕ количество тактов: прежде всего, на организацию цикла for, ну и, конечно, на саму пустую операцию nop. Сколько именно? Считать эти такты - маньячество, не надо этим заниматься. Задержки вообще делаются не так, но об этом говорить пока рановато. Кроме того, не забываем, что цикл for выполняет своё тело столько раз, чему равно значение переменной t - то есть параметра, который передан функции программой, которая её вызвала. Вот захотелось ей сделать задержку в 38 попугаев (не микросекунд!), и потому в программе написано:
delay(38);
Всё, функция delay получила себе число 38 и именно 38 раз дёрнет цикл с nop-ом внутри.
Обсуждать ассемблерные вставки пока не будем, рано. Примите как данность, что функция nop() - это и есть одна пустая операция.