реклама на сайте
подробности

 
 
> CortexM3 порты - пойман баг., И обезврежен :)
AHTOXA
сообщение Sep 23 2011, 04:28
Сообщение #1


фанат дивана
******

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



Собственно субж.
Описание бага:
В коде функции os_start() взводился флаг PendSV и разрешались прерывания. Тут же происходило прерывание PendSV, и из него вызывалась функция os_context_switch_hook(), в которой происходило обращение к ProcessTable[SchedProcPriority]. Однако этот момент переменная SchedProcPriority ещё не была проинициализирована. Она инициализируется только в TKernel::sched_isr().
Похоже, что нам везло просто, и SchedProcPriority был нулевым. (Таким образом первое переключение было на Idle-процесс).
Кроме того, поскольку первое прерывание происходило на Main Stack, то первое автоматическое сохранение контекста производилось на Main Stack, и от него бесполезно отъедалось 32 байта.

В настоящий момент всё исправлено (в репозитории, в ветке pre-v400). Бонусы - минус три команды из обработчика прерывания переключения контекста (~2.7мкс в 1-EventFlag), сэкономлено 32 байта стека.

Благодарности:
  • Сергею Борщу за то, что затеял оптимизацию, в процессе которой всё и обнаружилось, и за предложенный вариант исправления;
  • Андрею Чуйкину - за быстрое исправление порта для IAR;
  • Ну и мне немножкоsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Sep 23 2011, 12:41
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AHTOXA @ Sep 23 2011, 07:28) *
В настоящий момент всё исправлено (в репозитории, в ветке pre-v400).
Осталось удалить оставшуюся "за бортом" конструкцию loop: b loop ( в обоих портах) и в gcc - порте объявление ".global ContextRestore". И будет совсем красиво.

QUOTE (ReAl @ Sep 23 2011, 15:35) *
p.s. О, я смотрю, там CM0-порт открылся. Будет что попробовать на честно выдуренной платке lpcxpresso :-)
На такой и отлаживалось sm.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 03:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01876 секунд с 7
ELECTRONIX ©2004-2016