А знаете ли вы што: Ассемблер Arduino IDE
- Войдите на сайт для отправки комментариев
С удивлением недавно узнал, что оказывается, если создать файл с расширением .S (именно с большой S) и покласть его в директорию с .ino, то в этом файле можно невозбранно писать текст не на встроенном в Си ассемблере, а на "чистом", без всяких кавычек и прочей х-ни.
Создайте какой нить простенький проект в Arduino IDE. Потом в любом текстовом редакторе наберите
#include <avr\io.h> .global MyAsmFunc MyAsmFunc: ldi r24,lo8(str_01) ; пхаем в возвращаемые регистры ldi r25,hi8(str_01) ; адрес строки лежащей по метке str_01 ret ; Эта строка валяеца в PROGMEM str_01: .asciz "My unique string in PROGMEM"
и сохраните его как AsmTest.S в той же директории, что и файл проекта .ino
В самом проекте напишите
/* Name: AsmTest.ino Created: 23.01.2020 14:36:10 Author: DtS */ #include <Arduino.h> // Функции из ассемблера не подвергаюца "маскарадингу" лжывого С++ // поэтому они мало того, что "extern", дак еще и "extern "C"" // extern "C" { extern __FlashStringHelper *MyAsmFunc(void); // функция должна возвратить указатель на строку в PROGMEM } void setup() { Serial.begin(115200); delay(250); Serial.println(F("AsmTest started...\n")); // спецификатор %s печатает строку из RAM, а %S - из PROGMEM // Serial.println(MyAsmFunc()); // печать строки из PROGMEM } void loop() { }
ничего никуда подключать не надо, компилятор как-то сам понимает, что AsmTest тоже надо транслировать.
Запустите и посмотрите что получица.
Мне счас приходится ковыряться с AVR ассемблером, поэтому буду разбираться, если интересно, буду писать заметки.
Еще как интересно!
Наконец-то все любители ассемблера начнут писать на нём и перестанут мучать вопросами "А что на Си так долго/непонятно/тупо?"
С удивлением недавно узнал, что оказывается... бла-бла-бла
Дед! Ты ведь знаешь, что я любя? ;))))
"На четвертый день Зоркий Глаз обнаружил, что у камеры нет одной стены!"
"На четвертый день Зоркий Глаз обнаружил, что у камеры нет одной стены!"
Дак а я знаю. :) Пока не припёрло, чота и не озадачивался. Но и писать в таком ключе
где хрен чо поймешь мне несколько неконфортна. Да еще оптимизатор всё норовит выкинуть нахрен.
Ф нашем комиляторе (avr-gcc) макрос __extension__ определен как пустой. Ты по инерции пишешь супер переносимый код? ;)))) Или скопировал кусок из avr-libc ????
Брось этих глупостев!
Или скопировал кусок из avr-libc ????
естес-сно скопировал первое что нашел, для примера. Такой "встроенный" ассемблер у мня ничего, кроме идиосинкразии не вызывает, чота. :)
Наконец-то все любители ассемблера начнут писать на нём и перестанут мучать вопросами "А что на Си так долго/непонятно/тупо?"
это же надо щи читать, в какие регистры что можно пихать, а чего нельзя, так, что наврядли )))