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

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


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

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



Увеличивать стек конкретно этой задачи нет смысла, 300 байт ей за глаза (200 байт на контекст, плюс сама задача кладёт максимум 4 регистра на стек).
На всякий случай задавайте размер стека кратно 4, а лучше - кратно 8.
Посмотрите на общее потребление памяти, попробуйте на время сократить какой-нибудь большой массив.
Возможно, на стек этой задачи наползает куча.
Поэкспериментировать сам смогу нескоро, я сейчас в отпуске, не до этого совсемsm.gif


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


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

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



Цитата(AHTOXA @ Aug 12 2013, 13:54) *
Увеличивать стек конкретно этой задачи нет смысла, 300 байт ей за глаза (200 байт на контекст, плюс сама задача кладёт максимум 4 регистра на стек).
На всякий случай задавайте размер стека кратно 4, а лучше - кратно 8.
Посмотрите на общее потребление памяти, попробуйте на время сократить какой-нибудь большой массив.
Возможно, на стек этой задачи наползает куча.
Поэкспериментировать сам смогу нескоро, я сейчас в отпуске, не до этого совсемsm.gif


это понятно что ей 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к но попробую поменять задачки местами, возможно что то изменится и куча не будет мешать локальным стекам задач (если дело в этом)

жаль что не сможете попробовать повторить в ближайшее время - очень сильно на это надеялся wink.gif

хорошего отдыха

зы проверил про кучу дело явно не в ней - изменил одну задачку на

template <>
OS_PROCESS void TProc1::exec()
{
test_context(0x87654312);
}

поведение в двух этих задачах совершенно одинаковое ломаются контексты при увеличении стека свыше 303 байтsad.gif

Сообщение отредактировал сарматъ - Aug 12 2013, 11:42
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 12 2013, 14:54
Сообщение #18


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

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



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


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


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

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



версия os 4.0

динамически память вообще не выделяется

сейчас попробую на чистом вашем примере сделать то же самое увеличение стека

сделал: вырезал весь свой функционал все равно светодиодик моргает... а где можно скачать самую последнюю вашу версию порта и ос?

Сообщение отредактировал сарматъ - Aug 12 2013, 15:39
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 12 2013, 15:54
Сообщение #20


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

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



Вот тут: ссылка. Там можно нажать на "Download Snapshot".


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


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

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



вот распределение памяти в чистой вашей задаче

text data bss dec hex filename
2576 0 2644 5220 1464 ./exe/5-FPU.elf


размер стека

//
typedef OS::process<OS::pr0, 300> TProc1;
typedef OS::process<OS::pr1, 300> TProc2;
typedef OS::process<OS::pr2, 1000> TProc3;
typedef OS::process<OS::pr3, 300> TProc4;

моргает оранжевый светодиод
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 12 2013, 17:58
Сообщение #22


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

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



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

Что у вас за компилятор?


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


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

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



копмилятор gcc-arm-none-eabi-4_6-2012q2

*************************************************
GNU Tools for ARM Embedded Processors
- June 2012
*************************************************

This release includes the following items:
* Bare metal EABI pre-built binaries for running on a Windows host
* Bare metal EABI pre-built binaries for running on a Linux host
* Source code package (together with build scripts and instructions to setup
build environment), composed of:
* gcc : ARM/embedded-4_6-branch revision 188521
http://gcc.gnu.org/svn/gcc/branches/ARM/embedded-4_6-branch/

* binutils : 2.21 with mainline backports
git://sourceware.org/git/binutils.git

* newlib : 1.19 with mainline backports
ftp://sources.redhat.com/pub/newlib/newlib-1.19.0.tar.gz

* gdb : 7.3.1 with mainline backports, without target sim support
git://sourceware.org/git/gdb.git

* cloog-ppl 0.15.11 :
ftp://gcc.gnu.org/pub/gcc/infrastructure/...-0.15.11.tar.gz

* expat 2.0.1 :
http://space.dl.sourceforge.net/project/ex...at-2.0.1.tar.gz

* gmp 4.3.2 : ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2

* libelf 0.8.13 : http://www.mr511.de/software/libelf-0.8.13.tar.gz

* libiconv 1.11.1 :
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.11.1.tar.gz

* mpc 0.8.1 : ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz

* mpfr 2.4.2 : ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2

* ppl 0.11 : ftp://gcc.gnu.org/pub/gcc/infrastructure/ppl-0.11.tar.gz

* zlib 1.2.5 with makefile patch :
http://sourceforge.net/projects/libpng/fil...ar.bz2/download

* ncurses 5.9 :
http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz

а что за сборка от klen-а?

относительно версии оси... она была 4.0 какой именно ее вариант сказать не могу - я просто на ее место переписал из новой ссылки..

может все дело в .ld файле? он из примера для евентфлаг

и да зеленый тоже моргает но с ним и моргает оранжевый... может в тестовой задаче test_context(0x87654321); у меня что то другое?

//
typedef OS::process<OS::pr0, 300> TProc1;
typedef OS::process<OS::pr1, 300> TProc2;
typedef OS::process<OS::pr2, 300> TProc3;
typedef OS::process<OS::pr3, 300> TProc4;

text data bss dec hex filename
2576 0 1944 4520 11a8 ./exe/5-FPU.elf
Errors: none

а при таком стеке что с памятью?

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

в общем с новым мейк файлом перестало собираться, буду разбираться что не так

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

# compile options
OPTIMIZE = -O1(s)

Сообщение отредактировал сарматъ - Aug 13 2013, 05:56
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 13 2013, 15:02
Сообщение #24


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

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



Творится что-то невероятноеsm.gif
Давайте сделаем чистый эксперимент, по шагам. Я проделаю, опишу шаги, а вы повторите. Итак...
  • Идём на 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, компилируем, заливаем. Моргает зелёный светодиод! Красный не подаёт признаков жизни.


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


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

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



сейчас установил как раз этот тулчейн, устанавливаю эклипс новый - старый с этим тулчейном не работает а без эклипса заливать в платку не умею
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Aug 13 2013, 19:22
Сообщение #26


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

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



результат сборки со стеком 300

text data bss dec hex filename
2616 0 1944 4560 11d0 ./exe/5-FPU.elf
Errors: none

стек 1000

text data bss dec hex filename
2616 0 2644 5260 148c ./exe/5-FPU.elf
Errors: none

скоро научусь заливать в платку посмотрю на результаты

интересно... тулчейн версии 4.6 оптимизировал по размеру сильнее чем 4.7...

залил на платку все заработало, спасибо за помощь, заодно спасибо и за драйвер в нокии дисплейчику - давно в инете находил по моему за вашим авторством для AVRок

Сообщение отредактировал сарматъ - Aug 13 2013, 20:58
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 14 2013, 05:14
Сообщение #27


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

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



Уф-фsm.gif
Я думаю, что причина всё-таки в том, что в заглавном посте топика ссылка устарела. Она указывает на старый репозиторий, который перестал обновляться уже давно.
Поэтому просьба к модераторам: исправьте пожалуйста в заглавном посте топика строчку
"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", чтобы движок форума не сделал ссылку).


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


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



А ещё, на мой взгляд, лучше - создать отдельную тему по репозиторию и закрепить её в заголовке подфорума.
В каждой теме, где есть указание на репозиторий хорошо бы давать не конкретный адрес, а ссылку на тему о репозитории.
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Aug 14 2013, 08:02
Сообщение #29


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

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



а как грамотно подключить в .ld использование 16к рам под езернет? и в примерах под chibi os есть вариант .ld файла для использования дополнительных 64к под стек ( вкачестве информации - вдруг кому пригодится)

и еще в порядке пожелания: в том старом примере файл определений регистров содержал меньшее количество перифирии чем есть у процессора (я про файлик stm32f4xx.h) подскажите что надо изменить в стандартном stm-овском файле чтобы можно было бы пользоваться им совместно с scmrtos? (в прошлый раз я просто добавил в ваш вариант несколько определений регистров для usart но хочется использовать родной stm-овский файл)

ну и малоли кому пригодится тоже: связка
gcc-arm-none-eabi-4_7-2013q2
eclipse 4.3 kepler
openocd 0.6.1
вместе чудно уживаются и приемлемо работают

Сообщение отредактировал сарматъ - Aug 14 2013, 08:14
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 15 2013, 08:16
Сообщение #30


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

Группа: Свой
Сообщений: 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-овский файлsm.gif (он у меня был расположен в "Libraries/CMSIS/ST/STM32F4xx/Include").
В общем, если есть другой, более полный файл, просто используйте его, и всё.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

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

 


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


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