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

 
 
> IAR C/ASM Preproc, Переменная-макрос (авто)инкримент значения
k155la3
сообщение Oct 29 2015, 15:06
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



IAR C++ MSP430
IAR ASM MSP430

Есть необходимость средствами компилятора или препроцессора (C/ASM)
выполнить "автонумерацию" (инкримент) значения поля структуры в массиве структур, определенных как const в памяти флеш.
Причем в одном и томже поле структуры должно быть обеспечено несколько "счетчиков" (в разных строках массива)


M_VAR_TY_1() - предполагаемый автонумератор.

Код
// ======== массив во флеш-памяти =============
// определен на этапе компиляции
const TyRefRec RefTbl[] =
{     
//      Код          тип    адрес в массиве, соотв-ем eTy_x
    { eID_Test,     eTy_1, M_VAR_TY_1() },
    { eID_Go5,     eTy_1, M_VAR_TY_1() },
    { eID_Go2,     eTy_1, M_VAR_TY_1() },
    { eID_Zond1,     eTy_2, M_VAR_TY_2() },
    { eID_Go4,     eTy_1, M_VAR_TY_1() },
    { eID_Go0,     eTy_2, M_VAR_TY_2() },

};

main()
{
    // массивы данных, на которые ссылается RefTbl[]
    int Arr_type_1[100]; // соотв-ет коду eTy_1
    int Arr_type_2[100]; // eTy_2
    int Arr_type_3[100]; // eTy_3
        . . . . . .

}


Мои исследования по C показали, что это сделать можно, но через жуткий и громоздкий изворот.
Поэтому эту тему с С++ я закрыл.

---------------- ???? ------------------------
А вот с ASM это должно бы решаться без проблем. Только начал курить это направление,
может кто решал такую задачу на IAR Asm ?
--------------- /???? ------------------------

Сразу отвечу на вопрос, зачем, собственно.
1. таблица может содержать под сотню строк.
2. таблица может изменяться (строки добавляются-удаляются)
3. лень вручную номеровать-переномеровать строки, темболее, что они могут быть "вперемешку".

Есть конечно, легкий и простой путь решения - "влоб" написать утилиту pre-pre-processor sm.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Непомнящий Евген...
сообщение Oct 30 2015, 05:26
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Сделайте внешний препроцессор. На питоне / перле / пхп / etc (или можно посмотреть в сторону cog). Дальше дергайте его в своем билд-скрипте и будет вам счастье. И второй вариант - покопаться в буст/препроцессор. Может что-нить и накопаете.

Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 30 2015, 07:17
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Непомнящий Евгений @ Oct 30 2015, 08:26) *
Сделайте внешний препроцессор. На питоне / перле / пхп / etc (или можно посмотреть в сторону cog). Дальше дергайте его в своем билд-скрипте и будет вам счастье. И второй вариант - покопаться в буст/препроцессор. Может что-нить и накопаете.


в бусте (boost.org) я уже покопался.
Там решение есть. На основе этого я, из-за громоздкости, и решил отказаться от этой затеи.
( \boost_1_59_0\boost_1_59_0\boost\preprocessor\slot\counter.hpp)
За ссылку спасибо.

По внешнему препроцессору - согласен. Шас начнем писать нечто.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Oct 30 2015, 07:55
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(k155la3 @ Oct 30 2015, 10:17) *
Там решение есть. На основе этого я, из-за громоздкости, и решил отказаться от этой затеи.
( \boost_1_59_0\boost_1_59_0\boost\preprocessor\slot\counter.hpp)


Буст/препроцессор не для слабых духом, это да sm.gif

Как только я на нем делал что-то нетривиальное, то через полгода сам с трудом разбирался, как же оно работает sm.gif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 21:53
Рейтинг@Mail.ru


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