Модификация операндов машинной команды при линковке

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Модификация операндов машинной команды при линковке

Сообщение BOB51 »

"Код ведь приведен. И даже чайнику должно быть понятно, что программным SPI тут и не пахнет "
УПС...
А к чему тогда вообще вопрос задавать, если в Вашем примере ИСКЛЮЧИТЕЛЬНО АППАРАТНЫЙ SPI используется?
Неуж-то Вам примерещилось, что АППАРАТНУЮ (СХЕМОТЕХНИЧЕСКИ ВЫПОЛНЕННУЮ ПРИ ИЗГОТОВЛЕНИИ КРИСТАЛЛА) КОНФИГУРАЦИЮ МОЖНО ПРОГРАММНО ИЗМЕНИТЬ?
Это ежли б в описании аппаратного модуля имелось сообщение о возможности "ремаппинга" выводов - тогда еще можно обсуждать.
А иначе - чего при изготовлении сделали - тем и пользуйтесь.
Учите матчасть...
:(
Последний раз редактировалось BOB51 Пт окт 07, 2016 11:53:23, всего редактировалось 1 раз.
Реклама
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Модификация операндов машинной команды при линковке

Сообщение uk8amk »

Как я понял ваша LIB уже идёт в виде скомпилированного объектного кода.
Мне видится несколько решений.
1. Создать несколько вариантов функций обмена данных по числу портов.
например
spi_porta()
spi_portb()
spi_portf()
В коде вызывать нужную.
Этот вариант хорош тем что часть портов отображается только в область SRAM и к ним нужен другой метод RMW.
2. Не пробовал, но предположу что такое возможно. В библиотеку закрыть логику работы с устройством. А низкоуровневые функции подобные
uint8_t st7735_spi_send_byte(uint8_t data, uint8_t status)
оставить открытыми.
Через H/HPP заголовочник библиотеки в define-ах можно прописать настройки аппаратуры, а реализацию функций обмена спрятать подальше от неокрепших умов.
Реклама
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Re: Модификация операндов машинной команды при линковке

Сообщение ptr128 »

BOB51 писал(а):Линкер у ассемблера АВР?
:))
это для ПИК, MCS51 (только не в варианте атмелевского c51asm!!!) линкер отдельной единицей и с некоторым описанием имеется.
В типовой авр-студии сей компонент иначе как "по умолчанию" не используется.
8)
Может там чего в вариациях с СИ - эта область мне неведома.
:sleep:
Пруф:
"Atmel AVR Toolchain is a collection of tools/libraries used to create applications for AVR microcontrollers. This collection includes compiler, assembler, linker and Standard C & math libraries."
http://www.atmel.com/ru/ru/tools/ATMELA ... NDOWS.aspx

Мне не ведомы случаи, когда ассемблер генерит сразу HEX для загрузки. Задача ассемблера сформировать объектный файл для компоновщика.

И с каких пор Atmel запрещает выполнять сборку gnu make я тоже не в курсе )
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Модификация операндов машинной команды при линковке

Сообщение BOB51 »

ptr128 писал(а):...
Мне не ведомы случаи, когда ассемблер генерит сразу HEX для загрузки. Задача ассемблера сформировать объектный файл для компоновщика....
c51asm.exe к примеру
8)
Да и тот же авр ассемблер из самой студии...
:roll:
Последний раз редактировалось BOB51 Пт окт 07, 2016 11:58:39, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Re: Модификация операндов машинной команды при линковке

Сообщение ptr128 »

BOB51 писал(а):А к чему тогда вообще вопрос задавать, если в Вашем примере ИСКЛЮЧИТЕЛЬНО АППАРАТНЫЙ SPI используется?
Учите матчасть...
:(
Это вы учитесь читать. Вопрос был не про сам аппаратный SPI, а о его примении с нестандартной реализацией SPI в ST7735:
"Сам протокол обмена с ST7735 не совсем SPI. Он требует выставления D/C в низкий уровень для команд и в высокий для данных до передачи последнего бита."
И пин, который используется для D/C никак аппаратно не фиксирован. А отрабатывать его надо обязательно после передачи последнего бита предыдущего байта и до начала передачи последнего бита текущего байта.

Добавлено after 6 minutes 30 seconds:
BOB51 писал(а):
ptr128 писал(а):...
Мне не ведомы случаи, когда ассемблер генерит сразу HEX для загрузки.
c51asm.exe к примеру
8)
Да и тот же авр ассемблер из самой студии...
:roll:
Я не утверждал, что таких нет. Я утверждал, что мне не ведомы. Может быть потому, что пользоваться ассемблером, формирующим только не перемещаемые объектные файлы я не хочу и не буду )
Вот только ручной компоновки кода мне не хватало еще )
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Модификация операндов машинной команды при линковке

Сообщение BOB51 »

Тогда это уже "гибрид" аппаратного модуля и программной "доработки" - по факту программный вариант исполнения.
8)
Поразмышляйте в вопросах алгоритма исполнения протокола.
Ибо разговоры о "невозможном" ногодрыге при опоре на аппаратный функционал есть... как бы подипломатичнее...
Ведь для обсуждения выставлена не конкретная схема, а вопрос возможности проведения операций в принципе.
А "в принципе" - вполне и побитовая ШИМ манипуляция на высоких скоростях получается.
8)
Реклама
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Re: Модификация операндов машинной команды при линковке

Сообщение ptr128 »

uk8amk писал(а): 1. Создать несколько вариантов функций обмена данных по числу портов.
Похоже и впрямь, наиболее разумное решение. Спасибо!
Линкер все равно все ненужные должен будет выкинуть.
uk8amk писал(а): 2. uint8_t st7735_spi_send_byte(uint8_t data, uint8_t status)
оставить открытыми.
Мне не жалко и все открытым оставлять. Меня смущает время сборки всего барахла из исходников.

Добавлено after 4 minutes 49 seconds:
BOB51 писал(а):Тогда это уже "гибрид" аппаратного модуля и программной "доработки" - по факту программный вариант исполнения.
Тогда Ваше утверждени к любому коду на МК относиться ))) Софистика...
BOB51 писал(а): Ибо разговоры о "невозможном" ногодрыге при опоре на аппаратный функционал есть... как бы подипломатичнее...
Ведь для обсуждения выставлена не конкретная схема, а вопрос возможности проведения операций в принципе.
А "в принципе" - вполне и побитовая ШИМ манипуляция на высоких скоростях получается.
8)
Правильно. Есть рабочий код, который полностью удовлетворяет выставленным к нему условиям, но плохо приспособленный для публикации и не приспособленный к использованию в виде статической библиотеки. И я хочу решить именно озвученные вопросы, а не как полностью переписать с "невозможным ногодрыгом" уже рабочий код, только для удовлетворения последних двух озвученных условий.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Модификация операндов машинной команды при линковке

Сообщение Аlex »

Вопрос был:
"Как понятно для того, кто будет использовать твою библиотеку, подменять, например, номера битов операнда в конкретных машинных командах, в зависимости от желаний пользователя?"
А лишняя демагогия возникла как раз когда Вы написали "Как вариант - таблица с масками + лог. операции."
Вы сами себя хоть слышите ? Чем мой ответ - не ответ на Ваш вопрос ? :facepalm:
По поводу демагогий, ещё раз повторю :
Так что, ставьте правильно задачу, чтобы Вас понимали и не разводили лишних демагогий.
В себе проблему нужно искать, в первую очередь, а не в тех, кто Вас не понимает.

Колдуйте дальше, умник вы наш... От темы отхожу...
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Модификация операндов машинной команды при линковке

Сообщение BOB51 »

ptr128 писал(а):...
Я не утверждал, что таких нет. Я утверждал, что мне не ведомы. Может быть потому, что пользоваться ассемблером, формирующим только не перемещаемые объектные файлы я не хочу и не буду )
Вот только ручной компоновки кода мне не хватало еще )
Воть как раз и ошибка - указанные компиляторы вполне успешно работают с перемещаемыми блоками.
Причем автоматически их компонуют по заданным в исходнике условиям.
Одначе сгенерированный *.hex или *.bin файл как правило имеет определенное место размещения кода.
8)

А вопрос создания библиотек в СИ - то более к ARV
:beer:
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Re: Модификация операндов машинной команды при линковке

Сообщение ptr128 »

Аlex писал(а):
Вопрос был:
"Как понятно для того, кто будет использовать твою библиотеку, подменять, например, номера битов операнда в конкретных машинных командах, в зависимости от желаний пользователя?"
А лишняя демагогия возникла как раз когда Вы написали "Как вариант - таблица с масками + лог. операции."
Вы сами себя хоть слышите ? Чем мой ответ - не ответ на Ваш вопрос ? :facepalm:
А Вы себя слышите? На вопрос о том, как подменить номера битов в операнде команды Вы предлагаете от команд работы с битами отказаться.

Добавлено after 5 minutes 26 seconds:
BOB51 писал(а):
ptr128 писал(а):...
перемещаемые объектные файлы
Воть как раз и ошибка - указанные компиляторы вполне успешно работают с перемещаемыми блоками.
Вам не кажется, что перемещаемые блоки в исходном коде и перемещаемые объектные файлы - это совершенно различные понятия?
Когда у меня проект из нескольких сот исходных файлов мне на фиг не нужно, чтобы заново компилились все. Одно дело Gentoo скомпилить раз в несколько месяцев ночью на трех хостах чреез distcc, а совсем другое дело за час работы 10% времени потерять в ожидании компиляции всего барахла.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Модификация операндов машинной команды при линковке

Сообщение BOB51 »

Вполне логичное решение - сменить алгоритм для улучшения его функций и транспортабельности.
8)
Так это МИКРОКОНТРОЛЛЕРЫ, а в них перемещаемых *.hex прошивок (т.е одинаково прошиваемых в разные адресные участки ПЗУ) просто не бывает в принципе.
Тут каждая прошивка существует только для своей области адресов. Так что от перекомпиляции при изменении содержимого исходника уйти вряд-ли удастся.
:wink:
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Re: Модификация операндов машинной команды при линковке

Сообщение ptr128 »

BOB51 писал(а):Вполне логичное решение - сменить алгоритм для улучшения его функций и транспортабельности.
Зависит от приоритетов. Ухудшать параметры производительности алгоритма я не намерен категорически. О чем уже писал не раз.
BOB51 писал(а): Так это МИКРОКОНТРОЛЛЕРЫ, а в них перемещаемых *.hex прошивок (т.е одинаково прошиваемых в разные адресные участки ПЗУ) просто не бывает в принципе.
Тут каждая прошивка существует только для своей области адресов. Так что от перекомпиляции при изменении содержимого исходника уйти вряд-ли удастся.
Жаль мне Вас, если вы не понимаете разницу между тремя совершенно различными вещами:
1. Перемещаемый исполняемый файл (прошивка)
2. Перемещаемый объектный файл
3. Перемещаемый блок исходного кода

Мне совершенно не нужно для МК первое. Но мне нужно второе, чтобы не перекомпилировать целиком всю бибилиотеку при каждой правке кода, эту библиотеку использующего.

А от перекомпиляции я ушел, ценой написания скрипта для LD, о чем писал выше. Просто мне этот вариант не нравится своей сложностью и в использовании, и в поддержке.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Модификация операндов машинной команды при линковке

Сообщение BOB51 »

Люблю "тягать мыша за хвост"
:))
ptr128
мож мнеу как-то не слишком понимаемо... НО
воть собственно Ваше весьма здравое начало:

ld some_reg, X ; 2
ori some_reg, some_mask ; 1
st X, some_reg ; 2

адрес порта подставляется перед вызовом в Хh:Xl, что дает возможность указать любой из портов
в режиме "отображения на память".
Только вот модифицируемая маска вывода должна быть предварительно
(так же как и адрес порта) загружена в регистр рон some_mask, а не представлять собой константу, встроенную в код команды.
Итогом имеем два произвольно модифицируемых параметра перед вызовом подпрограммы
воть в таком виде:

ld some_reg, X ; 2
or some_reg, some_mask ; 1
st X, some_reg ; 2

это как ОДИН ИЗ вариантов решения... :roll:
И нафига там усяки "скрипты"?
Ежли не лезть в соревнование вида "у кого больше"
:))
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Re: Модификация операндов машинной команды при линковке

Сообщение ptr128 »

BOB51 писал(а): воть собственно Ваше весьма здравое начало:
Беда с этим началом в том, что с ним получается 17 тактов. На один такт больше, чем у меня есть. Потому так и не хочу. 13% потери в скорости (пропуск одного такта SPI) для меня много.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Модификация операндов машинной команды при линковке

Сообщение BOB51 »

Тогда с потерей объёма ПЗУ и некоторой переделкой алгоритма - пишем несколько вариантов с жестким указанием того порта, а выборку текущего варианта выполняем условным векторным переходом по указателю - ijmp/icall.
Принцип подобно вот такому алгоритму http://radiokot.ru/forum/viewtopic.php? ... 7#p2858887
8)
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Re: Модификация операндов машинной команды при линковке

Сообщение ptr128 »

BOB51 писал(а):Тогда с потерей объёма ПЗУ и некоторой переделкой алгоритма - пишем несколько вариантов с жестким указанием того порта, а выборку текущего варианта выполняем условным векторным переходом по указателю - ijmp/icall.
Принцип подобно вот такому алгоритму http://radiokot.ru/forum/viewtopic.php? ... 7#p2858887
8)
А это именно то, что и предложил uk8amk, за что и получил от меня "спасибо" )
На самом деле, можно сделать это настолько корректно, что LD сам отоптимизирует код на объектном уровне, выкинув не используемые функции.

И вообще спасибо Вам, что потратили на нуба, который почти 20 лет не программировал МК, столько времени )
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Модификация операндов машинной команды при линковке

Сообщение BOB51 »

Ну уж ежли это "чисто аппаратный SPI" (а не USI) то кто мешает утилитку
ld some_reg, X ; 2
or some_reg, some_mask ; 1
st X, some_reg ; 2
использовать параллельно с аппаратным исполнением приема/передачи при ведущем МК?
Вида
запускаем передатчик (в запасе 2*8 тактов системы при максимальной скорости или 4*8 при номинале)
выполняем предподготовку данных/служебные операции
выполняем выравнивающую задержку (если осталось чего лишнего)
выполняем "хитру утилитку"
считываем/грузим данные и по потребностям переход
не используя прерывание а согласно подстановки соответствующих флагов в указатель.
:roll:
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Re: Модификация операндов машинной команды при линковке

Сообщение ptr128 »

BOB51 писал(а):параллельно с аппаратным исполнением приема/передачи при ведущем МК?
Вы, боюсь, будете смеятся, но задача на одной Ардуино сделать пример игры типа Арканоид детям, для дальнейшего изучения и развития. Попытка реализовать даже просто движение спрайта на стандартных библиотеках с треском провалилась. FPS в интервале 10-20 для игрушки не приемлем и читать фреймбуфер эти библиотеки не позволяют. А после переписывания и работы с SPI и работы с ST7735 я минимальный FPS получил почти 25. А сам спрайт могу гонять с FPS более сотни. На видео выше спрайт летает с задержкой по 2 миллисекунды между перемещениями. Причем в этом примере реализованы перемещения только по горизонтали и вертикали. Если добавить еще и диагональное перемещение, то задержку надо будет увеличивать.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Модификация операндов машинной команды при линковке

Сообщение BOB51 »

Тогда может лучше перейти к варианту "мозги + видеокарта" на основе пары МК, каждый из которых выполняет собственную задачу?
:roll:
Да и сам ST7735S вроде бы имеет параллельный 8080-совместимый интерфейс
"-Parallel 8080-series MCU Interface
(8-bit, 9-bit, 16-bit & 18-bit)
..."
- гораздо выгоднее применить АВРку с поддержкой интерфейса внешнего ОЗУ...
:dont_know:
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Re: Модификация операндов машинной команды при линковке

Сообщение ptr128 »

BOB51 писал(а):Тогда может лучше перейти к варианту "мозги + видеокарта" на основе пары МК, каждый из которых выполняет собственную задачу?
:roll:
Задача скорее методическая, чем практическая. Дети не раз жаловались, на то, какая Ардуино медленная. И когда я отвечал, что проблема не в Ардуино, а в коде, веры в глазах не видел. Но уже этот недоделаный пример оказал огромное влияние на детское восприятие возможностей 8-мибитного МК. Появилось желание учиться писать эффективные программы. Хочется зафиксировать результат )

Потом будет больше. И STM32 закуплены, и TFT с параллельным интерфейсом и тачскрином. Но сейчас цель научить программировать хорошо, а не как в виндах, когда программа поедая сотни мегабайт памяти и ресурсы четырех несколько гигагерцовых ядер, выполняет свою задачу со скоростью, которую аналогичная программа обеспечивала на древней 286-ой )
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Ответить

Вернуться в «Разные вопросы по МК»