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
. . . . . .
}
// определен на этапе компиляции
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
