Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 18.08.2020, 11:35   #1
Pasha_Bi
Senior Member
 
Регистрация: 24.07.2009
Адрес: г. Иваново
Возраст: 46
Сообщений: 328
Вес репутации: 640/51
Pasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to all
По умолчанию Как определить массив в IAR, чтобы он не пересекал границ 1КБайт.

Уважаемые коллеги! Как определить массив в IAR, чтобы он не пересекал границ 1КБайт.
Для справки, речь о STM32F4, Burst DMA транзакции. Можно
Код:
uint8_t A[234] @ 0x20000000;
например, но не нравится.
За ранее спасибо.
Pasha_Bi вне форума   Ответить с цитированием
Старый 18.08.2020, 13:40   #2
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,493
Вес репутации: 4677/101
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Как определить массив в IAR, чтобы он не пересекал границ 1КБайт.

Pasha_Bi
при традиционном подходе это не задача компилятора, это задача линкера.
однако сходу нашел, что в IAR есть костыль, который позволяет сделать выравнивание данных.
https://www.iar.com/contentassets/e2.../example-9.pdf
наверное как-то так.

Код:
#pragma pack(1024)//alinment 1024 bytes
uint8_t A[234];
#pragma pack() //default aligment
по хорошему конечно лучше через секцию в скрипте линкера.
besogon вне форума   Ответить с цитированием
Старый 18.08.2020, 14:09   #3
Pasha_Bi
Senior Member
 
Регистрация: 24.07.2009
Адрес: г. Иваново
Возраст: 46
Сообщений: 328
Вес репутации: 640/51
Pasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to all
По умолчанию Re: Как определить массив в IAR, чтобы он не пересекал границ 1КБайт.

Спасибо за ответ, но аргумент у #pragma pack() только до 128 проходит компиляцию (а в описании на #pragma pack() ...4, 8, 16).
Pasha_Bi вне форума   Ответить с цитированием
Старый 18.08.2020, 14:15   #4
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,493
Вес репутации: 4677/101
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Как определить массив в IAR, чтобы он не пересекал границ 1КБайт.

есть еще
Код:
#pragma data_alignment=<N>
besogon вне форума   Ответить с цитированием
Старый 18.08.2020, 14:25   #5
Pasha_Bi
Senior Member
 
Регистрация: 24.07.2009
Адрес: г. Иваново
Возраст: 46
Сообщений: 328
Вес репутации: 640/51
Pasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to all
По умолчанию Re: Как определить массив в IAR, чтобы он не пересекал границ 1КБайт.

Я с этого и начал, выдает предупреждение "this kind of pragma may not used here" и массив не выровнен остается.
Pasha_Bi вне форума   Ответить с цитированием
Старый 18.08.2020, 21:21   #6
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,606
Вес репутации: 3789/98
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: Как определить массив в IAR, чтобы он не пересекал границ 1КБайт.

Цитата:
Сообщение от Pasha_Bi Посмотреть сообщение
Я с этого и начал, выдает предупреждение "this kind of pragma may not used here" и массив не выровнен остается.
А в чем проблема-то? data_alignment выровняет настолько (если место есть), насколько заявлено, даже если это "auto
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 19.08.2020, 08:35   #7
Pasha_Bi
Senior Member
 
Регистрация: 24.07.2009
Адрес: г. Иваново
Возраст: 46
Сообщений: 328
Вес репутации: 640/51
Pasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to all
По умолчанию Re: Как определить массив в IAR, чтобы он не пересекал границ 1КБайт.

Я попробую другими словами: Требуется разместить массив uint8_t A[] с адреса 0bXX...X100 0000 0000. Пока предлагаемые варианты или не компилируются или не выполняют такое размещение.
Pasha_Bi вне форума   Ответить с цитированием
Старый 19.08.2020, 10:09   #8
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,606
Вес репутации: 3789/98
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: Как определить массив в IAR, чтобы он не пересекал границ 1КБайт.

Цитата:
Сообщение от Pasha_Bi Посмотреть сообщение
Я попробую другими словами: Требуется разместить массив uint8_t A[] с адреса 0bXX...X100 0000 0000. Пока предлагаемые варианты или не компилируются или не выполняют такое размещение.
Так говорили же уже (besogon)
в .xcf
PHP код:
place at address mem:0x<твой адрес> { section .array }; 
в .с
PHP код:
#pragma location = ".array"
__root uint8_t Arr[1000]; 
Это же, слава богу, не gcc, в IAR файл управления линкера простой
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 19.08.2020, 10:22   #9
Pasha_Bi
Senior Member
 
Регистрация: 24.07.2009
Адрес: г. Иваново
Возраст: 46
Сообщений: 328
Вес репутации: 640/51
Pasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to all
По умолчанию Re: Как определить массив в IAR, чтобы он не пересекал границ 1КБайт.

Спасибо, в принципе я в первом своем сообщении:
Код:
uint8_t A[234] @ 0x20000000;
То же самое. Мне просто хотелось найти директиву выравнивания, чтобы не я, а линкер выбрал старшие биты адреса.
Pasha_Bi вне форума   Ответить с цитированием
Старый 19.08.2020, 10:44   #10
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,606
Вес репутации: 3789/98
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: Как определить массив в IAR, чтобы он не пересекал границ 1КБайт.

Цитата:
Сообщение от Pasha_Bi Посмотреть сообщение
Спасибо, в принципе я в первом своем сообщении:
Код:
uint8_t A[234] @ 0x20000000;
То же самое. Мне просто хотелось найти директиву выравнивания, чтобы не я, а линкер выбрал старшие биты адреса.
И?
Код:
#pragma data_alignment = 2048
__root uint8_t Arr[1024];
если не выравнивает, значит под "1024" место в принципе есть, а вот с выровненного на "2048" уже не хватает...
Либо где-то в свойствах проекта --no_var_align подставляется
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 19.08.2020, 10:52   #11
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,493
Вес репутации: 4677/101
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Как определить массив в IAR, чтобы он не пересекал границ 1КБайт.

pal1222@yandex.ru
Это же, слава богу, не gcc, в IAR файл управления линкера простой - который знают 3 калеки.
besogon вне форума   Ответить с цитированием
Старый 19.08.2020, 10:59   #12
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,606
Вес репутации: 3789/98
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: Как определить массив в IAR, чтобы он не пересекал границ 1КБайт.

Цитата:
Сообщение от besogon Посмотреть сообщение
pal1222@yandex.ru
Это же, слава богу, не gcc, в IAR файл управления линкера простой - который знают 3 калеки.
Чё знать-то? мануал есть. Хотя кто их читает... тру-красноглазый болжен быть способен нафигачить два кило в командную строку просто по памяти
"кансолька, и ниипёт... ©"
pal1222@yandex.ru вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем/как отлаживать код написаный на Си в WinAVR Yokel Микроконтроллеры других производителей 49 30.09.2014 09:48
что за зверь - Скатерограмма Edua Общетехнические вопросы 17 01.03.2013 23:33
Присоветуйте тип и способ управления MOSFETом "верхнего" плеча dr_Sash Источники питания и силовая электроника 37 08.09.2012 18:50
как в си хайтековском объявить массив и сказать чтобы он лежал на границе килобайта? Sergey Продукция MICROCHIP 1 22.05.2007 17:22


Часовой пояс GMT +3, время: 02:25.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot