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

 
 
6 страниц V  « < 3 4 5 6 >  
Reply to this topicStart new topic
> Cortex-M4(F) порт под GCC залит в репозиторий.
AHTOXA
сообщение Aug 28 2013, 16:30
Сообщение #61


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

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



Ссылки про ARM7TDMI, это не то. У Кортексов всё это сделано значительно прямее.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Aug 28 2013, 20:20
Сообщение #62


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



дааа.... пока все это далеко от моего понимания, потому нашел временную альтернативу запрету прерываний, может кому пригодится http://we.easyelectronics.ru/STM32/atomarn...-cortex-m3.html

и да вопрос: будет ли конструкция
uint32_t oldValue, newValue;
do
{
oldValue = __LDREXW(ptr);
newValue = oldValue + value;
}while(__STREXW(newValue, ptr));
корректно работать с ОС?

Сообщение отредактировал сарматъ - Aug 28 2013, 20:38
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 28 2013, 22:11
Сообщение #63


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

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



А чего там понимать? Вы читали не про тот контроллерsm.gif В Cortex-M4, если инструкция запрета прерываний прошла, то прерывание не возникнет.
Конструкция работать будет, без проблем.
Есть ещё GCC Atomic-Builtins, делают то же самое, но несколько более универсальны. Вроде бы (точно не помню) тоже используют LDREX/STREX.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Aug 29 2013, 06:12
Сообщение #64


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



а если подобные конструкции будут в паралельных задачах они друг друга путать не будут?


и все же полностью без запрета прерываний не получается,
Цитата(AHTOXA @ Aug 29 2013, 01:11) *
В Cortex-M4, если инструкция запрета прерываний прошла, то прерывание не возникнет.

где об этом можно прочитать? у меня макетка неделю работала потом повисла - ищу все потенциальные места где могло это произойти

Сообщение отредактировал сарматъ - Aug 29 2013, 06:36
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 29 2013, 11:21
Сообщение #65


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

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



Цитата(сарматъ @ Aug 29 2013, 12:12) *
а если подобные конструкции будут в паралельных задачах они друг друга путать не будут?

Параллельные задачи - это же просто метафора. Реально в каждый момент времени выполняется одна задача. Любая другая задача по отношению к данной - это как прерывание. Короче, всё будет работать как надоsm.gif
Цитата(сарматъ @ Aug 29 2013, 12:12) *
где об этом можно прочитать?

Вот тут. Более развёрнутое объяснение от Joseph Yiu (отсюда) :
Цитата
On some processors, the disable interrupt function might take sometime to take effect. This is because the masking is done via control register accesses through the bus. (there could be wait state on the bus and the write operation could be buffered, and the interrupt controller might need a cycle to update to the new setting).

On Cortex-M3, the interrupt mask registers are inside the processors (e.g. FAULTMASK, PRIMASK). As soon as PRIMASK/FAULTMASK/BASEPRI is set, the effect come immediately. So if you set the PRIMASK and the interrupt arrived at the same time, the interrupt will have to wait until the mask is cleared. To do this, the interrupt mask registers are accessible by CPS, MSR and MRS instructions only

Короче, виснет не из-за этого.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Aug 30 2013, 21:50
Сообщение #66


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



#define disable_interrupts() __asm__ __volatile__ ("cpsid i\n cpsid i")

если так сделать ось не сломается?

или так надо? #define disable_interrupts() __asm__ __volatile__ ("cpsid i\n"" cpsid i")

Сообщение отредактировал сарматъ - Aug 30 2013, 21:53
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 31 2013, 07:04
Сообщение #67


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

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



Варианты равнозначны. Ось не сломается.
Но два раза - маловато, лучше три, для верностиsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Aug 31 2013, 07:56
Сообщение #68


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



blush.gif
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Sep 1 2013, 17:45
Сообщение #69


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



антоха, я вот нашел что происходит когда во время обработки прерывания возникают более и менее приоритетные прерывания, а как поступает кортекс когда возникает прерывание одинакового приоритета? текущее прерывание обрабатывается до конца и только потом начинает обрабатываться новое или вначале обрабатывается новое а потом дообрабатывается текущее? (то есть вопрос можно сформулировать так: новое прерывание ведет себя как прерывание с более низким или более высоким приоритетом?)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 1 2013, 19:39
Сообщение #70


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

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



Прерывание с тем же приоритетом, что и текущее -- ждёт завершения текущего прерывания.
Советую почитать хорошую книжку про кортекс-м3.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Sep 1 2013, 20:31
Сообщение #71


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



спасибо
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Sep 2 2013, 14:14
Сообщение #72


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



а в порте для см4 обработка прерываний происходит как на рис 7.17 из этой книжки?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 2 2013, 17:13
Сообщение #73


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

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



Нет. У нас прерывание системного таймера имеет самый низкий приоритет в системе, и не может прервать никакое другое прерывание.
То же касается и прерывания PendSV.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Sep 3 2013, 09:46
Сообщение #74


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



а что более ресурсоемко TEventFlag.wait() или sleep()?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 3 2013, 11:09
Сообщение #75


Гуру
******

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



QUOTE (сарматъ @ Sep 3 2013, 11:46) *
а что более ресурсоемко TEventFlag.wait() или sleep()?
Вот интересно, а что мешает заглянуть в исходники ОСи?


--------------------
На любой вопрос даю любой ответ
"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

6 страниц V  « < 3 4 5 6 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 10th July 2025 - 16:51
Рейтинг@Mail.ru


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