Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
Представте себе, что в каком-то процессоре глобального разрешения прерываний нет вообще. И кто-то к этому привык. А вы пытаетесь объяснить ему - насколько это удобно - одним битиком, одной командой cli поднять приоритет текущего выполняемого кода выше приоритетов всех прерываний, потом одной командой sei опустить ниже. А он говорит, что это фигня, читайте даташиты и запрещайте/разрешайте всех, кого хотите в любом порядке - это же гораздо гибче.
2) Доктор не читатель, доктор писатель.
Доктор) Опять бред...А про запрещение отдельных прерываний
Доктор) при глобальном разрешении Вы не в курсе?
перед этим я писал:
ReAl) Наэмулировать на регистрах устройств приоритетную систему, конечно,
ReAl) можно - сохраняя/сбрасывая/восстанавливая состояние разрешения для
ReAl) различных источников персонально, но это костыли.
Причём костыли в форме грабель. Ну сохранил я состояние двух "менее приоритетных" прерываний, запретил их и разрешил все. А потом окажется, что одно из "более приоритетных" по какому-то условию запрещает одно из тех "менее приоритетных", возвращает управление и тут я "восстанавливаю" в разрешение. И всё ломается. И исключить это никак нельзя - я ведь не на уровне всей низкоприоритетной "очереди" работаю, а на уровне отдельных "претендентов".
Чтобы такого не было - надо вводить дополнительные флаги и т.п., усложнять и удлиннять обработчики (все или многие) - в конце концов становится, что лучше ничего в нём не разрешать, а просто сделать своё дело и уйти - быстрее будет. Да и лишние связи между разными кусками программы ещё никого счастливее не делали и даже работу не облегчали - наоборот, затрудняется анализ (то, что предпочитаю я) или увеличивается число комбинаций, которое надо прогнать в симуляторе (что предпочитаете Вы).
Конечно, в определённых случаях можно таким образом немного улучшить ситуацию. Но когда самих прерываний мало, т.е. когда и так не так страшно.
3) да так, фигня, один UART на 2400 либо 9600 в зависимости от радиомодема - его пакеты лучше не терять, это "дорогое" удовольствие, но скорость низкая. А второй луше побыстрее, но потеря пакета не так страшна. У USART двойная буферизация, в обработчике я выбираю всё, что пришло. Там по ходу написания остальных обработчиков (и выяснения максимальной зажержки) посмотрю. Если решу, что на 115200 даже при наличии случайных потерь пакета скорость в, к примеру, 99% случаев всё равно выше, чем, допустим, при 38400 без потерь - поставлю на 115200. На этом канале я хозяин.
Каналов вообще без потерь не бывает. Ну, у простых людей типа меня. У спецов по супернадёжному - возмнжно. Когда-то и где-то.
Дело ведь не в отсутствии пропусков как таковых, если их частота достаточно низкая и на уровне протокола это прячется от более высоких уровней, то кому какое дело?