bzx 0 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 25 минут назад, haker_fox сказал: Жуть) У нас так в конторе тоже раньше писали) Лапша из разного кода Значит, не умеете писать автоматы. Код, в котором есть goto и, тем более, while - это г-код в стилистике ардуинщиков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 29 minutes ago, bzx said: Значит, не умеете писать автоматы. Значит, не умеете применять ОСРВ, если пишете автоматы. 29 minutes ago, bzx said: Код, в котором есть goto и, тем более, while - это г-код в стилистике ардуинщиков. Вы ничего не перепутали? Без goto иногда трудно обойтись, например в обработчике прерывания или просто в коде, который должен выполниться быстро. Вы мир ПК и встраиваемых систем не мешайте. А вы как без while пишете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lelikk 0 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 40 minutes ago, haker_fox said: Значит, не умеете применять ОСРВ, если пишете автоматы. Вы ничего не перепутали? Без goto иногда трудно обойтись, например в обработчике прерывания или просто в коде, который должен выполниться быстро. Вы мир ПК и встраиваемых систем не мешайте. А вы как без while пишете? while без дополнительных конструкций, обеспечивающих таймаут подзволяет зависнуть на неопределенное время в цикле, если в условии стоит ожидание чего-то внешнего. Конечно конструкции типа while(--i) вряд ли могут быть опасными, но я и их обычно пишу как for(;i;--i) goto годится как выход их вложенного for, все равно в ассемблере он таким и будет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 3 minutes ago, Lelikk said: while без дополнительных конструкций, обеспечивающих таймаут подзволяет зависнуть на неопределенное время Воот! И зачем все эти трудности, искуственно привносимые КА, если можно взять вытесняющую ОС (пусть даже и не РВ, хотя это относительно)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 2 часа назад, smart_pic сказал: Не мой целевой проц, поэтому не берусь. А так в ТЗ не вижу ничего не выполнимого. Если не Ваш, то откуда у Вас исходники? Скрытый текст Цитата //********************************************************************************* while (1) { WDTCONSET = _WDTCON_WDTCLR_MASK; // Service the WDT Relay_Control(); Test_Power(); Test_Temperatura(); Scenariy(); Prioritet_Logic(); PowerSceneAlgoritm(); // мигание СД при выполнении сценария if ((is_scene ==1)||(PS_State!=PS_wait) && (ROM_ledset4=='1')) WR_ShiftReg(Panel_LEDS,'1'); else WR_ShiftReg(Panel_LEDS,'0'); // выполняем программы ТСР стека ScanKeyboard(); StackTask(); HTTPServer(); //программы стека FTPServer(); // FTP сервер UDPPerformanceTask(); // UDP передача пакетов UDPRecvTask(); // UDP прием пакетов TCP_Control_Task(); // ТСР соединение для управления TCP_Cloud_Task(); // ТСР соединение с облаком UART3B_Conyrol(); PingProc(); // Два раза в секунду обновляем индикатор if(TickGet() - t > TICK_SECOND/2 ) { t = TickGet(); if (ROM_ledset1=='1' ){LED_WORK^=1; LED_POWER=1;} else {LED_WORK=1; LED_POWER=0;} } // Один раз в секунду читаем часики if(TickGet() - Trtc > TICK_SECOND ) { SystemReset(); Trtc = TickGet(); i2cReadTime(); Raspisanie(); Kalibrator(); EnergyMeter(); } } return 0; } // END MAIN **************************************** Внимание вопрос: Если в таком суперлупе например HTTP-серверу (или FTP или ещё кому) пришёл большой объект данных, который нужно обработать как единый объект (например: выполнить текстовый парсинг с разбором типа JSON-сообщения или выполнить его декодирование (AES, аппаратной криптографии в МК нет) или посчитать хеш или сделать упаковку/распаковку если сжато). А если и то и другое и третье подряд? И при этом необходима быстрая реакция на какие-то короткие простые команды по другим интерфейсам: UART, UDP, да хотя-бы даже - клавиатура (например там у вас энкодер опрашивается), или скажем - необходимо быстро отреагировать на превышение какого-то порога по токовому датчику. Как будете выкручиваться из такой ситуации? А если ещё нужно на LCD-индикаторе большие картинки рисовать в это же время. Другой вопрос: Вот нужно например какому-то из этих процессов (HTTP, FTP и т.п.) выплюнуть в лог приличный объём данных, скажем - пришёл некий бинарный объект, размером с пару КБ, нужно его содержимое распечатать в текст (получится уже например около 10-20КБ) и выплюнуть в канал лога (UART). И опять-же - при этом не положить остальные процессы и не сожрать для одной этой элементарной операции >10КБ ОЗУ. Сам процесс при этом не очень интерактивный, юзеру не нужно получить результат за миллисекунды - может подождать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 10 августа, 2020 Опубликовано 10 августа, 2020 (изменено) · Жалоба 49 minutes ago, haker_fox said: ...если можно взять вытесняющую ОС... Использование ОС - каждый решает сам. Если для задачи не требуется развитие, кол-во конкурирующих событий не так велико - то и ось может оказаться не к месту. Помимо вытесняющих ос, в историю человечества были и не вытесняющие ос. А это собственно бесконечный полинг. Если есть опыт работы в таких средах - то создать свой супер лууп - не так уж и сложно... Другое дело - существование всевозможных объектов синхронизации и приоритетов выполнения задач. Если они потребуются - то надо решать вопрос = самому огород городить или взять, что то готовое. (круглый) ЗЫ И гототу в сях - это нонсенс :) (имхо конечно же) Изменено 10 августа, 2020 пользователем kolobok0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smart_pic 7 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 8 minutes ago, jcxz said: Если не Ваш, то откуда у Вас исходники? Reveal hidden contents Как будете выкручиваться из такой ситуации? А если ещё нужно на LCD-индикаторе большие картинки рисовать в это же время. А мозги на что? Не мой целевой проц, поэтому не берусь. А так в ТЗ не вижу ничего не выполнимого. === В смысле я пишу под PIC32, а ТС нужен другой проц. Эта линейка http://cvg.ru/tovar_list/diga/ на PIC32 реализована. Поэтому знаю все вдоль и поперек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 1 час назад, haker_fox сказал: Вы ничего не перепутали? Без goto иногда трудно обойтись, например в обработчике прерывания или просто в коде, который должен выполниться быстро. Вы мир ПК и встраиваемых систем не мешайте. А вы как без while пишете? За ~20 лет профессионального писания на си как для embedded, так и для ПК, я не написал ни одного(!) goto. 6 минут назад, smart_pic сказал: А мозги на что? Ну так примените. Коли есть. И объясните. 6 минут назад, smart_pic сказал: на PIC32 реализована. Поэтому знаю все вдоль и поперек. Так расскажите нам - КАК? Раз "реализована". И какая разница - какое ядро? Или PIC умеет на аппаратном уровне организовывать несколько вычислительных потоков? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 1 minute ago, jcxz said: я не написал ни одного(!) goto Сомнительное достижение. И как рекомендуете действовать в ситуации (C): int func() { int err = 0; <нагребли ресурсов> <100500 строк> if(обосрались) { err = <код ашипки>; goto exit_err; } <тут еще 100500 строк> exit_err: <освободили ресурсы> return err; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 8 минут назад, aaarrr сказал: Сомнительное достижение. И как рекомендуете действовать в ситуации (C): int err; while (1) { занятие_ресурсов err = код_ошибки1; break; ... err = код_ошибки2; break; ... } обработка_ошибки: освобождение_ресурсов PS: Я никого не призываю так делать и не агитирую. Просто отметил, что так тоже бывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 56 minutes ago, kolobok0 said: Если для задачи не требуется развитие, кол-во конкурирующих событий не так велико Читайте внимательно, что я писал) Именно это! Но я также не понимаю этих пустых заявлений от некоторых некомпетентных "ось жрёт время", "ось тормозит процессы", "ось не учит использовать железо на 100%". По мне так хоть линейно одной функцией пишут. Но это всё-таки форум, и здесь происходит обмен знаниями. Считаю, что вправе высказать свою точку зрения. А я начинал в далёком 2003 году на pic16f84 думаете с оси?)))) 58 minutes ago, kolobok0 said: И гототу в сях - это нонсенс :) (имхо конечно же) goto есть в языке? Есть! Использовать можно? Можно! С умом (как и любые другие операторы)? Да. С умом и используем) 57 minutes ago, smart_pic said: А мозги на что? На то, чтобы отказаться от извращений (если не мазохист), и взять нормальный инструмент, который сделает вам то, что нужно. 59 minutes ago, smart_pic said: Эта линейка http://cvg.ru/tovar_list/diga/ на PIC32 реализована. Поэтому знаю все вдоль и поперек. Теперь вы дали АНТИРЕКЛАМУ целому ряду продуктов) 57 minutes ago, jcxz said: За ~20 лет профессионального писания на си как для embedded, так и для ПК, я не написал ни одного(!) goto. Я написал, не более двух за всю свою деятельность) Конечно же давно ознакомлен с тем, что применять его, мягко говоря, следует редко. 47 minutes ago, aaarrr said: И как рекомендуете действовать в ситуации (C): Если можно использовать Си++, то можно применить класс, а в деструкторе освобождать все ресурсы. При этом выйти из функции можно в любом месте. Но иногда не очень удобно заводить класс для каждого чиха. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smart_pic 7 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба haker_fox Поздравляем с 5000 записью. Пусть их будет меньше , но лучше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 4 minutes ago, smart_pic said: Пусть их будет меньше , но лучше. Это вы себе желайте с вашим-то рейтингом и историей на форуме. А я о своём количестве позабочусь сам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 1 hour ago, jcxz said: PS: Я никого не призываю так делать и не агитирую Чудовищно. Ну хоть бы do {} while(0); 54 minutes ago, haker_fox said: Если можно использовать Си++, Вот нельзя. Специально написал из вредности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба Пять страниц бреда. Вот у людей времени свободного много. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться