Продолжая взаимодействие с настоящим сайтом, вы выражаете свое согласие с тем, что ваши пользовательские данные (сведения о местоположении; тип и версия ОС; тип и версия Браузера; тип устройства и разрешение его экрана; источник откуда пришел на сайт пользователь; с какого сайта или по какой рекламе; язык ОС и Браузера; какие страницы открывает и на какие кнопки нажимает пользователь) будут обрабатываться ООО «АРС АДАКТ» в целях сбора статистических данных о посетителях сайта и функционировании сайта в течение 3 месяцев. В случае, если вы не хотите, чтобы ваши данные обрабатывались, покиньте сайт.

Перейти к публикации

Синтаксис СИ


Рекомендованные сообщения

Наверно не совсем в профильном форуме спрашиваю,но уверен что парни которые делают/мутят автоэлектронику/для автоэлектроники помогут.Надоела рутина ассемблера.Хочу СИ,но пока "спотыкаюсь".Подскажите,выражение ассемблера

 

BTFSC PORTB,0

GOTO $-1

 

прокатит на СИ как

 

while(!input(RB0));{}

 

 

 

 

Ссылка на сообщение

Привет.Да,наверное.Но просто while(PORTB0)  требует продолжения,указаного в фигурных скобках { "сделать чтото"}.Тоесть если условие (PORTB0) соответствует,то выполняется то что в скобках,и опять проверяется условие (PORTB0).и так пока оно соответствует цикл крутится.Тоесть while(пока)(PORTB0) cделать {чтото},опять проверить (PORTB0) и если истина делать {чтото}.А если условие ложь то пропустить {чтото},выйдя из этого цикла на команду после {чтото}.Но на самом деле не BTFSC а BTFSS,ведь TRISB1 (вход) (малёха я упустил не задумавшись).Но именно эта рутина мозгоштурма и надоедает в асме.Потому и хочется СИ.И чтоб не думать каким образом обрабатывается "вход" и есть (!input) I (!=input).Но это всё условия выполнения цикла.Тоесть условия при которых будут выполнятся скобки,опять проверятся ,и опять выполнятся скобки,пока условие соответствует.Тоесть как в асме

 

metka    BTFSS  PORTB,0

              GOTO   metka

 

              или

 

              BTFSS  PORTB,0

              GOTO   $-1    (на одну команду назад)

Но я не знаю/сомневаюсь правильно ли "расставил" точкозапятые,скобки.Прерывания не хочу,не риалтайм,жрут такты.И компилировать ненаписаный проект на наличие ошибок нет смысла,потому и вопрошаю.Асм вставки/макросы тоже нехочу (зачем тогда стремится к СИ).

Ссылка на сообщение

Нужно ловить импульс/сигнал.Как это делать на ассемблере я знаю.Пробую на СИ.Правильно ли понимаю : while(!input(PORTB0)):{}   ....... тоесть 

 

while - пока

 

!input - нет сигнала

 

PORTB0 - на ноге 0 порта Б

 

{} - ыполнить тело цикла

 

и всё это до тех пор пока !input = истина

 

??????????????????????????????????

?????????????????????????????????7

Ссылка на сообщение

Как я понял, кодим на Pic проце?

Не проще ли взять "тактовый" вход, настроить его на фронт, спад или изменение состояния и в обработчике его прерывания считать время изменения посредством любого таймера? Плюсы сего решения в том, что не нужно никого "ждать" и есть возможность математикой посчитать длительность, частоту, скважность и прочее для переменных сигналов?

Минус вашего решения в том, что если условие совпадает, то код просто "зависнет" в цикле. Так не делают нормальные программисты, ИЛИ в тело ожидания встраивают счётчик по переполнению которого будет таймаут?

Вообще в С не принято пользоваться командой GoTo, это признак дурного тона.

В нете полно книжек по С от "чайников" до высшего пилотажУ, не плохо бы сначала прочитать парочку книжек а уж потом "кодить", иначе могут возникнуть "нусафсемнипанимаю" вопросы )))

Ссылка на сообщение

Нужно ловить импульс/сигнал

 

Что за сигнал?

Дребезг имеется?

 

Не проще ли взять "тактовый" вход, настроить его на фронт, спад или изменение состояния и в обработчике его прерывания считать время изменения посредством любого таймера?

 

Во первых, далеко не всегда есть возможность использовать аппаратные возможности микроконтроллера, т.к. для этого нужна определенная разводка платы, что зачастую невозможно реализовать. Программно намного проще это реализовать.

 

 

Минус вашего решения в том, что если условие совпадает, то код просто "зависнет" в цикле. Так не делают нормальные программисты, ИЛИ в тело ожидания встраивают счётчик по переполнению которого будет таймаут?

 

Тоже изначально хотел про это написать, но непонятно что это за сигнал - может остальная часть программы и не должна работать при отсутствии сигнала.

Возможно и можно таким образом реализовать в отдельно взятом случае.

 

Вообще в С не принято пользоваться командой GoTo, это признак дурного тона.

Люто плюсую!!!

 

Лишь один раз воспользовался за свою жизнь goto - дизассемблировал программу на Z80 и восстанавливал алгоритм работы и не придумал как убрать goto, да и не нужно было это сильно, чтобы извращаться

Ссылка на сообщение

по фронту,по изменению - это прерывания,их обработка, и сохранение контекста,тоесть жор времени и ячеек.не хочу,зачем?Начало работы/обработки по сигналу/импульсу,и пусть себе крутится на отлове сигнала.зависнуть не зависнет,потому как или сигнал будет,и тогда будет обработка,или не будет,тогда и обработка не нужна,пусть себе "ждёт" сигнала.И этта,BTFSS и GOTO было примером ассемблера.Есть ли смысл говорить про плохой тон не поняв о чём я?Ребята,я просто в афиге от вами написаного.Много лет назад,когда я сидел здесь плотно,такие ответы про "покури" сеть сыпались на головы "а как чиповатьщиков".Ребят,ну ей богу не в детском саду.Я не спрашиваю "как кодить" или "сделайте всё за меня".И вопрос этот курю там куда вы послали по полной.Вот только в сети в основном о стандартной линейной работе.Я просил помощи в осознании правильности/неправильности моего понимания конкретного частного случая.Всё что я хотел бы услышать от понимающих это "да это аналогично",или "не,не то,потому что тото и сёто".Думаю надо прикрыть тему.

 

 

 

 

Ссылка на сообщение

 

 


сохранение контекста,тоесть жор времени и ячеек.не хочу,зачем?

С языков высокого уровня всегда будет компилироваться код, больший по размеру и, естественно, более медленно работающий, плюс расходующий больше оперативной памяти.

Только какой смысл в жертвовании несколькими сот байтами ROM и несколькими десятками байт RAM, если микроконтроллер будет справляться с задачей и вся программа все-равно поместится в существующую память?

Я не имею ввиду быдло-кодинг.

Я занимался программированием PIC контроллеров с 1999 г. (сейчас практически не занимаюсь) на языке C и у меня ни разу не было проблем с нехваткой памяти.

 

 

 


Я просил помощи в осознании правильности/неправильности моего понимания конкретного частного случая.

Ваш частный случай легко анализируется после компиляции с языка высокого уровня в окне ассемблера.

Ссылка на сообщение

по фронту,по изменению - это прерывания,их обработка, и сохранение контекста,тоесть жор времени и ячеек.не хочу,зачем?

Да, совершенно верно, зачем всё это? Архитекторы процессоров совсем "дауны" и архитектуру они "прокурили" в университете в туалете ))

За сим не буду более "засорять" тему высоООокоЭнтеллектуальными темами про asm and native C++ and later.. or etc...

Ссылка на сообщение

Прикольно читать- ощущаю себя пятиклассником, попавшим в один туалет с десятиклассниками- интересно базарят, но ничего малолетке не понятно. Без обид,  риспект обоим :=)

Изменено пользователем x1307
Ссылка на сообщение
  • 1 год спустя...
Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...