Цитата(adnega @ Jun 30 2018, 15:12)

Можете скинуть бинарь - я его конвертну, если у вас нет gcc.
Спасибо, уже не надо - просто копировал из массива результат в неиспользуемую память МК, а для такой памяти IAR позволяет делать дизасм. Так и отладил.
Вобщем: всё ок работает алгоритм.
Ниже прикладываю результат его работы для 64-битного слова: 0000.002A.1003.0006.
При таких весах битов карты (см. установленные биты в бит-карте выше):
бит1=2 байта, бит2=2 байта, бит16=4 байта, бит17=2 байта, бит28=4 байта, бит33=4 байта, бит35=4 байта, бит37=2 байта.
Результат картинкой (не знаю как в IAR сохранить текстовое содержимое окна дизасма, а InqSoft Scaner не захватывает текст из этого окна):
Нажмите для просмотра прикрепленного файлаА здесь результат в бинарнике:
Нажмите для просмотра прикрепленного файлаИтого - время выполнения этого кода думаю будет == примерно 31 такт (не измерял), при условии что dst на входе - выровнен на 4.
Как можно догадаться: функция строится таким образом, чтобы она была определена как:
extern "C" void * Func(void *dst, u32 *table);где: dst - буфер для записи (передаётся в R0); table - массив из 64-х указателей на захватываемые переменные.
Цитата(AlexandrY @ Jun 30 2018, 16:17)

Скопирует все переменные в одну область и вышлет куда надо.
Или даже без копирования вышлет.
Ну-ну. А теперь объясните как он это скопирует, когда переменные разбросаны по всей памяти МК кусочками по 2 и по 4 байта?

Про передачу свЯзными списками я в курсе.