Перейти к публикации
View in the app

A better way to browse. Learn more.

Форум АДАКТ

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Магазин прошивок в телеграме

Синтаксис СИ

Featured Replies

Опубликовано:

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

 

BTFSC PORTB,0

GOTO $-1

 

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

 

while(!input(RB0));{}

 

 

 

 

Опубликовано:

BTFSC - пропуск следующей команды, если бит = 0, т.е. зацикливание при RB0=1

Поэтому по логике должно быть

while (PORTB0);

Опубликовано:
  • Автор

Привет.Да,наверное.Но просто 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 год спустя...
Опубликовано:

Кто-нибудь пробовал. Но, видимо, форумы ты перепутал :biggrin: Этот вопрос даже на местную курилку не тянет, уж очень "узко".

Создайте аккаунт или войдите в него для комментирования

АДАКТ разрабатывает прошивки для чип-тюнинга бензиновых и дизельных двигателей. Под прошивками понимаются авторские настройки в зоне калибровок. Термин «прошивки АДАКТ» используется для упрощения и имеет обобщающий характер.
Прошивки АДАКТ можно купить только в магазине на официальном сайте. Любые другие сайты выдают собственные работы за калибровки нашей компании.

Account

Navigation

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.