Здрасти ВСЕМ!!!
Помогите пожалуйста советом.
Я написал программу в которой часто повторяются одинаковые куски кода (опрос ТМ и сравнивание полученного кода , код для работы зумера и др.....) .Всё что хотелось написать не помещается в память контроллера. На асме писать неумею, а си знаю не весь.
У меня такой вопрос - Можно-ли написать эти коды один раз и с помощью оператора RETURN в нужных местах программы обращаться к ним , а после выполнения возвращаться в исходное место?
Если ДА- то как это сделать?
Если НЕТ- то Заранее СПАСИБО!
То что вам,скорее всего надо,в С называется функцией.
Формат типа того
тип вощзвращаемого аргумента _имя функции (параметр_1,параметр_2,...);
Пример вот личный,если хотите можете пользоваться
void write_data_24C08(unsigned int adr_rom,unsigned char data)
{
unsigned int adr; //адрес куда будем записывать с учётом банка
unsigned char bank;//номер банка куда будем записывать данные (0-3)
unsigned char SLA_W;//CONTROL BYTE(4 бита-физический адрес,3 бита-номер банка,последний 0-направление (на запись)
if(adr_rom<256>255)&&(adr_rom<512>511)&&(adr_rom<768>767){bank=3;(char)adr=adr_rom-768;} //переключатели взависимости от номера ячейки памяти
SLA_W=0xA0 | (bank*2); //с преобразованием типа(из INT в CHAR)
Start;
while(BUSY);
TWDR=SLA_W; //адрес по даташиту (4-бита) и 3-бита это номер банка (4 банка по 256 бит)
ACK; //адресные ножки микросхемы (A0-A2)физически внутренне не подключены
while(BUSY);
TWDR=adr; //адрес в EEPROM(с учётом банка,одного из четырёх,для 24C08
ACK;
while(BUSY);
TWDR=data; //сами данные,которые будем записывать в EEPROM
ACK;
while(BUSY);
Stop;
delay_us(20);
}
Эта функция записывает ваши данные в нужный вам адрес микросхемы памяти 24C08 по I2C.
Здесь данные и адреса могут быть разными,а функция одна.
Не понимаю,я вставляю одно,а отображается исковерконным.
Присоеденю отдельно,а то бред какой-то получается.
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
... и с помощью оператора RETURN ... обращаться к ним ...
Вызовы оператором RETURN не осуществляются даже в бейсике. Думаю, пока не следует браться за Си.
А я думал, что этот форум существует для помощи начинающим в изучении работы с контроллерами , а тут вместо полезных для дела советов вставляют палки в колёса!
Вы лучше напишите как ркшить мою проблемму,если знаете как?
Напротив - совет не писать на Си тебе сейчас будет очень кстати, язык Си противопоказан при таких обстоятельствах, в которых ты находишься. Начни с чего-нибудь попроще.
Да дайте вы уже простой пример использования функций которые возвращают значение
Код:
int some_func(int x) { int t = x+3; return t*t; }
int main(void) { int b = 2; int c, d; c = some_func(b); d = some_func(c); return 0; }
спасибо вам за пример кода, но мне нужно не возвращать значение, а уходить в подпрограмму,а после её выполнения возвращаться на следующую строчку основной программы откда была вызванна подпрограмма.
мне нужно не возвращать значение, а уходить в подпрограмму,а после её выполнения возвращаться на следующую строчку основной программы откда была вызванна подпрограмма.
int main(void) { /*тут делается чего то*/ // вызываем функцию которая делает что-то часто используемое do_something(); /*опять чего нить делаем*/ // вызываем функцию которая делает что-то часто используемое do_something(); return 0; }
мне нужно не возвращать значение, а уходить в подпрограмму,а после её выполнения возвращаться на следующую строчку основной программы откда была вызванна подпрограмма.
int main(void) { /*тут делается чего то*/ // вызываем функцию которая делает что-то часто используемое do_something(); /*опять чего нить делаем*/ // вызываем функцию которая делает что-то часто используемое do_something(); return 0; }
Зарегистрирован: Вс янв 07, 2007 01:45:48 Сообщений: 491 Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения:0
И всё же не стоит задавать подобных вопросов не ознакомившись с базовой теорией. Вам уже советовали, ну почитайте учебник, иначе этот вопрос будет далеко не последним. Процедуры и функции - это базовые понятия, и использование оных практически не зависит от того, для чего Вы пишите, будь то МК, ПК, ... .
_________________ Научить нельзя, можно научиться. Пифагор. Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
И всё же не стоит задавать подобных вопросов не ознакомившись с базовой теорией. Вам уже советовали, ну почитайте учебник, иначе этот вопрос будет далеко не последним. Процедуры и функции - это базовые понятия, и использование оных практически не зависит от того, для чего Вы пишите, будь то МК, ПК, ... .
Програмирование микроконтроллеров не является моим основным занятием . Я занимаюсь установкой противоугонных систем на автомобили и там поверьте мне на слово есть чем занять голову, и к сожалению времени на изучение с нуля программированию микроконтроллеров, без чьей либо помощи является для меня сложной задачей. Я по возможности читаю учебники, но книга не всегда может помочь так, как человек в этом деле разбирающийся.
К сожалению большая часть людей в этом форуме готова строчить по три листа мелким шрифтом кто и что где-то недочитал, неже-ли просто НАПИСАТЬ 2 СТРОЧКИ КОДА С ПОЯСНЕНИЯМИ!
Извеняюсь если я кого-то этим письмом обидел, но это так.
Зарегистрирован: Вс янв 07, 2007 01:45:48 Сообщений: 491 Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения:0
Цитата:
Програмирование микроконтроллеров не является моим основным занятием
Вы здесь не один такой
Цитата:
К сожалению большая часть людей в этом форуме готова строчить по три листа мелким шрифтом кто и что где-то недочитал, неже-ли просто НАПИСАТЬ 2 СТРОЧКИ КОДА С ПОЯСНЕНИЯМИ!
Мда. Ну не скажу что утверждение неожиданное.
_________________ Научить нельзя, можно научиться. Пифагор. Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения