Микроконтроллеры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Микроконтроллеры » STM32 » Ядро Cortex-M3


Ядро Cortex-M3

Сообщений 1 страница 19 из 19

1

Вопрос такой, краем уха слышал что у ядра есть возможность переключать контекст выполняемой программы (переключать задачи). Может ли кто-нибудь рассказать как это происходит.

2

PendSV  и гугль
Первая же ссылка https://electronix.ru/forum/index.php?showtopic=91262
Позже выложу одну книжицу...

3

dosikus Спасибо, а у меня в поиске выдавало статью на хабре и десятки клонов этой статьи. Нашел на мой взгляд интересную штуку http://forum.ixbt.com/topic.cgi?id=48:11735

4

5

Такая проблема компилятор GCC. При выходе из функции восстанавливает указатель на стек, а я его хочу изменить в этой функции как его настроить чтобы он так не компилировал?
http://s9.uploads.ru/t/f6t1L.jpg
Решил: поставил оптимизацию -Og, теперь все как надо.

Отредактировано MasterElectric (2017-11-10 10:47:48)

6

Чем дальше в лес, тем больше ассемблера )

7

vt340 Да, но асм просто шикарный, после опыта с авр хватило пару дней для освоения. Теперь тянет переписывать свои скромные наработки (хоть я и понимаю что смысла большого в этом нет). Разобрался с переключением контекста, хоть и намучался.

8

MasterElectric написал(а):

Теперь тянет переписывать свои скромные наработки (хоть я и понимаю что смысла большого в этом нет)

Имхо, самое оптимальное - гибрид ассемблера и си - си ничего не знает про ядро и периферию, ассемблер ничего не знает про распределение памяти и структуры данных
Я тут уже как-то осторожно намекал про bios )

9

Товарищи кто что знает про кучу, как ее использует GCC, и вся ли свободная память после глобальных переменных не будет им спользоваться? Локальные переменные помещаються в стек.

10

Heap и malloc для cortex-m, когда нет ни MMU, ни OS, ни процессов - это грязный хак, суррогат, имитация
Если интересно что это такое на самом деле, почитай лучше где-нибудь подробности про malloc в unix

11

vt340 Если куча только для динамического размещения данных пользователем, т.е. если сама GCC ее нигде не использует, то я так понимаю что я все свободное место могу забирать под стек задач?

12

Можешь забирать и вообще делать всё что хочешь
Нет никакой кучи для мк, это фикция
Есть глобальный символ "end", который определяется в ld-скрипте (ему там тупо присваивается адрес, следующий за ram, использующейся в программе)
И есть библиотечные ф-ции (из newlib) malloc и т.п. которые этим символом "end" пользуются

13

vt340 Спасибо, понял.

14

На самом деле там немного сложнее устроено - malloc рулит памятью не напрямую, а через системную ф-цию sbrk
В нормальной ОС sbrk это обращение к ядру, а в МК - имитация с помощью "end"
GCC может только явно вызывать malloc и соотв. sbrk, а g++ может и сам неявно вызывать sbrk

15

vt340 Мне главное чтобы компилятор не самовольничал, память для задач выделяю сам. Пока еще не написал удаление и т.д. над этим еще думаю.

16

Люди есть ли у кого дефайны адресов периферии под асм?

17

MasterElectric написал(а):

Люди есть ли у кого дефайны адресов периферии под асм?

можно думаю из обычного сделать , как например тут писалось - https://habrahabr.ru/post/274579/

18

MasterElectric написал(а):

Люди есть ли у кого дефайны адресов периферии под асм?

Лови https://yadi.sk/d/naqKh4e03EDEJU/STM32-Assembler/ SFR.zip

19

vt340 Спасибо


Вы здесь » Микроконтроллеры » STM32 » Ядро Cortex-M3