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

 
 
> mspgcc + _even_in_range_, Как бы эту фичу ИАРа в Gcc перетащить...
MrYuran
сообщение Apr 17 2009, 06:57
Сообщение #1


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



В ИАРе для МСП430 есть такая классная фича - квалификатор _even_in_range_(range) для аргументов switch().
То есть если аргумент чётный и распределён в ограниченном диапазоне, то свитч просто формирует сплошную таблицу переходов, а аргумент свича выступает индексом в этой таблице. Таким образом, осуществляется переход за одну команду независимо от количества кейсов в свиче.
Оптимизация жуткая, причём это особенно актуально при обработке прерываний от второго вектора таймера В (TB_CCR1_VECTOR), когда пишем switch(TBIV) и максимально быстро выруливаем на нужный обработчик.

Так вот, как бы такую штуку провернуть в GCC? На форуме mspgcc были какие-то наброски на асме, но это как-то некрасиво.
типа этого
Хотелось бы на чистом си, типа макроса чтоли...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MrYuran
сообщение Apr 22 2009, 04:44
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Мда...
Вчера полдня боролся непонятно с чем, пока не поменял свой супероптимизированный свич на стандартный...
И ведь вроде всё правильно делает, но программу уносит в неведомые дали, всё виснет на ходу...
Будем искать...

Кстати, большим открытием для меня было, что static const sw[] формируется не в флеше, как было бы логично, а в ОЗУ.
Пришлось его насильно запихнуть в флешь ( __attribute__(( section(".text") )) )

Ещё один фокус:
static inline void PulseRecharge() не инлайнится внутрь обработчика прерывания,
пока его принудительно туда не запихнёшь
static inline void PulseRecharge()__attribute__((always_inline));
Это если они в одном модуле, а если в разных, то не лезет ни в какую!

#######

Глянул diff-ом, разницы никакой не заметил, за исключением того что все адреса немного сползли из-за изменения размеров функции и добавления таблицы переходов...
В общем, полный абзац.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
alx2
сообщение Apr 22 2009, 11:22
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(MrYuran @ Apr 22 2009, 09:44) *
Кстати, большим открытием для меня было, что static const sw[] формируется не в флеше, как было бы логично, а в ОЗУ.
Пришлось его насильно запихнуть в флешь ( __attribute__(( section(".text") )) )
Подозреваю, что у msp не фон-неймановская архитектура, и для доступа к ОЗУ и ПЗУ должен использоваться разный код. А gcc не поддерживает "универсальных" указателей (типа трехбайтных указателей в IAR'овском компиляторе для MCS51). Поэтмоу все данные размещаются в ОЗУ. При явном размещении данных в .text необходимо так же явно указывать компилятору, что читать объект требуется особым образом.


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 22 2009, 13:14
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(alx2 @ Apr 22 2009, 15:22) *
Подозреваю, что у msp не фон-неймановская архитектура, и для доступа к ОЗУ и ПЗУ должен использоваться разный код.

Да нет, как раз-таки с этим всё нормально. Для чтения совершенно безразлично, флешь это, ОЗУ или регистры периферии.
Всё расположено линейно в едином пространстве адресов.
Вот AVR - там да, без пузыря во флешь не залезешь... biggrin.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
alx2
сообщение Apr 23 2009, 10:21
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(MrYuran @ Apr 22 2009, 18:14) *
Да нет, как раз-таки с этим всё нормально. Для чтения совершенно безразлично, флешь это, ОЗУ или регистры периферии.
Всё расположено линейно в едином пространстве адресов.
Тогда странно. Для ARM gcc размещает константные объекты, как и положено, в .rodata.


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MrYuran   mspgcc + _even_in_range_   Apr 17 2009, 06:57
- - ReAl   Цитата(MrYuran @ Apr 17 2009, 09:57) Хоте...   Apr 17 2009, 07:39
|- - MrYuran   Цитата(ReAl @ Apr 17 2009, 11:39) Так пой...   Apr 17 2009, 07:57
- - MrYuran   Ну, короче, вот что получилось. Код#define switch_...   Apr 17 2009, 09:19
|- - ReAl   Цитата(MrYuran @ Apr 17 2009, 12:19) Ну, ...   Apr 17 2009, 10:30
- - ReAl   "раз пошла такая пьянка" (Cлабонервным н...   Apr 17 2009, 11:43
|- - MrYuran   Цитата(ReAl @ Apr 17 2009, 15:43) "р...   Apr 17 2009, 12:10
||- - ReAl   Цитата(MrYuran @ Apr 17 2009, 15:10) Чё-т...   Apr 17 2009, 12:27
|- - alx2   Немного отвлеченный вопрос: а откуда берется этот ...   Apr 17 2009, 12:12
- - MrYuran   Цитата(alx2 @ Apr 17 2009, 16:12) Немного...   Apr 17 2009, 12:37
|- - ReAl   Цитата(MrYuran @ Apr 17 2009, 15:37) ...   Apr 17 2009, 12:58
|- - MrYuran   Цитата(ReAl @ Apr 17 2009, 16:58) Дык -st...   Apr 20 2009, 05:10
|- - Сергей Борщ   Цитата(MrYuran @ Apr 20 2009, 08:10) Я та...   Apr 20 2009, 05:12
|- - MrYuran   Цитата(Сергей Борщ @ Apr 20 2009, 09:12) ...   Apr 20 2009, 05:27
|- - Сергей Борщ   Цитата(MrYuran @ Apr 20 2009, 08:27) Пише...   Apr 20 2009, 07:29
- - klen   typedef enum { func0=0 , func1 , .... , func_count...   Apr 18 2009, 04:57
- - MrYuran   Итак, свершилось чудо! Было: Кодswitch_even_i...   Apr 20 2009, 08:13
- - MrYuran   Прочитал - таки в книжке про опции компилятора, мн...   Apr 20 2009, 14:05
|- - Сергей Борщ   Цитата(MrYuran @ Apr 22 2009, 07:44) Ещё ...   Apr 22 2009, 08:19
- - MrYuran   нашёл у Гриффитса такой абзац: Похоже, действител...   Apr 22 2009, 08:06
- - vvp532   для gcc-4.9.x (последний msp430-gcc на ti.com v4.9...   Sep 30 2015, 15:00


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

 


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


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