Микроконтроллеры | Поясните по Си |
|
---|---|---|
В каком смысле "крутился на месте" ? В этих блоках циклы? Если без циклов, то там дальше должен код выполняться. |
|
|
Циклов нет - по условиям меняются значения переменный и ппосле выполнения указатель стова встает на первый IF ... |
|
|
Wladimir_TS: IF A=B { Там действительно так написано ? Как это удалось откомпилировать ? По правилам Си должно быть: IF (A==B) {.... |
|
|
Tadas: По правилам Си должно быть: IF (A==B) {.... Если уж вообще по правилам, то так: if (A==B) {.... } else {....} |
|
|
Кстати, да, я думал вы это образно написали A=B . Не может такое компилироваться( без макросов если). |
|
|
Tadas: IF A=B { if (A=B) Это законная операция, но не то что вы хотели. Компилятор понимяет это так: то что было в B присваивается в A. Если это не ноль, то результат проверки TRUE. int А; напечатает 4, потому как в А присвоится 4 и результат проверки будет положительный. Такой "С" загадочный зверек. Что касается размера кода, то конечно для 8 битного контроллера трудно соревноваться с машинным кодом. В России принято говорить а "ассемблером", но ассемблер это программа переводящая символическую запись типа Для AVR поучительно смотреть на сгенерированный код после компилятора. Никаких сюрпризов обычно нет, но сразу видно что не так. |
|
|
Tadas: Там действительно так написано ? На самом деле там логическая операция - я образно писал. Завтра с работы кусок выложу. Задача собственно - исправить программу на СИ |
|
|
alexf58: Это законная операция, но не то что вы хотели. Я, собственно, ничего не хотел, только обратил внимание, что выражение после if не заключено в скобки. |
|
|
Нельзя тут образно, ибо = и == разные вещи. |
|
|
Tadas: Я, собственно, ничего не хотел У меня "вы" с маленькой буквы, собирательное. Не конкретно Вы. Просто это наверное самая частая ошибка людей привыкших к другим языкам: Паскалю, Бейсику и т.д. Плохо что такая конструкция не иомечается как ошибка, но так уж устроен язык. И достаточно часто используют специально. Например if(flag = UART_STATUS) тут UART_STATUS читается в переменную flag, и если она отлична от нуля, то читаются данные из регистра. Более наглядно, но длиннее: flag = UART_STATUS; Я стараюсь избежать таких сокращений с потерей наглядности, т.к. легко пропустить опечатку. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |