Вверх ↑
Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
#76: 2011-07-22 23:28:30 правка | ЛС | профиль | цитата


Редактировалось 8 раз(а), последний 2022-09-20 04:18:47
карма: 0

0
Ответов: 1731
Рейтинг: 68
#77: 2011-07-22 23:48:39 ЛС | профиль | цитата
Регистрация - тут
карма: 1

0
Разработчик
Ответов: 4698
Рейтинг: 426
#78: 2011-07-23 20:43:45 ЛС | профиль | цитата
85.115.248.70 писал(а):
Как можно передать несколько переменных, или каких-то настроечных параметров в одном вызове event(onEvent)?

С помощью массивов:
#hws
fvar(dt)
dt = 1234 && "test"
event(onEvent,dt)
карма: 10
0
Ответов: 29
Рейтинг: 0
#79: 2011-07-25 21:13:31 ЛС | профиль | цитата
Assasin, вот исходники двух компонентов.
Выше, передающий в поток массив из двух элементов.
Ниже, исходник принимающего компонента. Вот в нем мне и нужно изменить один из элементов массива, и передать дальше в поток.

#hws
func Init
nop1 = nop1 + 1 // прерывание по любому из событий(только поменять номер'nop')
block.select('BLK_MAIN')
println('sei')
end
// передающий поток компонент
func doInt
fvar(dt)
dt = 'break' && 255
block.select('BLK_INTERRUPT')
println('INT',Select,': ; Обработчик прерывания INT0')
event(onInt,dt)
println('reti')
end


#hws
func Init

end
// принимающий поток компонент
func doMyMethod(dt)
trace(dt[0]) // проверяем, есть ли в потоке данные,
trace(dt[1]) // то-же самое, и в обоих случаях данные из потока пришли.
if(dt[0] = 'break')
block.select('BLK_INTERRUPT')
else
block.select('BLK_MAIN')
end
dt[1] = 'fff' // если попытаться изменить значение в элементе массива -
println('xxx') // ошибка: Error[12]: Undeclared identifier: dt
// если же закомментировать строку с присвоением dt[1] = 'fff' - прежнее значение элемента нормально передается дальше в поток
event(onMyEvent,dt)
end


func Result()
return(MyProp)
end
Что я делаю не так?
карма: 0

0
файлы: 2code_24725.txt [575B] [625], code_24726.txt [1016B] [650]
Разработчик
Ответов: 4698
Рейтинг: 426
#80: 2011-07-26 16:22:31 ЛС | профиль | цитата
Different, я не особо много знаю в FTCG, но могу предложить метод костыля: сделай новую переменную, например, ndt, и присвой ей значение переменной dt, дальше делай с ней что захочешь. В принципе, этот вариант даже более приемлем, т.к. при использовании хаба при перезаписи переменной dt будет изменяться значение, выдаваемое хабом на каждую точку, что не так ожидаемо со стороны пользователя.
карма: 10
0
Ответов: 29
Рейтинг: 0
#81: 2011-07-26 21:06:35 ЛС | профиль | цитата
Assasin, ладно понимаю. В любом случае благодарен за отклик.
Понимаешь, в настоящий момент у меня есть всего 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 ; команда возврата из прерывания

карма: 0

0
файлы: 1code_24734.txt [1.7KB] [575]
Ответов: 5227
Рейтинг: 587
#82: 2011-07-27 21:07:07 ЛС | профиль | цитата
Different, в своё время пришёл к выводу что довольно не продуктивно весь код вписывать в компоненты, гораздо проще будет делать библиотекой процедур и функций (типа KOL в пакете Windows), в твоём случае джамп на метку (с сохранением регистров в стэке, и предачей параметров) таким образом тебе будет достаточно передать указатель на массив (а где он будет, озу, пзу, флеш или ещё где) собственно тебе решать, да и макросы таким способом удобней описывать и редактировать. Для AVR на C уже существует пакет, поищи поиском (правда я уже прикепел к mikroPascal PRO for AVR и меня устраивает)
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 29
Рейтинг: 0
#83: 2011-07-27 22:36:33 ЛС | профиль | цитата
andrestudio, это я на днях зарегистрировался на форуме.
А читаю его уже давно. Знаю, что ты не понаслышке знаком с темой контроллеров, видел тебя кажется на "Радиокоте" или еще где-то, сейчас точно не помню.

В том-то и весь смысл пакета, что хочется чтобы это была графическая среда, а не текстовая. Видел я и BASCOM AVR и mikroPascal. Помню, ты тоже одно время разачаровывался в HiAsm-е, но потом видимо прошло. Вот у меня сейчас такой же настрой, -(( хде пофиксенный баг с массивами в FTCG..???

Помнишь, как Galkov писал: - "встретил рационализатора - убей его!"
AVR-ки, это по сравнению с теми-же ARM - это как Запорожец против Мерседеса.
И я сейчас не буду(во всяком случае пока, а то вдруг на Galkovа нарвусь -))) изобретать всяких библиотек, навороченных функций и прочего под AVR-ки.
Ну, не приспособлены они от рождения у производителя для такого. Продвинутая программмная релюшка - баста!
Весь код компонентов - это по сути, теже макросы, только настраиваемые пользователем.
Например: у меня компонент "Memory" - аналог в железе SRAM. Три строки ассемблерного кода, и данные будут в памяти. Вот и весь компонент. А вот теперь самое главное!
Почему мне хочется сделать такой пакет? Лазить по листингу, следить, а куда и в какую ячейку памяти у меня чего записано. А через 10 минут опять забыть, и по новой. Крышу же может напрочь снести от этого садомазохизма -))

Знаешь, почему у нас шахматисты такие умные..? Секрет! Подсказываю. Это потому что у них фигурки на доске стоят. А если бы они текст читали..
Пешка е2-е4. Все бы клиентами 6 палаты были...))))
карма: 0

0
Ответов: 3889
Рейтинг: 362
#84: 2011-07-27 22:43:37 ЛС | профиль | цитата
[flood]
Different писал(а):
Знаешь, почему у нас шахматисты такие умные..? Секрет! Подсказываю. Это потому что у них фигурки на доске стоят. А если бы они текст читали..
Пешка е2-е4. Все бы клиентами 6 палаты были...))))

Что Вы такое говорите, большинство профессиональных шахматистов прекрасно играют в уме, не только с текста, но и на слух, гроссмейстеры вообще несколько досок в памяти держать могут без проблем.[/flood]
карма: 1

0
Ответов: 29
Рейтинг: 0
#85: 2011-07-27 22:59:00 ЛС | профиль | цитата
[flood]Говорите, шахматисты несколько досок держат в памяти.
Вот вам простой тест:
Вспомните и воспроизведите в памяти несколько HiAsm программ. Можете? И я могу.
А исходники этих же программ в блокноте?

Мне про свой результат может не сообщать. Держите его в секрете )))))))[/flood]
карма: 0

0
Ответов: 1528
Рейтинг: 57
#86: 2011-07-28 20:38:51 ЛС | профиль | цитата
Different, [flood]ерунду товарищ городите [/flood]
карма: 0

0
Ответов: 4629
Рейтинг: 749
#87: 2011-07-28 20:38:55 ЛС | профиль | цитата
Different писал(а):
как поменять данные в массиве

Думаю, наиболее простой вариант - это то, что предлагал Assasin. Можно попытаться добавить свои методы по изменению массива в кодогенератор, но тут надо разбираться. Попробуй продумай логику пакета, может можно будет обойтись без массивов.
карма: 26

0
Ответов: 29
Рейтинг: 0
#88: 2011-07-29 00:13:05 ЛС | профиль | цитата
Netspirit писал(а):
Попробуй продумай логику пакета, может можно будет обойтись без массивов.

Да знаю. Безвыходных ситуаций не бывает. Дело даже не в массивах. Как сейчас ситуация в FTCG? Я могу выдать в поток либо одну переменную, что явно недостаточно, либо массив, с которым тут-же уже ничего не смогу сделать. Потому что он становится недоступен. Я понимаю, что путем усложнения логики можно обойти эти ограничения.
Но вот как раз этого, мне и не хочется. Ладно, будем думать дальше..
карма: 0

0
Ответов: 29
Рейтинг: 0
#89: 2011-08-17 12:29:14 ЛС | профиль | цитата
Здравствуйте!
Как вывести в код FTCG свойства шрифта(имя,цвет,стиль) и остальные. Здесь древовидная структура, а как к ней обратиться не пойму?

Font   Шрифт
|-- name Arial
|-- color clBlack
|-- size 8
+ Style
|-- Bold True
|-- Italic False
|-- Underline False

Sorry. Нашел ошибку у себя в коде.
карма: 0

0
Ответов: 4629
Рейтинг: 749
#90: 2011-08-17 14:36:11 ЛС | профиль | цитата
Different, если разберешься с обработкой свойств типа Font - поделись, добавлю в туториал.
карма: 26

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)