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

 
 
> Освоение ARM контроллеров
maxntf
сообщение Mar 29 2016, 14:17
Сообщение #1


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

Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008



Появилась необходимость в освоении ARM контроллеров.
Есть проект реализованный на PIC контроллере, который необходимо портировать на ARM. Это связано с тем, что в него нужно доработать реализацию воспроизведения аудио файлов.
Просьба помочь в выборе контроллера и отладочных средств к нему для изучения ARM, с учетом моих задач. Просто не хочется брать первую попавшеюся отладочную плату с установленным в нее контроллером. А выбрать тот набор оборудования и ПО, который поможет мне в изучении ARM и параллельно реализовать все мои задачи.
Основные параметры основываясь на старый проект:
1) Объем памяти программ не меньше 128kB.
2) Объем памяти данных не меньше 4kB. Учитывая что в старом проекте используется внешняя EEPROM для хранения параметров на 64kB, а в новом проекте еще и нужно хранить аудио треки. И насколько я успел поверхностно ознакомится, в ARM можно использовать внешнюю flash память и для памяти данных контроллера и для хранения треков и параметров. Если я прав, то тогда ARM можно брать вообще без внутреннего ОЗУ.
3) Большое количество портов. В старом проекте был PIC на 80 ног.
4) Нужно 17 АЦП для измерения напряжения, остальные GPIO.
5) 2 порта UART.
6) Желательно USB.
7) И самое главное возможность проиграть аудио ролики (не важно в каком формате хоть в “amr”) в аудио тракт GSM модема. Эти ролики будут подготовлены на ПК и записываться в цифровом формате во внешнюю flash (то есть никаких кодеков для записи аудио не нужно).
Есть под ARM готовые библиотеки для воспроизведения аудио файлов?
В качестве среды разработки хочу взять CooCox CoIDE (GCC Compiler) в виду того что она бесплатная. Вроде неплохие отзывы о ней. Кстати кто знает, в ней есть ОС под ARM.
ARM контроллер и отладочный комплект ST или NuVotone. Лучше ST так как на мой взгляд они наиболее популярны, а по второму производителю маловато информации в сети.
Заранее благодарен за любую помощь.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
maxntf
сообщение Apr 12 2016, 15:09
Сообщение #2


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

Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008



Подключил FreeRTOS, пока практически пустой проект 3 задачи для теста - 1-я контроль кнопки, 2-я передача строки "Hello World" в UART и 3-я мигание индикаторами.
Хотя в FreeRTOSConfig.h и стоит #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 75 * 1024 ) ) , но в SRAM забрало очень много места, почти 60% всей ОЗУ.
Цитата
Program Size:
12440 28 79288 91756 1666c main.elf
text data bss dec hex filename

Подскажите почему так? Смотрел в map файле я так понимаю что все жрет heap_2.c
Цитата
*fill* 0x200001aa 0x6
.bss 0x200001b0 0x12c14 ..\obj\heap_2.o
*(COMMON)
COMMON 0x20012dc4 0xe ..\obj\main.o
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 12 2016, 16:13
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (maxntf @ Apr 12 2016, 18:09) *
Смотрел в map файле я так понимаю что все жрет heap_2.c

Вообще в идеале heap должен занимать ВООБЩЕ ВСЮ свободную память. Посему любые константные дефиниции его размера в корне порочны. Следует слегка постараться и отдавать хипу всю память от конца статически распределенной компилятором до конца памяти контроллера.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 13 2016, 06:10
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(zltigo @ Apr 12 2016, 22:13) *
Вообще в идеале heap должен занимать ВООБЩЕ ВСЮ свободную память. Посему любые константные дефиниции его размера в корне порочны. Следует слегка постараться и отдавать хипу всю память от конца статически распределенной компилятором до конца памяти контроллера.

ЗАЧЕМ??? ...если куча не нужна и не используется нигде в проекте.
Во всех моих проектах размер кучи задан ==0 в конфигурационном файле компоновщика.
У меня везде так (для IAR):
Код
define block CSTACK with alignment = 8, size = 0x000 {};
define block HEAP   with alignment = 8, size = 0x000 {};

А далее:
Код
do not initialize  {section .bssStk};
do not initialize  {section .bssStkMain};
...
place in RAM_regionA {section .BITBAND_RAM, section .dma, section .ethernet};
place in RAM_regionA {rw, first block CSTACK, section .bssMemNoFill, block HEAP};

Стеки задач, основной стек (который указан в reset-векторе) и стек исключений определены подобно:
Код
#pragma data_alignment = 8
__no_init static OS_STK taskADEStk[64 + STK_SIZE_ISR_NFP] @ ".bssStk";

Иногда я объединяю все стеки (задач, основной стек и стек исключений) в единый сплошной блок через define block.
Имхо: определять размеры стеков в си-шных файлах гораздо удобнее, чем в едином конфигурационном файле компоновщика.

PS: Контролировать размер стеков конечно нужно. И выделять под них память, а не надеяться что "что-то не налезет на что-то".
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 13 2016, 06:27
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (jcxz @ Apr 13 2016, 09:10) *
ЗАЧЕМ??? ...если куча не нужна и не используется нигде в проекте.

Ну вообще-то, совершенно очевидно, речь идет о случае, когда куча используется.




QUOTE (jcxz @ Apr 13 2016, 09:10) *
Имхо: определять размеры стеков в си-шных файлах гораздо удобнее, чем в едином конфигурационном файле компоновщика.

Чем? Есть одно место, где описаны все размеры блоков памяти конкретного проекта. Заходишь и смотришь, а не надо ползать искать. Когда пишутся, например, всякие демки на 999 вариантов, тогда в них приходится выносить и размазывать настройки по файлам и ключам. Но для конкретного проекта зачем?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 13 2016, 08:43
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(zltigo @ Apr 13 2016, 12:27) *
Чем? Есть одно место, где описаны все размеры блоков памяти конкретного проекта. Заходишь и смотришь, а не надо ползать искать. Когда пишутся, например, всякие демки на 999 вариантов, тогда в них приходится выносить и размазывать настройки по файлам и ключам. Но для конкретного проекта зачем?

Есть задача, у неё свой стек. Все переменные, дефайны этой задачи - в её файлах. Проект состоит из множества таких задач. Естественно что данные, нужные локально только данной задаче, должны быть локальны (описаны именно в её файлах, а не вкаком-то едином файле). А стек - это локальная сущность конкретной задачи. И размер его скорее зависит от данной задачи, а не от проекта в целом.
Или Вы и локальные переменные каждой задачи тоже в едином файле определяете? laughing.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 13 2016, 09:01
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (jcxz @ Apr 13 2016, 11:43) *
Есть задача, у неё свой стек.

Не передергивайте! Речь идет о статически распределяемой памяти.
Но, если-бы я с какого-то бодуна выделял стеки задачам статически, то, да и эти БЛОКИ памяти я бы ТОЖЕ описал под линкер, что-бы видеть общую картину в одном месте и сразу при проектировании, а не тогда, кода линкер выругается при линковке что памяти совсем нет. После чего придется ползать по куче файлов и думать где жертвовать.
QUOTE
А стек - это локальная сущность конкретной задачи.

Содержимое стека - несомненно. Но сам стек, как блок памяти, это уже элемент ВЕРХНЕГО, надзадачного уровня. Вот и его выделением и размещением занимается НЕ задача.
QUOTE
Или Вы и локальные переменные каждой задачи тоже в едином файле определяете? laughing.gif

К чему эта дурацкая фраза и усмешка?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 13 2016, 09:19
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(zltigo @ Apr 13 2016, 15:01) *
Вот и его выделением и размещением занимается НЕ задача.

Размещением стека, как и любой другой статической переменной у меня занимается компоновщик. Не вижу ни малейшего смысла выделять стек динамически.
Какая разница кто размещает?
Есть разница где эта переменая описана. А описана она должна быть там же, где и прочие локальные переменные задачи.

Цитата(zltigo @ Apr 13 2016, 15:08) *
Без комментариев, ибо рожденный ползать понять "лишнего" не может sad.gif

Думаю, что во всех случаях, когда нужно зачем-то создавать/убивать задачи в embedded среде с заранее известным выполняемым функционалом (речь не идёт о системах, в которых заранее не известен список работающих задач, когда задачи запускаются пользователем), всегда можно составить максимальный список задач, которые могут работать одновременно, выделить под них стеки статически и все их запустить.
И не убивать их когда работа закончена и создавать заново, а просто приостанавливать выполнение когда необходимо (на мэйлбоксе например), до появления новых данных для обработки.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- maxntf   Освоение ARM контроллеров   Mar 29 2016, 14:17
- - Forger   Цитата(maxntf @ Mar 29 2016, 17:17) Появи...   Mar 29 2016, 15:54
- - agregat   Цитата(maxntf @ Mar 29 2016, 17:17) Появи...   Mar 29 2016, 15:59
|- - Forger   Цитата(agregat @ Mar 29 2016, 18:59) А за...   Mar 29 2016, 16:01
- - ЯadiatoR   Вы путаете назначение ОЗУ и энергонезависимой памя...   Mar 29 2016, 16:07
|- - maxntf   Цитата(ЯadiatoR @ Mar 29 2016, 19:07) Вы ...   Mar 29 2016, 17:44
|- - Forger   Цитата(maxntf @ Mar 29 2016, 20:44) STM32...   Mar 29 2016, 17:49
||- - maxntf   Цитата(Forger @ Mar 29 2016, 20:49) Это ч...   Mar 29 2016, 17:55
||- - Forger   Цитата(maxntf @ Mar 29 2016, 20:55) Не пл...   Mar 29 2016, 18:02
||- - Obam   ЦитатаЦитата(maxntf @ Mar 29 2016, 20:44) * Взять ...   Mar 30 2016, 08:14
||- - maxntf   Цитата(Obam @ Mar 30 2016, 11:14) Характе...   Mar 30 2016, 09:05
||- - AVI-crak   Цитата(maxntf @ Mar 30 2016, 16:05) Понят...   Mar 30 2016, 13:15
|- - scifi   Цитата(maxntf @ Mar 29 2016, 20:44) Допус...   Mar 29 2016, 17:56
|- - mantech   Цитата(maxntf @ Mar 29 2016, 20:44) Возмо...   Mar 29 2016, 18:46
||- - maxntf   Цитата(mantech @ Mar 29 2016, 21:46) Реко...   Mar 29 2016, 18:51
|- - mantech   Цитата(maxntf @ Mar 29 2016, 20:44) Взять...   Mar 29 2016, 18:48
|- - jcxz   Цитата(mantech @ Mar 30 2016, 00:48) Стра...   Mar 30 2016, 04:53
- - Tarbal   Да что вы все такие злые? Ну не знает человек сто...   Mar 29 2016, 17:18
|- - Forger   Цитата(Tarbal @ Mar 29 2016, 20:18) Да чт...   Mar 29 2016, 17:33
- - ЯadiatoR   Печально, что вы гоняясь за бюджетом и другими вещ...   Mar 29 2016, 17:59
|- - maxntf   Цитата(ЯadiatoR @ Mar 29 2016, 20:59) + д...   Mar 29 2016, 18:48
- - maxntf   Во избежание лишних дискуссий буду задавать более ...   Mar 30 2016, 07:33
|- - jcxz   Цитата(maxntf @ Mar 30 2016, 13:33) ROM -...   Mar 30 2016, 07:57
|- - maxntf   Цитата(jcxz @ Mar 30 2016, 10:47) Сомнева...   Mar 30 2016, 08:05
|- - jcxz   Цитата(maxntf @ Mar 30 2016, 14:05) ROM -...   Mar 30 2016, 08:16
|- - ЯadiatoR   Цитата(maxntf @ Mar 30 2016, 11:05) Так я...   Mar 30 2016, 11:18
- - ЯadiatoR   Опять же как я и говорил - нечеткие требования нап...   Mar 30 2016, 08:01
- - ЯadiatoR   Не имея представления об ARM, в частности о процах...   Mar 30 2016, 13:21
- - den1s   по требованиям много каналов АЦП, памяти, USB и Co...   Apr 1 2016, 16:03
|- - jcxz   Цитата(den1s @ Apr 1 2016, 22:03) Отладку...   Apr 1 2016, 18:18
|- - den1s   Цитата(jcxz @ Apr 1 2016, 21:18) Вменяемы...   Apr 1 2016, 19:24
|- - jcxz   Документация вроде нормально к ним находится в ине...   Apr 2 2016, 08:19
|- - den1s   Цитата(jcxz @ Apr 2 2016, 12:19) Документ...   Apr 2 2016, 14:50
|- - jcxz   Цитата(den1s @ Apr 2 2016, 20:50) Возможн...   Apr 2 2016, 17:29
- - maxntf   Продолжаем разбираться. Получил железо, просмотрел...   Apr 4 2016, 12:51
- - ЯadiatoR   Адрес 0x00 не принимает никакого значения boot. Ту...   Apr 4 2016, 14:12
|- - maxntf   Цитата(ЯadiatoR @ Apr 4 2016, 17:12) Адре...   Apr 4 2016, 16:23
- - esaulenka   Нет. Значение SYSCFG определяет, на какую область ...   Apr 4 2016, 19:33
|- - AVI-crak   Цитата(esaulenka @ Apr 5 2016, 02:33) Но ...   Apr 5 2016, 04:17
|- - jcxz   Цитата(esaulenka @ Apr 5 2016, 01:33) Нет...   Apr 5 2016, 08:37
- - x893   Ремапом приходится пользоваться в STM32F0 серии та...   Apr 4 2016, 19:52
- - maxntf   STM32F407VG. Как в программе выполнить reset? В PI...   Apr 5 2016, 09:06
|- - scifi   Цитата(maxntf @ Apr 5 2016, 12:06) STM32F...   Apr 5 2016, 09:29
|- - jcxz   Цитата(maxntf @ Apr 5 2016, 15:06) STM32F...   Apr 5 2016, 09:38
|- - scifi   Цитата(jcxz @ Apr 5 2016, 12:38) Универса...   Apr 5 2016, 10:15
|- - jcxz   Цитата(scifi @ Apr 5 2016, 16:15) А ещё м...   Apr 5 2016, 10:27
- - maxntf   Сейчас разбираюсь с юзерским бутлоадером. Почитал ...   Apr 5 2016, 13:32
|- - scifi   Цитата(maxntf @ Apr 5 2016, 16:32) Только...   Apr 5 2016, 13:45
- - maxntf   Вот два кода, первый бутлоадера, а второй моя прог...   Apr 5 2016, 14:29
|- - scifi   Цитата(maxntf @ Apr 5 2016, 17:29) Вот дв...   Apr 5 2016, 14:41
||- - maxntf   Тогда не верно выразился, нужно так - "Так вс...   Apr 5 2016, 14:55
||- - scifi   Цитата(maxntf @ Apr 5 2016, 17:55) - когд...   Apr 5 2016, 15:10
||- - maxntf   Цитата(scifi @ Apr 5 2016, 18:10) Я отлаж...   Apr 9 2016, 07:36
||- - scifi   Цитата(maxntf @ Apr 9 2016, 10:36) А где ...   Apr 9 2016, 09:13
|- - jcxz   Цитата(maxntf @ Apr 5 2016, 20:29) //здес...   Apr 5 2016, 15:33
|- - maxntf   Цитата(jcxz @ Apr 5 2016, 18:33) Это то к...   Apr 5 2016, 15:58
||- - jcxz   Цитата(maxntf @ Apr 5 2016, 21:58) При ус...   Apr 5 2016, 16:08
||- - maxntf   Цитата(jcxz @ Apr 5 2016, 19:08) Так если...   Apr 5 2016, 16:20
||- - jcxz   Цитата(maxntf @ Apr 5 2016, 22:20) Хотя с...   Apr 5 2016, 16:37
||- - maxntf   Цитата(jcxz @ Apr 5 2016, 19:37) Как Вы с...   Apr 5 2016, 17:26
|- - zltigo   QUOTE (jcxz @ Apr 5 2016, 18:33) Как-то с...   Apr 5 2016, 16:43
|- - jcxz   Цитата(zltigo @ Apr 5 2016, 22:43) 1. #de...   Apr 5 2016, 16:50
|- - zltigo   QUOTE (jcxz @ Apr 5 2016, 19:50) У ТС адр...   Apr 5 2016, 16:56
|- - scifi   Цитата(zltigo @ Apr 5 2016, 19:56) Это см...   Apr 5 2016, 17:35
- - Kabdim   Афаик нужно после смены адреса таблицы прерываний ...   Apr 6 2016, 08:23
|- - Сергей Борщ   QUOTE (maxntf @ Apr 12 2016, 17:09) Подск...   Apr 12 2016, 15:36
|- - AVI-crak   Цитата(zltigo @ Apr 12 2016, 23:13) Следу...   Apr 12 2016, 17:14
||- - zltigo   Цитата(AVI-crak @ Apr 12 2016, 20:14...   Apr 12 2016, 18:49
||- - AVI-crak   Цитата(zltigo @ Apr 13 2016, 01:49) Как и...   Apr 12 2016, 21:39
||- - zltigo   QUOTE (AVI-crak @ Apr 13 2016, 00:39...   Apr 12 2016, 21:52
||- - AVI-crak   Цитата(zltigo @ Apr 13 2016, 04:52) Это В...   Apr 13 2016, 00:41
||- - zltigo   QUOTE (AVI-crak @ Apr 13 2016, 03:41...   Apr 13 2016, 05:30
||- - zltigo   QUOTE (jcxz @ Apr 13 2016, 12:19) И не уб...   Apr 13 2016, 09:38
|- - KnightIgor   Цитата(jcxz @ Apr 13 2016, 07:10) PS: Кон...   Apr 13 2016, 09:20
|- - jcxz   Цитата(KnightIgor @ Apr 13 2016, 15:20) Н...   Apr 13 2016, 09:25
||- - MrYuran   Цитата(jcxz @ Apr 13 2016, 12:25) Если ес...   Apr 13 2016, 09:40
|- - zltigo   QUOTE (KnightIgor @ Apr 13 2016, 12:20) С...   Apr 13 2016, 09:41
- - maxntf   Блин сам и напоролся. Смотрел конфиг из чужого про...   Apr 12 2016, 15:37
- - ViKo   Как можно контролировать стек (не задач в RTOS), к...   Apr 13 2016, 07:25
|- - zltigo   QUOTE (ViKo @ Apr 13 2016, 10:25) Как мож...   Apr 13 2016, 07:50
|- - jcxz   Цитата(zltigo @ Apr 13 2016, 13:50) Также...   Apr 13 2016, 09:05
|- - zltigo   QUOTE (jcxz @ Apr 13 2016, 12:05) А с как...   Apr 13 2016, 09:08
- - maxntf   Подскажите во время отладки в CoIDE где можно узна...   Apr 13 2016, 13:24


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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