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

 
 
> 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
Ответов (1 - 9)
IgorKossak
сообщение Sep 23 2011, 12:12
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Спасибо всем троим. Однако, возникают смутные сомнения насчёт актуальности этого бага в предыдущей версии ОС. Не следует ли исследовать детально этот вопрос? Ибо уже выпущено весьма немалое количество устройств и надеяться на простую удачу не хотелось бы.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 23 2011, 12:35
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Ну толи по bss-ности, толи по тому, что для целых конструктор по умолчанию занулять должен -- «должно бы» быть нулевым всегда.

Хотя, конечно, эх... Иногда такое находишь у себя...

p.s. О, я смотрю, там CM0-порт открылся. Будет что попробовать на честно выдуренной платке lpcxpresso :-)
Пора бы и мне «расчехлить каталоги».
Лето закончилось! (это такая команда)


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 23 2011, 12:41
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 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
AHTOXA
сообщение Sep 23 2011, 15:24
Сообщение #5


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

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



Цитата(IgorKossak @ Sep 23 2011, 18:12) *
Однако, возникают смутные сомнения насчёт актуальности этого бага в предыдущей версии ОС.

В третьей версии баг также присутствует. Думаю его исправить и там, не оставлять же теперь.
Что касается выпущенных устройств, то беспокоиться не о чем. TKernel - объект, объекты помещаются в bss, bss в стартапе обнуляется, так что всё будет работать. Не совсем изящно, но железобетонно.
Цитата(Сергей Борщ @ Sep 23 2011, 18:41) *
Осталось удалить оставшуюся "за бортом" конструкцию loop: b loop ( в обоих портах) и в gcc - порте объявление ".global ContextRestore". И будет совсем красиво.

Да, прозевал, спасибоsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 8 2011, 07:50
Сообщение #6


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

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



Исправил также в версии 3.10 (в настоящий момент это trunk) (для GCC).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 8 2011, 20:42
Сообщение #7


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



А кстати, когда мы уже 3.10 в tags отправим а 4.00 в trunk ?


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 8 2011, 21:19
Сообщение #8


Гуру
******

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



Вероятно, когда я добъю четвертый пример и доку по SAM7/GCC


--------------------
На любой вопрос даю любой ответ
"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
ReAl
сообщение Nov 9 2011, 20:12
Сообщение #9


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



На всякий случай «официально заявляю», что задерживать выход релиза ожиданием доки к вновь добавленному порту STM8 не стоит.

Я вообще не хотел вбрасывать этот порт в репозиторий до выхода релиза 4.00 — чтобы ни себя, ни релиз не связывать.
Но и отдельную ветку создавать не хотел.
Т.е. я-то потихоньку что-то делать буду, но кусок отпуска вот сегодня утром закончился.
Что успел, то за предыдущую неделю сделал. Теперь — капельный подзаряд.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
dxp
сообщение Nov 10 2011, 04:58
Сообщение #10


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Ждём портов ARM7 и выпускаем релиз. Остальное как созреет, так в последующие релизы попадёт.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st June 2025 - 14:09
Рейтинг@Mail.ru


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