Вопрос такой, краем уха слышал что у ядра есть возможность переключать контекст выполняемой программы (переключать задачи). Может ли кто-нибудь рассказать как это происходит.
Ядро Cortex-M3
Сообщений 1 страница 19 из 19
Поделиться22017-11-03 09:12:14
PendSV и гугль
Первая же ссылка https://electronix.ru/forum/index.php?showtopic=91262
Позже выложу одну книжицу...
Поделиться32017-11-03 09:32:56
dosikus Спасибо, а у меня в поиске выдавало статью на хабре и десятки клонов этой статьи. Нашел на мой взгляд интересную штуку http://forum.ixbt.com/topic.cgi?id=48:11735
Поделиться62017-11-12 12:05:16
Чем дальше в лес, тем больше ассемблера )
Поделиться72017-11-12 13:34:25
vt340 Да, но асм просто шикарный, после опыта с авр хватило пару дней для освоения. Теперь тянет переписывать свои скромные наработки (хоть я и понимаю что смысла большого в этом нет). Разобрался с переключением контекста, хоть и намучался.
Поделиться82017-11-12 14:25:38
Теперь тянет переписывать свои скромные наработки (хоть я и понимаю что смысла большого в этом нет)
Имхо, самое оптимальное - гибрид ассемблера и си - си ничего не знает про ядро и периферию, ассемблер ничего не знает про распределение памяти и структуры данных
Я тут уже как-то осторожно намекал про bios )
Поделиться92017-11-12 14:45:50
Товарищи кто что знает про кучу, как ее использует GCC, и вся ли свободная память после глобальных переменных не будет им спользоваться? Локальные переменные помещаються в стек.
Поделиться102017-11-14 09:52:08
Heap и malloc для cortex-m, когда нет ни MMU, ни OS, ни процессов - это грязный хак, суррогат, имитация
Если интересно что это такое на самом деле, почитай лучше где-нибудь подробности про malloc в unix
Поделиться112017-11-14 15:32:10
vt340 Если куча только для динамического размещения данных пользователем, т.е. если сама GCC ее нигде не использует, то я так понимаю что я все свободное место могу забирать под стек задач?
Поделиться122017-11-14 20:28:17
Можешь забирать и вообще делать всё что хочешь
Нет никакой кучи для мк, это фикция
Есть глобальный символ "end", который определяется в ld-скрипте (ему там тупо присваивается адрес, следующий за ram, использующейся в программе)
И есть библиотечные ф-ции (из newlib) malloc и т.п. которые этим символом "end" пользуются
Поделиться132017-11-14 21:15:29
vt340 Спасибо, понял.
Поделиться142017-11-14 22:13:38
На самом деле там немного сложнее устроено - malloc рулит памятью не напрямую, а через системную ф-цию sbrk
В нормальной ОС sbrk это обращение к ядру, а в МК - имитация с помощью "end"
GCC может только явно вызывать malloc и соотв. sbrk, а g++ может и сам неявно вызывать sbrk
Поделиться152017-11-15 10:31:28
vt340 Мне главное чтобы компилятор не самовольничал, память для задач выделяю сам. Пока еще не написал удаление и т.д. над этим еще думаю.
Поделиться162017-11-15 13:28:28
Люди есть ли у кого дефайны адресов периферии под асм?
Поделиться172017-11-15 20:31:51
Люди есть ли у кого дефайны адресов периферии под асм?
можно думаю из обычного сделать , как например тут писалось - https://habrahabr.ru/post/274579/
Поделиться182017-11-15 21:09:27
Люди есть ли у кого дефайны адресов периферии под асм?
Лови https://yadi.sk/d/naqKh4e03EDEJU/STM32-Assembler/ SFR.zip
Поделиться192017-11-15 23:33:24
vt340 Спасибо