|
|
  |
Cortex-M4(F) порт под GCC залит в репозиторий. |
|
|
|
Aug 12 2013, 10:54
|

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

|
Увеличивать стек конкретно этой задачи нет смысла, 300 байт ей за глаза (200 байт на контекст, плюс сама задача кладёт максимум 4 регистра на стек). На всякий случай задавайте размер стека кратно 4, а лучше - кратно 8. Посмотрите на общее потребление памяти, попробуйте на время сократить какой-нибудь большой массив. Возможно, на стек этой задачи наползает куча. Поэкспериментировать сам смогу нескоро, я сейчас в отпуске, не до этого совсем
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 12 2013, 11:41
|
Частый гость
 
Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463

|
Цитата(AHTOXA @ Aug 12 2013, 13:54)  Увеличивать стек конкретно этой задачи нет смысла, 300 байт ей за глаза (200 байт на контекст, плюс сама задача кладёт максимум 4 регистра на стек). На всякий случай задавайте размер стека кратно 4, а лучше - кратно 8. Посмотрите на общее потребление памяти, попробуйте на время сократить какой-нибудь большой массив. Возможно, на стек этой задачи наползает куча. Поэкспериментировать сам смогу нескоро, я сейчас в отпуске, не до этого совсем  это понятно что ей 300 байт хватает, как раз не понятно отчего при увеличении стека она заваливается, стек делал разным с шагом единица в пределах 300-310, ни 304, ни 306 ни 308 ни 310 не улучшают ситуацию по памяти: --- building 5-FPU. defines: -DSTM32F4XX -DVER_MAJOR=0 -DVER_MINOR=1 -DHSE_VALUE=8000000 text data bss dec hex filename 38408 2164 51304 91876 166e4 ./exe/5-FPU.elf Errors: none видно что потребление гораздо меньше 112к но попробую поменять задачки местами, возможно что то изменится и куча не будет мешать локальным стекам задач (если дело в этом) жаль что не сможете попробовать повторить в ближайшее время - очень сильно на это надеялся хорошего отдыха зы проверил про кучу дело явно не в ней - изменил одну задачку на template <> OS_PROCESS void TProc1::exec() { test_context(0x87654312); } поведение в двух этих задачах совершенно одинаковое ломаются контексты при увеличении стека свыше 303 байт
Сообщение отредактировал сарматъ - Aug 12 2013, 11:42
|
|
|
|
|
Aug 12 2013, 14:54
|

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

|
Я имел в виду, что не смогу добраться до своих серъёзных рабочих проектов, чтоб посмотреть там. (Хотя думаю, что я бы заметил порчу контекста  ) А тестовый пример на F4discovery - я прогнал, с разными стеками, всё работает нормально, контекст не портится. Вы как-то проигнорировали мою реплику про самую свежую версию оси. У вас точно она? Потому что в каком-то (пред-)предпоследнем варианте было такое, там было неверно сделано выравнивание стека. Вроде бы я это исправил до создания этого топика, но всё же проверьте на всякий случай. Ну и с кучей - попробуйте временно отключить динамическое распределение памяти, чтоб уж точно знать, что это не она. То есть, попробуйте постепенно возвращаться к примеру 5-FPU, пока всё снова не заработает. Или наоборот, потихоньку добавляйте к примеру свой функционал, пока не сломается.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 12 2013, 17:58
|

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

|
Что с осью, у вас была свежая версия? У меня с такими размерами стека мигает зелёный! Распределение памяти чуть другое (я компилировал сборкой от klen-а): Код text data bss dec hex filename 2592 0 2644 5236 1474 ./exe/5-FPU.elf Что у вас за компилятор?
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 13 2013, 15:02
|

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

|
Творится что-то невероятное  Давайте сделаем чистый эксперимент, по шагам. Я проделаю, опишу шаги, а вы повторите. Итак... - Идём на https://launchpad.net/gcc-arm-embedded, качаем компилятор. Я скачал gcc-arm-none-eabi-4_7-2013q2-20130614-linux.tar.bz2.
- Устанавливаем его, убеждаемся, что он доступен:
Код $ arm-none-eabi-gcc --version arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.7.4 20130613 (release) [ARM/embedded-4_7-branch revision 200083] Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE - Создаём папку test, заходим в неё.
- Качаем примеры:
Код svn checkout http://svn.code.sf.net/p/scmrtos/code/trunk/Samples/CortexM4F/GCC/STM32F4XX STM32F4XX - заходим в папку STM32F4XX;
- запускаем switch.bat (под линуксом - switch.sh)
Всё, теперь у нас есть самые свежие примеры с самой свежей осью. - Теперь компилируем пример №5. Заходим в папку 5-FPU и командуем make.
- И наконец, заливаем пример в плату. Я для этого набираю make program, но это не суть.
Моргает зелёный светодиод. - Меняем стек процесса TProc3 на 1000, компилируем, заливаем. Моргает зелёный светодиод! Красный не подаёт признаков жизни.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 14 2013, 05:14
|

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

|
Уф-ф  Я думаю, что причина всё-таки в том, что в заглавном посте топика ссылка устарела. Она указывает на старый репозиторий, который перестал обновляться уже давно. Поэтому просьба к модераторам: исправьте пожалуйста в заглавном посте топика строчку "svn co https://scmrtos.svn.sourceforge.net/svnroot...F/GCC/STM32F4XX STM32F4XX" на Код svn co http://svn.code.sf.net/p/scmrtos/code/trunk/Samples/CortexM4F/GCC/STM32F4XX STM32F4XX (желательно в теге "code", чтобы движок форума не сделал ссылку).
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 15 2013, 08:16
|

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

|
Цитата(IgorKossak @ Aug 14 2013, 13:39)  А ещё, на мой взгляд, лучше - создать отдельную тему по репозиторию и закрепить её в заголовке подфорума. В каждой теме, где есть указание на репозиторий хорошо бы давать не конкретный адрес, а ссылку на тему о репозитории. Мне кажется, это лишнее. Репозиторий полностью переехал, все новые ссылки будут на новый репозитоорий, адрес которого, я надеюсь, больше меняться не будет. Исправить для полноты картины ссылку в начале этого топика, и будет практически полный порядок. Цитата(сарматъ @ Aug 14 2013, 14:02)  а как грамотно подключить в .ld использование 16к рам под езернет? Ну вот как пример (для батарейной памяти). Объявляем новую область памяти (BATTRAM): Код MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 112K /* Main RAM (can be accessed by DMA) */ FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K /* Flash */ BATTRAM (rw): ORIGIN = 0x40024000, LENGTH = 4K /* Battery backed RAM */ } , далее говорим, что все данные из секции .battram должны помещаться в эту область: Код /* battery backed RAM data (if applicable) */ .battram : { . = ALIGN(4); _start_of_batt_ram = .; *(.battram) *(.battram.*) _end_of_batt_ram = .; } > BATTRAM и затем в коде помещаем нужные переменные в секцию .battram: Код nvBuffer[128] __attribute__((__section__(".battram"))); Теперь буфер nvBuffer будет расположен в батареечной памяти. Цитата(сарматъ @ Aug 14 2013, 14:02)  и еще в порядке пожелания: в том старом примере файл определений регистров содержал меньшее количество перифирии чем есть у процессора (я про файлик stm32f4xx.h) подскажите что надо изменить в стандартном stm-овском файле чтобы можно было бы пользоваться им совместно с scmrtos? Во-первых, файл stm32f4xx.h не используется собственно осью, только примерами. А во-вторых, это и есть стандартный stm-овский файл  (он у меня был расположен в "Libraries/CMSIS/ST/STM32F4xx/Include"). В общем, если есть другой, более полный файл, просто используйте его, и всё.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|