Например TDA7294

Форум РадиоКот • Просмотр темы - Котуинко
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср фев 25, 2026 19:06:41

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 2383 ]     ... , , , 46, , , ...  
Автор Сообщение
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Пн мар 23, 2020 15:23:33 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
BOB51, на, поразвлекайся ... http://microsin.net/programming/avr/mix ... -code.html


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Пн мар 23, 2020 15:27:27 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15483
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
НЕЕ!
это только для АВРок - ёжли добавить тудыть еще ПИКи и MCS51 (а в перспективе еще чего...)
то уж слищшком много времени теории в ущерб практике будет.
Тем более без особой на то надобности - я ж придерживаюсь принципа использовать ассемблер как ассемблер, а си как Си (и то не более, чем в адуринкином референсе имеется).
8)
То уж пущай помоложе учебой занимаются.
:beer:


Последний раз редактировалось BOB51 Пн мар 23, 2020 15:30:54, всего редактировалось 1 раз.

Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Пн мар 23, 2020 15:30:32 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Цитата:
может быть неудачной
- если та же задача решена другим способом - неудачный вариант отметается, но задача то решена.
ходы записаны: :)
Цитата:
Пример, который я привёл выше - всего лишь одна из разновидностей классического решения при работе под " чистым ассемблером". И таких приёмов, некорректных по отношению к "чистому Си" достаточно много встречается.

требуется больше некоректных приемов


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Пн мар 23, 2020 15:34:41 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
НЕЕ!


Ну да, как доходит до дела -так в кусты...


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Пн мар 23, 2020 15:38:37 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15483
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
oleg110592
Это просто из желания подтвердить право на существование ассемблерных файлов в составе проекта на СИ?
8)
Тогда можно проще -
разрешено подключение файла на ассемблере, напиасного в соответствии с требованиями, установленными в описании компилятора СИ.
Все, что не соответствует вышеуказанным требованиям предварительно должно быть соответственно изменено.
:wink:

dosikus
Просто на сегодня такой вопрос не актуален.
(Как в свое время и Си с адуринкой).
:beer:


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Пн мар 23, 2020 15:56:36 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
нет - было утверждение "всего лишь одна из разновидностей классического решения И таких приёмов,..". Мне показалось это утверждение в корне неверным, что и было доказано. Ну и txt файлы подключать некрасиво (имхо) - надо по документации - сильный удар по неокрепшим умам :)


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Пн мар 23, 2020 16:23:31 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15483
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Приемов чисто ассемблерных для неперемещаемого кода вполне достаточно.
Однако их место именно в рамках ассемблера - для Си без модификаций (иногда достаточно кардинальной) они малопригодны.
8)
Насчет *.txt - вполне себе оправданно - не все же компиляторы однокомпонентные.
А там, где присутствует линкер обработка совершенно иная, чем в рамках атмелевского ассемблера для АВРок (и его аналогии для MCS51 - c51asm.exe).
Посему и ставятся *.txt как фактически текстовое расширение единственного обрабатываемого компилятором файла проекта.
Посему кстати и ограничение, правда в явном виде только в документации на c51asm.exe записанное:
"....
7.1 7.1 Restrictions
C51ASM only generates absolute object files instead of relocatable object modules. The entire object is
built in one step without calling a linker. Therefore the entire source code of an application program must
reside in a single file and its subsequent include files. The assembler directives that deal with relocatable
segments or external or public symbols have not been implemented, but are still reserved. These
include:
⵼ PUBLIC
⵼ EXTRN
⵼ SEGMENT
⵼ RSEG
C51ASM does not support the Intel Macro Processing Language (MPL). Only standard callable macros
and repeat macros are supported.
..."
Но ... поскольку оба компилятора от единого разработчика и по одной схеме делались, то данное и аврасм 2 также касается (может не так заметно в рамках IDE :roll: )
А вот у ПИКов мпасм по классической схеме с линкером.
Там компоновка многомодульных делается иначе.
В то же время вставка инклудом *.txt работает одинаково во всех трех компиляторах.
:beer:


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Пн мар 23, 2020 16:35:19 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
В то же время вставка инклудом *.txt работает одинаково во всех трех компиляторах.



include - лишь вставляет текст.
Вменяемо - либо инлайн асм либо модуль на асме .
Простыми словами - "ты страдаешь *** из-за пробелов в знании"...


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Пн мар 23, 2020 17:02:47 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Приемов чисто ассемблерных для неперемещаемого кода вполне достаточно.
Насчет *.txt - вполне себе оправданно

1)таких приемов не встречал - просил уже показать, только не свои доморощеные, аж интересно стало. :shock:
2)тхт - тоже нигде не встречал, особенно в примерах производителей микроконтроллеров, тут имхо лучше или быть как все, или рот на замке :)


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Пн мар 23, 2020 18:51:26 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15483
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Вот так и хочется "заткнуть инакомыслие".
:)))
Если удается получить удобный вариант, отличающийся от общеизвестного - сразу кучка "не позволямс".
(тем более, что тот вариант доказал свою работоспособность по серии проектов, в том числе и открыто опубликованных на Радиокоте).
8)
Относительно вставок файлов в Си проектах...
Собственно исходя из того, что компилятор Си сам распределяет ресурсы (планировка памяти, стек и прочие мелочи),
а ассемблер предусматривает полную свободу действий в тех же вопросах, уже имеет место вероятный "конфликт интересов".
Посему и оговорка должна быть - ассемблерные вставки (файлы) созданные с соблюдением требований компилятора Си.
8)
Самое интересное - "без цитаты на иноземный источник" доверия к высказываниям не имеется.
Ну да меня сие как-то не сильно огорчает - Все равно оценка по действующему макету выполняется.
:beer:

dosikus
Вот и я про то же самое:
.include "librus\trd2812_ma.txt"
абсолютно равноценно для компилятора ассемблера avrasm2 нижеследующему
.include "librus\trd2812_ma.asm"
ибо выполняет ВСЕГО ЛИШЬ ПОДСТАНОВКУ ТЕКСТА содержащегося в файле.
Даже при условии, что сам файл является самостоятельной компонентой (библиотечной подпрограммой/модулем).
Причем именно туда, куда это подключение будет выполнено при написании файла, его содержащего!
Другое дело ассемблер, содержащий раздельную обработку каждого из *.asm(*.s) файлов с последующей обработкой полученного результата редактором связей (линкером).
(Вполне вероятно в компиляторе GCC/Си именно такое решение применяется)
8)
А мне ранее приводили именно вариант инклуд подключения *.asm файлов в основном файле проекта для avrasm2 как образец модульного проекта на ассемблере (не на СИ!), отличающегося от такового с использованием *.txt файлов.
:wink:

Посему и обзываю свой вариант "слэнга"
"многофайловый проект под ассемблером".
:wink:


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Пн мар 23, 2020 19:20:15 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Вот так и хочется "заткнуть инакомыслие"

не в том дело - форум публичный, тут новички обитают - а у всех языков есть правила - учится бы надо правильному. В принципе мне лично все равно, но неприятный осадочек остается - на другом, более взрослом форуме, наверняка канделябром по голове.
Пример, взрослый ассемблер
Код:
NCLUDE это директива, которая позволяет включать часть кода в конечную программу.
Вы найдете повторяющиеся строки:

mov dx,offset Hellostr               
mov ah,09h
int 21h
mov dx,offset  str2
mov ah,09h
int 21h
Давайте изменим этот шаге используя директиву INCLUDE. Создает файл Write.asm с кодом внутри:

mov ah,09h   ; функция вывода строки
int 21h
И переписываем шаг используя INCLUDE - write.asm:

MODEL   TINY
STACK 100h   
DATASEG
   Hellostr DB 'Hello First Step Site $'
   str2     DB 'Step 16 $'
CODESEG      
start:   
   mov ax,@data
   mov ds,ax
   mov dx,offset Hellostr               
INCLUDE write.asm
   mov dx,offset  str2
INCLUDE write.asm
   mov ah,04Ch
   mov al,1h
   int 21h

write.asm имхо в тексте понятнее и нагляднее write.txt.
з.ы. на этом придираться к этой части прекращаю - не переубедить.


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Пн мар 23, 2020 21:41:19 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15483
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Зато получим "пинка" при работе с классическими многокомпонентниками, включая мпасм (мплабIDE 8.92), любимый dosikusом кейл и прочие компиляторы с линкером.
Насчет начинающих - кому и "линейный примитив" достаточен, а кому поразбить "сверхлист" на кусочки...
Каждый свое выбирает.
Потому как те компиляторы, что с линкером вполне обоснованно могут матюкнуться на некорректно включенный файл (в опциях линкера не указанный).
А так - хотя бы единство оформления имеет место быть.
*.asm это самостоятельный файл, внешний по отношению к главному файлу проекта.
Данный файл обрабатывается компилятором отдельно и затем весь проект "сшивается" при помощи линкера.
А добавляемые (включаемые) в главный файл проекта текстовые файлы, которые затем обрабатываются как составляющая текста главного файла проекта - это обычные *.txt файлики.
8)
Кроме прочего я ставлю подключение только в главном файле проекта - а там и так все прекрасно видно...
К примеру у того же "замигателя" он вот такой
Спойлер
Код:
;
;      hider file for ATtiny25/45/85 chip
;      version 1.02 KOBRA softvare
;        for version2 assembler!
;----------
;
;   Projekt _______tnX5_2812
;   Filename ______test2812.asm
;   File version __
;   Autor _________ BORIS KRUTITSKIY
;
;----------
; основная конфигурация (in shipped):
;      ----- Fuse Extended Byte -----
; SELFPRGEN = 1 Self-programming enabled (активирован=0, деактивация=1)
;           самопрограммирование (команда SPM) запрещено (0-разрешено)
;       -----  Fuse High Byte -----
; RSTDISBL = 1 External reset disabled (активирован=0, деактивация=1)
;     !!!  после активации RSTDISBL=0 репрограммирование МК возможно
;          исключительно в режиме "high-voltage serial mode" !!!
; DWEN = 1 DebugWIRE enabled (активирован=0, деактивация=1)
;      Must be unprogrammed when lock bit security is required.
; SPIEN = 0 Serial program and data download (активирован=0, деактивация=1)
;      по умолчанию SPIEN=0, изменение статуса с ponyprog2000 недоступно.
; WDTON = 1 Watchdog timer always on (активирован=0, деактивация=1)
; EESAVE = 1 EEPROM preserves chip erase  (активирован=0, деактивация=1)
;         по умолчанию EESAVE=1 (EEPROM not preserved)
; BODLEVEL2:BODLEVEL1:BODLEVEL0 = 111 Brown-out Detector trigger leve
;     111  система brown-out detection отключена
;     110 = 1,7-1,8-2,0 V
;     101 = 2,5-2,7-2,9 V
;     100 = 4,1-4,3-4,5 V
;     0xx   reserved
;        -----  Fuse Low Byte -----
; CKDIV8 = 0 Clock divided by 8 (активирован=0, деактивация=1)
; CKOUT = 1 Clock output enabled (enabled=0, disabled=1)
; SUT1:SUT0 = 10  Slowly rising power, Start-up Time from Power-down = 6CK,
;           Additional Delay from Reset (VCC = 5.0V) = 14CK + 64mS
; CKSEL3:CKSEL2:CKSEL1:CKSEL0 = 0010 внутренний RC генератор 8МГц
;----------
;         ВНИМАНИЕ!!!
; В области сигнатуры ATtiny25/45/85 размещаются два байта
; калибровочных констант для внутреннего RC генератора.
; Старший байт по адресу 0х01 содержит калибровочную константу
; для работы генератора на частоте 8 MHz. Данная константа
; будет автоматически загружена в OSCCAL по окончании сигнала сброса.
; по адресу 0х03 находится константа для частоты 6,4МГц (режим совместимости
; с ATtiny15.  Данная константа также
; будет автоматически загружена в OSCCAL по окончании сигнала сброса.
; в соответствующем режиме.
;
;конфигурационные ячейки могут быть записаны только при помощи
;программатора,а прочитаны как программатором,так и командой LPM.
;общее стирание ИС на содержимое конфигурационных ячеек не влияет.
;
; относительно режимов внутреннего ускорения/PLL (16МГц sys & 64/32МГц PCK)
; и режима совместимости с ATtiny15 дополнительно смотреть документацию!!!
;----------
;
; выбрана текущая конфигурация проэкта:
;
; SELFPRGEN = 1 самопрограммирование (команда SPM) запрещено
; RSTDISBL = 1 вывод RST как вход сброса
;             (0- только при наличии "высоковольтного программатора!!!)
; DWEN = 1 отладка gebugWire запрещена
; SPIEN = 0 последовательное программирование разрешено
; WDTON = 1 WDT может быть включен программно
; EESAVE = 1 общее сирание и EEPROM - 1 стирает
; BODLEVEL2:BODLEVEL1:BODLEVEL0 = 111 система brown-out detection отключена
; CKDIV8 = 0 активирован режим делителя на 8
;            (clkps 3-0 = 0011 /коэффициент деления=8/)
; CKOUT = 1 вывод системной частоты на вывод РВ4 запрещен
; SUT1:SUT0 = 10  Slowly rising power, Start-up Time from Power-down = 6CK,
;           Additional Delay from Reset (VCC = 5.0V) = 14CK + 64mS
; CKSEL3:CKSEL2:CKSEL1:CKSEL0 = 0001 внутренний RC генератор 8МГц на PLL
;            итоговая тактовая 16МГц. Статус PLLE игнорируется
;            использование LSM НЕ РЕКОМЕНДУЕТСЯ
;
;----------
      .nolist
      .include "baseinc\tn45def.inc" ; tn45def.inc tn85def.inc
      .list
; ----------
  .include "librus\map_def_t2812.txt" ; файл объявленных имен, бит и констант
  .include "librus\mac_t2812.txt" ; файл описания макросов
;    вместо name project подставляется имя файла соответствующего проекта
;           шаблоны имеют name project = proto
;_____
  .include "librus\irq_t45.txt" ; файл описания векторов сброса и прерываний
;  .include "librus\trd2812_m.txt" ; файл обработчика передачи массива
                         ; из буфера вывода в линейку на основе WS2812B
  .include "librus\libr_t45_m.txt" ; файл библиотек подпрограмм общего применения
  .include "librus\hass.txt" ; файл библиотеки простейшего ГСЧ
  .include "librus\mark_t0.txt" ; файл обработчика генерации
                        ; маркеров тайм-сетки при помощи таймер-счетчика Т/С0
  .include "librus\hard_t45_m.txt" ; файл аппаратной инициализации системы
  .include "librus\soft2812.txt" ; файл теста дисплея WS2812
  .include "librus\trd2812_m.txt"
; - - - - - - - - - - - - - - - - - - - - - - - - - - -
   .exit

Добавлена "шапка" из описания фузов кристалла по умолчанию и для текущего проекта.
(аналогия с заголовочником ПИКовых).
А дальше перечень подключаемых фрагментов.
:roll:

Кстати... решил проверить мой "перемещаемый вариант"... на макетке...
И таки обнаружил ошибку - не доменял данные в концовке.
Еще один пинок-напоминание - ставить именованные константы вместо просто цифирек, дабы потом не выискивать - "где ж та клятая константа еще была??" (по прошествии энного времени от написания исходника).
:twisted:
Вот работоспособный текст:
Спойлер
Код:
;
;
;         trd2812_m.txt
;
;         файл обработчика передачи массива
; из буфера вывода в линейку на основе WS2812B
; базовый МК из линейки АТМЕЛ при тактовой частоте
; от 16 Мегагерц ( 0,000000062 S)
;
; требуемые интервалы по даташиту WS2812B
;
;Data transfer time( TH+TL=1.25µs±600ns)
;  T0H  0 code ,high voltage time  0.4us   ±150ns
;  T1H  1 code ,high voltage time  0.8us   ±150ns
;  T0L  0 code ,low voltage time   0.85us  ±150ns
;  T1L  1 code ,low voltage time   0.45us  ±150ns
;  RES  low voltage time  Above 50µs
; исходный уровень линии связи = 0
; данные передаются пакетами из трех байт на точку
; старшими битами вперед в последовательности
; соответствующей G - R - B цветам точки
; количество блоков должно соответствовать
; количеству точек в ленте
;
; реальные данные согласно тест - отладки дебаггером (версия1!)
; авр-студио 4.19
;
; Data transfer time( TH+TL=1.38µs -10ns)
;  T0H  0 code ,high voltage time  0.44us  ±10ns
;  T1H  1 code ,high voltage time  0.88us  ±10ns
;  T0L  0 code ,low voltage time   0.94us  ±10ns
;  T1L  1 code ,low voltage time   0.50us  ±10ns
;  RES  low voltage time  192,88uS (Above 50µs)
;
; длина прерывания с пакетом загрузки (x60*3) = 2175uS (0.002175)
; интервал между прерываниями (irq t/c0) = 0.004S (4000uS)
;
;             define datas
; .equ port_out = PORTB ; порт вывода (по усмотрению)
; .equ out_line = 0 ; линия вывода данных
; .equ bufout = SRAM_START ; начальный адрес буфера вывода
; .equ pixel = 60 ; количество точек в линейке/ленте
; .equ bufout_size = (pixel * 3) ; не может быть более объема ОЗУ - стек!!!


;таблица обьявленных имен - переназначение регистров РОН
;
; .def name = r31 ; ZH регистр (полный)
; .def name = r30 ; ZL регистр (полный)
; .def name = r29 ; YH регистр (полный)
; .def name = r28 ; YL регистр (полный)
; .def name = r27 ; XH регистр (полный) указатель текущей ячейки массива bufout
; .def name = r26 ; XL регистр (полный) указатель текущей ячейки массива bufout
; .def name = r25 ; регистр (полный) BH
; .def name = r24 ; регистр (полный) BL
; .def name = r23 ; регистр (полный)
; .def name = r22 ; регистр (полный)
; .def name = r21 ; регистр (полный)
; .def name = r20 ; регистр (полный)
; .def name = r19 ; регистр (полный)
; .def name = r18 ; регистр (полный)
; .def tmp1 = r17 ; регистр (полный) счетчик байт вывода
; .def tmp0 = r16 ; регистр (полный) буфер выводимого байта
; .def regn = r15 ; регистр (урезан)
; .def regn = r14 ; регистр (урезан)
; .def regn = r11 ; регистр (урезан)
; .def regn = r10 ; регистр (урезан)
; .def regn = r9 ; регистр (урезан)
; .def regn = r8 ; регистр (урезан)
; .def regn = r7 ; регистр (урезан)
; .def regn = r6 ; регистр (урезан)
; .def regn = r5 ; регистр (урезан)
; .def regn = r4 ; регистр (урезан)
; .def regn = r3 ; регистр (урезан)
; .def regn = r2 ; регистр (урезан)
; .def matr = r1 ; регистр (урезан) r1 по возможности не использовать!!!
; .def madr = r0 ; регистр (урезан) r0 по возможности не использовать!!!
;
;----------
;  .macro   ;; ввод и предобработка данных
;     
;     
;    .endmacro
;
;----------
;
; определение буфера вывода в области данных
;  .dseg
;  .org bufout
;point0: .byte 3 ; g:r:b
;point1: .byte 3 ; g:r:b
;point2: .byte 3 ; g:r:b
;point3: .byte 3 ; g:r:b
;point4: .byte 3 ; g:r:b
;point5: .byte 3 ; g:r:b
;point6: .byte 3 ; g:r:b
;point7: .byte 3 ; g:r:b
;point8: .byte 3 ; g:r:b
;point9: .byte 3 ; g:r:b
;point10: .byte 3 ; g:r:b
;point11: .byte 3 ; g:r:b
;point12: .byte 3 ; g:r:b
;point13: .byte 3 ; g:r:b
;point14: .byte 3 ; g:r:b
;point15: .byte 3 ; g:r:b
;point16: .byte 3 ; g:r:b
;point17: .byte 3 ; g:r:b
;point18: .byte 3 ; g:r:b
;point19: .byte 3 ; g:r:b
;point20: .byte 3 ; g:r:b
;point21: .byte 3 ; g:r:b
;point22: .byte 3 ; g:r:b
;point23: .byte 3 ; g:r:b
;point24: .byte 3 ; g:r:b
;point25: .byte 3 ; g:r:b
;point26: .byte 3 ; g:r:b
;point27: .byte 3 ; g:r:b
;point28: .byte 3 ; g:r:b
;point29: .byte 3 ; g:r:b
;point30: .byte 3 ; g:r:b
;point31: .byte 3 ; g:r:b
;point32: .byte 3 ; g:r:b
;point33: .byte 3 ; g:r:b
;point34: .byte 3 ; g:r:b
;point35: .byte 3 ; g:r:b
;point36: .byte 3 ; g:r:b
;point37: .byte 3 ; g:r:b
;point38: .byte 3 ; g:r:b
;point39: .byte 3 ; g:r:b
;point40: .byte 3 ; g:r:b
;point41: .byte 3 ; g:r:b
;point42: .byte 3 ; g:r:b
;point43: .byte 3 ; g:r:b
;point44: .byte 3 ; g:r:b
;point45: .byte 3 ; g:r:b
;point46: .byte 3 ; g:r:b
;point47: .byte 3 ; g:r:b
;point48: .byte 3 ; g:r:b
;point49: .byte 3 ; g:r:b
;point50: .byte 3 ; g:r:b
;point51: .byte 3 ; g:r:b
;point52: .byte 3 ; g:r:b
;point53: .byte 3 ; g:r:b
;point54: .byte 3 ; g:r:b
;point55: .byte 3 ; g:r:b
;point56: .byte 3 ; g:r:b
;point57: .byte 3 ; g:r:b
;point58: .byte 3 ; g:r:b
;point59: .byte 3 ; g:r:b
;
;----------

  .cseg
bptr0:
  nop
   .org (bptr0 + (256 - (bptr0 & 0x00FF)))
slot0:
     ; 6/14 (6-4=2 посему роль остатка выполняет CBI)
    cbi port_out,out_line ; 2 цикла
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    ret ; 4 цикла
    .org (slot0+16)
slot1:
    nop ; 13/7 (13-4=9)
    nop
    nop
    nop
    nop
    nop
    nop
    cbi port_out,out_line ; 2 цикла
    nop
    nop
    ret ; 4 цикла
    ;.org 0x0060
    .org (slot1+16)
xslot0:
    ; 6/14 (6-5=1 посему роль остатка выполняет CBI с избытком в 1 nop)
    cbi port_out,out_line ; 2 цикла
;    cbr zl,(1<<6) ; модификация указателя 1 цикл
    cbr zl,(1<<5)
    nop
    nop
    nop
    nop
    nop
    nop ; -2 цикла на ld tmp0,x+
    dec tmp1 ; 1 цикл
    brbs SREG_Z,ends_trd ; 1 цикл при неисполнении (в цикле)
    rjmp trasstt ; 2 цикла
    .org (xslot0+16)
xslot1:
    nop ; 13/7 (13-5=8)
    ;cbr zl,(1<<6) ; модификация указателя 1 цикл
    cbr zl,(1<<5)
    nop
    nop
    nop
    nop
    nop
    cbi port_out,out_line ; 2 цикла
           ; -2 цикла на ld tmp0,x+
      dec tmp1 ; 1 цикл
    brbs SREG_Z,ends_trd ; 1 цикл при неисполнении (в цикле)
    rjmp trasstt ; 2 цикла
;
ends_trd:
      pop tmp0
      pop tmp1
      pop xl
      pop xh
         pop zl
         pop zh ; восстановить рабочую область из стека
   ret
;----------
;
; предварительно:
; линия out_line настроена на вывод
; исходный уровень out_line =0
; указатель стека усатновлен на RAMEND
; массив данных (bufout:bufout_size) предварительно загружен
; флаг готовности массива данных установлен
;
mass_trm:
     push zh
     push zl
     push xh
     push xl
     push tmp1
     push tmp0 ; храним рабочую область в стеке
res_line:
     ldi tmp0,4
     ser tmp1
     cbi port_out,out_line
res_time:
     dec tmp1
     brne res_time
     dec tmp0
     brne res_time ; =>50uS time out
     ldi xh,high (bufout)
     ldi xl,low (bufout) ; загрузка начального адреса массива
        ; в указатель
     ldi tmp1,bufout_size
     ldiw z,slot0 ; адрес начала таблицы в указателе
;     ldiw z,(bptr0 + (256 - (bptr0 & 0x00FF)))
;----------
trasstt:
    ld tmp0,x+ ; 2 цикла
slot_0:
      sbi port_out,out_line ; 2 цикла реально до установки 3 цикла
         bst tmp0,7 ; 1 цикл
         bld zl,4 ; 1 цикл
         icall ; 3 цикла = 4 цикла от out_line=1
;----------
slot_1:
      sbi port_out,out_line
      bst tmp0,6 ; 1 цикл
         bld zl,4 ; 1 цикл
         icall ; 3 цикла
;----------
slot_2:
      sbi port_out,out_line
      bst tmp0,5 ; 1 цикл
         bld zl,4 ; 1 цикл
         icall ; 3 цикла
;----------
slot_3:
      sbi port_out,out_line
      bst tmp0,4 ; 1 цикл
         bld zl,4 ; 1 цикл
         icall ; 3 цикла
;----------
slot_4:
      sbi port_out,out_line
      bst tmp0,3 ; 1 цикл
         bld zl,4 ; 1 цикл
         icall ; 3 цикла
;----------
slot_5:
      sbi port_out,out_line
      bst tmp0,2 ; 1 цикл
         bld zl,4 ; 1 цикл
         icall ; 3 цикла
;----------
slot_6:
      sbi port_out,out_line
      bst tmp0,1 ; 1 цикл
         bld zl,4 ; 1 цикл
         icall ; 3 цикла
;----------
slot_7:
      sbi port_out,out_line
      ;sbr zl,(1<<6) ; модификация указателя под завершающий фрагмент
      sbr zl,(1<<5)
                  ; 1 цикл
      bst tmp0,0 ; 1 цикл
         bld zl,4 ; 1 цикл
         ijmp ; 3 цикла
;----------

:beer:


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Пн мар 23, 2020 22:05:31 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Зато получим "пинка" при работе с классическими

не будет пинка, если с умом подходить - продожение выше примера:
Цитата:

Все готово, код из Write.asm будет включен в на место INCLUDE поэтому нам Write.asm не нужно компилировать. BAT файл будет как обычно.

..\bin\tasm program.asm
..\bin\tlink program.obj

все тоже самое можно сделать - в настройках проекта в любом ИДЕ или мэйкфайле, т.е. ПРОСТО не подключать к проекту файл Write.asm


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Пн мар 23, 2020 23:28:57 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15483
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Не надо делать мешанину - в Вашем последнем примере линкер - то имеется в наличии!
Тем более tasm - это борландовская версия для I8086 в нюансах коего я особо не разбирался.
И опять же "требуются дополнительные настройки линкера"...
8)
А речь в случае АВРок речь идет об однокомпонентном ассемблере.
Но тогда это (инклуд текста) будет простая текстовая подстановка. Зато безо всяких "дополнительных настроек".
Суть разницы в том, что файл, скомпилированный отдельно может иметь свое пространство локальных имен.
Общими будут лишь те, что объявлены public/extern...
(Собственно модульное построение при максимальной возможной автономности каждого из модулей).
А при компиляции единым текстом - все пространство имен будет ЕДИНЫМ.
Да и стыковка сегментов различных областей памяти также или по заданию в опциях редактора связей или линейная, согласно последовательности размещения подключаемых фрагментов.
Также возможны нюансы при объявлении именованных констант/данных.
С учетом того, что при развитии тех же STM8\STM32 и иных МК, где имеется совмещенная область памяти программ/данных, снова происходит возврат к сегментированию разделов памяти в стиле I8086 (атрибуты сегмента - видимость, размерность, размещение и прочее...) приходится рассчитывать на усложнение правил работы с ассемблером в чистом виде до полного варианта к правилам МАСМ в ближайшей перспективе...
(Да минует нас необходимость работы под ассемблером для STM8\STM32! АМИНЬ!!! :evil: ).
:roll:
Выбор как обычно за пользователем - или заниматься индивидуальными настройками компилятора конкретно в каждом из проектов или использовать единую настройку по умолчанию.
Это уже у каждого по своему.
:beer:


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Вт мар 24, 2020 08:58:12 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 7
А речь в случае АВРок речь идет об однокомпонентном ассемблере.


Пора переходить на gcc, а не страдать ******...


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Вт мар 24, 2020 09:08:17 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Не надо делать мешанину

мешанину не я начал:
Цитата:
"Мне удалось соорудить вариант слэнга для организации многофайловиков под ассемблером (одинаково работающий в рамках всех трёх семейств - mcs51/avr/pic)"

Писал же:
Цитата:
"под одну гребенку не причешешь"

Ассеблер до лампочки какой "однокомпонентный" или там "многочленный" (у всего есть правильные названия и правила, слэнг не катит) - тоже написал:
"если с умом подходить" - можно копилировать только один файл и линковать тоже один получившийся после компиляции один файл, тогда брюки превращаются в "однокомпонентный" - вот тут пользователь и может выбирать при создании проекта.
И каждый по своему тоже не катит (слэнг), а согласно документации и примерам производителя микроконтроллера или создателя ИДЕ для оного. В Кейл, например полно примеров готовых разнообразных проектов.
з.ы. однако начинаем кругам иходить по пройденому материалу, тут, пожалуй пока и остановлюсь...


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Вт мар 24, 2020 09:44:05 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15483
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Да как раз не "кругами"...
Вопрос действительно заслуживает хорошей разборки.
:beer:
Расширение *.asm имеет право иметь файлик, исходник которого самодостаточен для автономной обработки компилятором.
При том, что у данного модуля (если использхуется механизм инклуд -вставок) не будет обращений к внешним меткам/данным основного проекта.
Т.е. после подключения текст файла не подвергается дополнительной ручной обработке.
В случае с классикой и линкером ручная обработка не потребуется.
А вот при инклуд -вставке... дело посложнее.
В каждом проекте имеются секции "холодной" и "горячей" инициализации (а также секция объявленных имен для констант, данных, РСФ).
Типичное расположение таких секций в начале главного файла проекта.
У каждого сложного модуля (библиотечный *.asm файл) также могут имется соответствующие разделы.
Допустимы два варианта...
Выделение соответствующих участков из модуля с их последующим размещением в соответствующих разделах главного файла проекта (и закрытием таковых в модуле методом превращения в комментарий).
После такой доработки файл модуля уже не может быть обработан компилятором автономно - и естественно не может иметь расширение *.asm - вот его и меняем на *.txt для копии размещенной в папке проекта (в папке библиотек исходный файл остается без изменений и сохраняет расширение *.asm).
И второй вариант - в самом модуле добавляется флаг контроля выполнения процедуры начальной инициализации.
Тогда модуль сохраняет возможность автономной обработки компилятором и ессно оставляем ему расширение *.asm...
Однако... во многих случаях и лишний флаг в ОЗУ штука не слишком надежная и инициализация в произвольном месте кода программы нежелательна...
Вышеуказанные проблемы - группировка разных по назначению участков кодов модулей в единых секциях (кода, данных, еепром) проекта решаются именно при раздельной обработке каждого файла с последующей передачей результатов редактору связей.
К примеру в
.code
присутствуют сегменты hard_init, soft_init и main_soft....
Но... то уже несколько более навороченные компиляторы требуются.
А в простом случае - используем заложенные в имеющихся возможности.
:roll:
Вобщем стоит внимательно поразмыслить/покопать и сформулировать...
:write:

ШИПЕНИЕ по поводу - "не надо заниматься" вряд-ли оправдывает возможности получить при помощи стандартного набора простых средств результат равный простому применению более навороченного софта.
:beer:


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Вт мар 24, 2020 10:00:09 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Вопрос действительно заслуживает хорошей разборки.

хорошая разборка требует хорошего инструмента - лучше выбросить устаревший убогий Avrasm2 и взять нормальный ассемблер с линкером GNU-AS.
Для затравки:
http://www.count-zero.ru/2018/gnu_assembler/
Там поначалу рассмотрен чистый ассемблер


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Вт мар 24, 2020 10:10:50 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2121
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18476
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
oleg110592 писал(а):
взять нормальный ассемблер с линкером GNU-AS.
согласен и давно это советую всем, кто не может расстаться с ассемблером.

однако, в плане ковыряния и оптимизации вполне можно найти себе занятие и на чистом Си (GCC), например, использовать глобальные регистровые переменные... и это может дать очень интересный результат - поле для ковыряний обширнейшее! :))) не хуже, чем на "чистом" асме

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
 Заголовок сообщения: Re: Котуинко
СообщениеДобавлено: Вт мар 24, 2020 10:49:30 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15483
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
И далее...
8)
К вопросу о том "КТО СПРЫГНУЛ"
:wink:
:tea:

Я ж и с тем, что есть вполне необходимый результат получаю.
:beer:

Собственно по Си - это разговор отдельный. Там еще не все из интересного выяснено - копаемся по мере возникновения вопросов.
8)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 2383 ]     ... , , , 46, , , ...  

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y