Понимаешь, в настоящий момент у меня есть всего 7 глобальных переменных, и их достаточно, чтобы сгенерировать выходную программу по всем правилам языка ассемблер для AVR.
Не во флуд, вспоминаем аналогию - семь цветов, семь нот..
Если их станет 70 - никакой анальгин мне уже не поможет от головной боли, вспоминать, какая переменная за что отвечает.
Хотя, я немного слукавил. Если удасться решить выше озвученную задачу..
Ниже, сгенерированный код ассемблерной программы. Он не подогнан, просто там тестовые компоненты не несут в себе данных, которые нужно будет нести в потоке.
p.s. как поменять данные в массиве. Netspirit, может Вы знаете?!
#hws
;program MainTest
;.device AT90S2313
.include "C:\VMLAB\include\2313def.inc"
.def temp = R16
rjmp RESET ; Обработка сброса
rjmp INT0
nop
nop
nop
nop
nop
nop
nop
nop
nop
.cseg
reset: ; начало основной программы
ldi temp,low(RAMEND)
out spl,temp
clr R16
sei
Loop: ; пустой цикл. нужен для имитации работы основной программы в ожидании
nop ; каких-то событий, например внешних прерываний или событий от таймеров,
nop ; ну и т.д.
nop
rjmp Loop
; ниже, находится блок - ('BLK_INTERRUPT') и все последующие в этой цепочке
; компоненты при получении управляющего сигнала dt[0] = 'break' обязаны будут
; писать свой код именно сюда. Элемент с индексом [0] до последнего компонента
; в этой цепочке не должен изменяться, а вот элемент с индексом [1] попав например
; в линейный счетчик, на выходе в поток должен поменятся и нести в себе
; уже значение счетчика.
INT0: ; Обработчик прерывания INT0 - ОТСЮДА НАЧИНАЕТСЯ ПАРОВОЗИК!!!
xxx ; здесь выводиться тестовая строка println('xxx')
xxx ; строка со второго тестового компонента
reti ; команда возврата из прерывания