IPB

Здравствуйте, гость ( Вход | Регистрация )

8 страниц V  « < 2 3 4 5 6 > »   
Ответить в данную темуНачать новую тему
> Споры о подходах к программированию МК, ASM vs C, и не только
_pasha
сообщение 11.3.2011, 12:46
Сообщение #61


тот самый
Иконка группы

Группа: Мод
Сообщений: 13647
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



Цитата(MrYuran @ 11.3.2011, 12:25) *
каруселько smile.gif
а что если while заменить на if()?
Проверили, пошли дальше.
Пошли-пошли...
Опять проверили...

Придется точку входа заводить переопределяемую, чего и не хочется совсем. Методы есть, конечно - отдельным процессом это все и очередь событий. Но тоже сложно.
Перейти в начало страницы
 
+Цитировать сообщение
Прохожий
сообщение 11.3.2011, 18:16
Сообщение #62


сундук
***

Группа: Пользователи
Сообщений: 4043
Регистрация: 21.11.2009
Из: Ростов-на Дону
Пользователь №: 15



Цитата(_pasha @ 11.3.2011, 13:46) *
Придется точку входа заводить переопределяемую, чего и не хочется совсем. Методы есть, конечно - отдельным процессом это все и очередь событий. Но тоже сложно.

Есть еще метод - через программное прерывание.
Перейти в начало страницы
 
+Цитировать сообщение
_pasha
сообщение 11.3.2011, 18:51
Сообщение #63


тот самый
Иконка группы

Группа: Мод
Сообщений: 13647
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



Цитата(Прохожий @ 11.3.2011, 18:16) *
Есть еще метод - через программное прерывание.

Последнее время начал так лихо бороться с сущностями, что тоже не хотел бы заводить. Потому что это - сформировать данные и послать запрос. А тут хоцца вроде как разлочить избирательно функции, которые уже используют ресурс, а затем - выйти их и все. dash1.gif
Перейти в начало страницы
 
+Цитировать сообщение
Прохожий
сообщение 11.3.2011, 19:02
Сообщение #64


сундук
***

Группа: Пользователи
Сообщений: 4043
Регистрация: 21.11.2009
Из: Ростов-на Дону
Пользователь №: 15



Цитата(_pasha @ 11.3.2011, 19:51) *
Последнее время начал так лихо бороться с сущностями, что тоже не хотел бы заводить. Потому что это - сформировать данные и послать запрос. А тут хоцца вроде как разлочить избирательно функции, которые уже используют ресурс, а затем - выйти их и все. dash1.gif

Это - старая сущность. С ней бороться не надо.
Аналог - обработка исключений.
Что Вы, собственно, и имеете на руках.
Т. е. Вы хотите поступить нетрадиционно в традиционной среде.

А вообще, лично я противник всяких ОС, задач, шедулеров, очередей и прочей ерунды.
От лукавого это и ненужные сущности.
Все это делается на голом железе достаточно быстро без всего этого.
Перейти в начало страницы
 
+Цитировать сообщение
_pasha
сообщение 11.3.2011, 20:26
Сообщение #65


тот самый
Иконка группы

Группа: Мод
Сообщений: 13647
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



Цитата(Прохожий @ 11.3.2011, 19:02) *
Т. е. Вы хотите поступить нетрадиционно в традиционной среде.

Ага, вроде как стек наизнанку вывернутый - было бы самое оно smile.gif
А формирование запросов и простановка их в очередь жрет ОЗУ.
Перейти в начало страницы
 
+Цитировать сообщение
Гость_MrYuran_*
сообщение 12.3.2011, 19:49
Сообщение #66





Гости






Цитата(Прохожий @ 11.3.2011, 20:02) *
Все это делается на голом железе достаточно быстро без всего этого.

Это если один раз сделать и забыть навсегда.
А не получается так.
Приходят товарищи учёные и говорят, мол, замени-ка нам то на это, переделай вот тут и вот там, да побыстрее!
Если всё в железе, обычно очень негибко получается.
Да и пока вспомнишь, что к чему...
Перейти в начало страницы
 
+Цитировать сообщение
Прохожий
сообщение 12.3.2011, 21:04
Сообщение #67


сундук
***

Группа: Пользователи
Сообщений: 4043
Регистрация: 21.11.2009
Из: Ростов-на Дону
Пользователь №: 15



Цитата(MrYuran @ 12.3.2011, 20:49) *
Это если один раз сделать и забыть навсегда.
А не получается так.
Приходят товарищи учёные и говорят, мол, замени-ка нам то на это, переделай вот тут и вот там, да побыстрее!
Если всё в железе, обычно очень негибко получается.
Да и пока вспомнишь, что к чему...

Все зависит от склада ума.
Мне несложно и на голом железе.
И вообще какая разница, что вспоминать?
Как ты что-то делал несколько лет назад, то ли на железе, то ли на чужой РТОС, скажем?
А насчет негибко можно поспорить.
Абсолютно не факт.
Перейти в начало страницы
 
+Цитировать сообщение
Гость_MrYuran_*
сообщение 16.3.2011, 10:23
Сообщение #68





Гости






Вчера вечером забрела в голову мысль, внезапно.
Что, если при описании аппаратуры (в каком-нибудь отдельном модуле(лях)) вставить своеобразные статические "мутексы"
а-ля:
Код
#ifndef UART0_USED
#define UART0_USED
... юзаем UART0
#else
    #error "UART0 is already used"

То же самое с таймерами, пинами итд.
Перейти в начало страницы
 
+Цитировать сообщение
_pasha
сообщение 16.3.2011, 11:42
Сообщение #69


тот самый
Иконка группы

Группа: Мод
Сообщений: 13647
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



Цитата(MrYuran @ 16.3.2011, 10:23) *
Вчера вечером забрела в голову мысль, внезапно.
Что, если при описании аппаратуры (в каком-нибудь отдельном модуле(лях)) вставить своеобразные статические "мутексы"

Числовые значения типа #define UART_USED 1
в комбинации с инлайнами позволяют вообще живучий алгоритм создавать, он и матюкаться не будет, и лишнего кода не вставится.
Перейти в начало страницы
 
+Цитировать сообщение
Гость_MrYuran_*
сообщение 16.3.2011, 11:54
Сообщение #70





Гости






Цитата(_pasha @ 16.3.2011, 12:42) *
он и матюкаться не будет, и лишнего кода не вставится.

Лишнего кода полюбому не вставится.
А вот матюкаться будет, если прицепленный второпях кусок другого проекта позарится вдруг на занятую уже периферию.
В таком случае можно активнее железо нагружать, не боясь лапши навешать.
Перейти в начало страницы
 
+Цитировать сообщение
Прохожий
сообщение 16.3.2011, 17:45
Сообщение #71


сундук
***

Группа: Пользователи
Сообщений: 4043
Регистрация: 21.11.2009
Из: Ростов-на Дону
Пользователь №: 15



Цитата(MrYuran @ 16.3.2011, 11:23) *
Вчера вечером забрела в голову мысль, внезапно.
Что, если при описании аппаратуры (в каком-нибудь отдельном модуле(лях)) вставить своеобразные статические "мутексы"
а-ля:
Код
#ifndef UART0_USED
#define UART0_USED
... юзаем UART0
#else
    #error "UART0 is already used"

То же самое с таймерами, пинами итд.

А мне вообще условная трансляция никогда не нравилась.
Лучше уж копипастить...
Условную трансляцию применяю только для отладки.
Перейти в начало страницы
 
+Цитировать сообщение
_pasha
сообщение 16.3.2011, 20:25
Сообщение #72


тот самый
Иконка группы

Группа: Мод
Сообщений: 13647
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



Цитата(Прохожий @ 16.3.2011, 17:45) *
А мне вообще условная трансляция никогда не нравилась.

Если ее скрыть уровнем выше, пользуясь каким-нибудь нехитрым скриптом, то без разницы. Беда только в том, что все скрипты какие-то хитрые получаются
Перейти в начало страницы
 
+Цитировать сообщение
_pasha
сообщение 16.3.2011, 20:37
Сообщение #73


тот самый
Иконка группы

Группа: Мод
Сообщений: 13647
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



Цитата(GuruKiller @ 16.3.2011, 20:33) *
Мутексы вроде как работают в рилтайме

Ну, попытались аналогию провести. "Статический мутекс". А поговорить? smile.gif
Перейти в начало страницы
 
+Цитировать сообщение
_pasha
сообщение 17.3.2011, 7:13
Сообщение #74


тот самый
Иконка группы

Группа: Мод
Сообщений: 13647
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



Цитата(GuruKiller @ 16.3.2011, 20:50) *
Хоть один пример с этим чудом можно привести?

Дык пусть MrYuran и приводит smile.gif По-моему все очевидно - небольшая штучка для убиения корпоративного бардака.

Я вот тут другую штучку подметил.
Предположим, есть прерывание приемника уарта, и оно пишет тупо в очередь - для расширения времени реакции системы. Типо
Код
#define RX_QUEUE_SIZE 8
struct _rx_queue
{
char buffer[RX_QUEUE_SIZE];
char pos_rd;
char pos_wr;
} rx_queue;

*****
rx_queue.pos_wr = (rx_queue.pos_wr + 1) & (RX_QUEUE_SIZE - 1); //указатель поставщика данных
rx_queue.buffer[rx_queue.pos_wr] = RCREG;//прием байта


Так вот, через очередь можно сигналить указателем, избавляясь таким образом от сильной связи протокола с физическим уровнем. Тот же модбас - будет похухоль, ascii или rtu - основной процесс получит дополнительную инфу о том же тайм-ауте без расширения разрядности ячейки буфера. То есть
Код
#define QSIG_TIMEOUT15 (2* RX_QUEUE_SIZE)
#define QSIG_TIMEOUT35 (3 * RX_QUEUE_SIZE)
char pos = ++rx_queue.pos_wr  & (RX_QUEUE_SIZE - 1);
rx_queue.buffer[pos] = RCREG;//прием байта
if(timeout15()) rx_queue.pos_wr = QSIG_TIMEOUT15  + pos;
if(timeout35()) rx_queue.pos_wr = QSIG_TIMEOUT35  + pos;


Тогда на приемной стороне
Код
char pos = rx_queue.pos_rd  & (RX_QUEUE_SIZE - 1);// указателем чтения тоже мона сигналить поставщику данных
while(pos != rx_queue.pos_wr)
{
  if(rx_queue.pos_wr >= RX_QUEUE_SIZE)
  {
    обработка сигналов;
    rx_queue.pos_wr &= RX_QUEUE_SIZE -1; // отметка о том, что сигнал обработан
  }
// дальше чтение инфы из очереди
}


Кто-нить такое делает? А то ж хочеццо быть самым вумным smile.gif
Перейти в начало страницы
 
+Цитировать сообщение
Гость_MrYuran_*
сообщение 17.3.2011, 8:44
Сообщение #75





Гости






Цитата(Прохожий @ 16.3.2011, 18:45) *
Лучше уж копипастить...

Ну уж нет!
Сколько раз сам себе грабли подкидывал...
Скопипастишь, тут поменял, там забыл...
Потом в этой каше вообще все ноги переломаешь.

Цитата(GuruKiller @ 16.3.2011, 21:33) *
Я что-то вообще не понимаю задумку с условной компиляцией. Мутексы вроде как работают в рилтайме, причём кто и когда будет юзать тот же UART в модуле уарта просто не известно и на этапе компиляции это не определить.

УАРТ будет юзать драйвер уарта smile.gif
Речь идёт про вещи, определённые на этапе компиляции.
Если несколько потоков интересуются динамически одним и тем же железом, тут надо уже что-то хитрее, типа хэндлов со всем соответствующим оверхедом.
В платной версии FreeModbus'a очень интересно сделано.
Отдельно хендлы физических портов и отдельно хендлы протоколов.
Во время инициализации протокола они взаимно увязываются.
И туда же подмешиваются хендлы виртуальных таймеров.
Красиво, конечно, но на каждый пин такое городить - никакой памяти не хватит.
Перейти в начало страницы
 
+Цитировать сообщение
_pasha
сообщение 17.3.2011, 10:06
Сообщение #76


тот самый
Иконка группы

Группа: Мод
Сообщений: 13647
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



Цитата(MrYuran @ 17.3.2011, 8:44) *
В платной версии FreeModbus'a

Вот я его, подлюку, бесплатного только, и перепишу до неузаваемости. Чтоб никаких завязок на прерывания не было.
Перейти в начало страницы
 
+Цитировать сообщение
_pasha
сообщение 17.3.2011, 15:15
Сообщение #77


тот самый
Иконка группы

Группа: Мод
Сообщений: 13647
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



Попробовал - стало стремно, что не успеет, пришлось вернуться к эскейп-последовательностям.
Перейти в начало страницы
 
+Цитировать сообщение
Прохожий
сообщение 17.3.2011, 21:11
Сообщение #78


сундук
***

Группа: Пользователи
Сообщений: 4043
Регистрация: 21.11.2009
Из: Ростов-на Дону
Пользователь №: 15



Цитата(_pasha @ 17.3.2011, 11:06) *
Вот я его, подлюку, бесплатного только, и перепишу до неузаваемости. Чтоб никаких завязок на прерывания не было.

Делал Modbus во всех видах и RTU, и ASCII и вместе и отдельно и на скоростях разных, вплоть до 2,5 Мбод.
Сочленял это дело с PLC ОВЕН 154, панелью ОВЕН ИП320, с частотными инверторами от OMRON (там оно MemoBUS называется).
Там все предельно просто - в документации даже машины состояний приема и передачи разрисованы, алгоритмы расчета контрольных сумм.
Нижний уровень разжеван до соплей.
В течение 3-х дней это лепится самостоятельно на событийной программной модели.
Зачем нужен "дядин" софт?
Перейти в начало страницы
 
+Цитировать сообщение
_pasha
сообщение 17.3.2011, 21:15
Сообщение #79


тот самый
Иконка группы

Группа: Мод
Сообщений: 13647
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



Цитата(Прохожий @ 17.3.2011, 21:11) *
В течение 3-х дней это лепится самостоятельно на событийной программной модели.
Зачем нужен "дядин" софт?

А кто сказал, что там будет хотя бы половина дядиного? smile.gif
Перейти в начало страницы
 
+Цитировать сообщение
Прохожий
сообщение 17.3.2011, 22:55
Сообщение #80


сундук
***

Группа: Пользователи
Сообщений: 4043
Регистрация: 21.11.2009
Из: Ростов-на Дону
Пользователь №: 15



Цитата(_pasha @ 17.3.2011, 11:06) *
Чтоб никаких завязок на прерывания не было.

С чем связана такая лЫчная нЭпрЫязнь (с) к прерываниям?
Перейти в начало страницы
 
+Цитировать сообщение

8 страниц V  « < 2 3 4 5 6 > » 
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 21.3.2026, 5:32