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

 
 
> Найден баг в порте под Cortex-M3.
AHTOXA
сообщение Nov 13 2012, 14:26
Сообщение #1


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

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



Собственно, сабж. Я в процессе оптимизаций PendSV_Handler() перестарался - соптимизировал доставание из стека регистра LR. А этого делать нельзя, ибо там хранится значение exc_return. И если вдруг os_context_switch_hook() попортит LR, то всё сразу накроется.
Баг нестрашный, в том смысле, что с ним прошивка либо работает нормально, либо совсем не работает. То есть, баг не плавающий. Но лучше исправить.
Для порта GCC я уже залил исправленный вариант в репозиторий.
В порте IAR баг тоже есть, надеюсь Андрей его скоро исправит.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
shreck
сообщение Nov 14 2012, 02:27
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Антон, не мог бы ты по подробнее объяснить суть внесенных изменений. Мое слабое знание ассемблера не позволяет понять в чем проблема в старом коде и как ее решает новый.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 14 2012, 03:58
Сообщение #3


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

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



Рассказываю.
Когда возникает исключение, часть регистров автоматически запихивается в стек. В том числе адрес следующей инструкции для выполнения после возврата (это к вопросу Сергея про "Как же он узнает, куда ему возвращаться"). Кроме того, в регистр LR заносится специальное значение exc_return, в котором сохраняются флажки, описывающие используемый стек и режим привилегий прерываемого процесса. (В M4F там ещё есть флажок активности FPU). При возврате из исключения из этого exc_return восстанавливается режим работы процессора. (Возврат из исключения происходит при записи в PC значения exc_return. У него все старшие биты единички, и по этой маске процессор определяет, что нужно возвращаться).
Конкретно надо поменять вот что:
1. Добавить строчку POP {LR} после строчки BL os_context_switch_hook
2. Заменить строчку POP {PC} на BX LR


Блин! cranky.gif Написал, и понял, что всё было правильно. Отбой воздушной тревогиsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
shreck
сообщение Nov 14 2012, 04:40
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(AHTOXA @ Nov 14 2012, 10:58) *
Рассказываю ...

Блин! cranky.gif Написал, и понял, что всё было правильно. Отбой воздушной тревогиsm.gif

"Не спеши выполнять. Отменят"

В догонку, но не в тему.
Был разговор, что надо бы пользователю дать возможность выбора системного таймера. И вроде бы ты такую возможность добавлял. А сейчас ее нету. Да и мелкая оптимизация с короткими/длинными вызовами куда-то делась.
Go to the top of the page
 
+Quote Post



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

 


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


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