|
|
  |
Cortex-M4(F) порт под GCC залит в репозиторий. |
|
|
|
Sep 3 2013, 14:10
|
Частый гость
 
Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463

|
во первых я не ставил целью кого то рассмешить
во вторых, как я понимаю вы являетесь одним из разработчиков системы?, в таком случае спешу вам сообщить, что ваше описание системы, вероятно, имеет смыл доработать, в частности самый конец пункта 3.2.7 "В связи с этим, в большинстве случаев не возникает необходимости размещать код обработки событий на уровне прерываний даже при наличии такого аппаратного контроллера, а использовать прерывания только как источники событий, поместив их обработку на уровень процессов. Это рекомендуемый стиль построения программы." по крайней мере нуждается в существенных оговорках, рекомендуемый вами стиль построения программы при частоте поступления прерываний 10кГц дает потерю обработки около 50% событий, при размещении же обработчика целиком в теле прерывания потери составляют около 10%
|
|
|
|
|
Sep 4 2013, 08:35
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(сарматъ @ Sep 3 2013, 20:10)  рекомендуемый вами стиль построения программы при частоте поступления прерываний 10кГц дает потерю обработки около 50% событий, при размещении же обработчика целиком в теле прерывания потери составляют около 10% Я думаю, что здесь проблема не в стиле, а в программе  Я на 72МГц STM32F103 спокойно декодирую 100КГц манчестер. С потерями 0% событий. А тут у вас 168МГц и 10КГц. Это совсем небольшая нагрузка. Цитата(сарматъ @ Sep 4 2013, 14:04)  измерил время выполнения sleep и wait таким образом Функция sleep() приостанавливает выполнение потока на заданное число тиков системного таймера. То есть, если таймер тикает раз в миллисекунду, то sleep(10) будет длиться от 9 до 10 мс. При частоте 168МГц это будет 168000*[9..10] тиков DWT. Ваши же числа совсем маленькие для 10 мс. С какой частотой у вас тикает системный таймер? С какой частотой взводится OneSecFlag?
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Sep 4 2013, 12:43
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(сарматъ @ Sep 4 2013, 16:02)  а приоритет этого процесса наивысший? и этот обработчик вызывается 100 раз за мс? Нет, приоритет средний. Были более приоритетные задачи. И вызываться(просыпаться) он мог реже, чем 100 раз за мс. События копятся в очереди, и обрабатываются асинхронно, когда есть для этого время. Цитата(сарматъ @ Sep 4 2013, 16:02)  extern "C" void ETH_IRQHandler(void) { ETH_DMAClearITPendingBit(ETH_DMA_IT_R | ETH_DMA_IT_T); RxFlag.signal_isr(); } У вас не хватает обязательной строчки в начале обработчика прерывания: Код OS::TISRW ISRW;
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|