Встроенная сборка

Саймонф
Ср 15 июня 2016 г., 21:05
Любой получил какие -либо примеры встроенной сборки в Stmduino32?

Предпочтительно прохождение Int и возвращение Int.

Rogerclark
Ср 15 июня 2016 г., 21:24
Я гуглил и нашел это

http: // www.Ethernut.de/en/documents/ram-inline-asm.HTML


Ядро имеет некоторую сборку IMLINE, но это просто инструкции, которые будут действовать в качестве задержек.

Существует также активный поток с некоторым кодом FFT в файле ассемблера, вы можете посмотреть, но он не задокументирован, поэтому его трудно читать и, вероятно, далеко за сложные.


КСТАТИ. Что вы собираетесь кодировать в ассемблере ?

Саймонф
Ср 15 июня 2016 г. 22:34
Rogerclark написал:Я гуглил и нашел это

http: // www.Ethernut.de/en/documents/ram-inline-asm.HTML


Ядро имеет некоторую сборку IMLINE, но это просто инструкции, которые будут действовать в качестве задержек.

Существует также активный поток с некоторым кодом FFT в файле ассемблера, вы можете посмотреть, но он не задокументирован, поэтому его трудно читать и, вероятно, далеко за сложные.


КСТАТИ. Что вы собираетесь кодировать в ассемблере ?

Rogerclark
Ср 15 июня 2016 г., 11:12
Я только что попробовал пример с этой страницы, и он работает хорошо
RTC has set the system time 19:57:45 8/5/2018 SETTING TIME TO 19 0:00:19 1/1/1970 0:00:21 1/1/1970

Rogerclark
Чт 16 июня 2016 г., 12:17
На самом деле, глядя на код и то, как компилятор обрабатывает без подписи длинной и без знаки Int, а Unsigned Long - это 4 байта, что такое же, как и Unsigned int.

Итак, я изменил код, чтобы использовать Unsigned Int, и он все еще работает нормально
SPIClass::setModule(int spi_num) { switch (spi_num) { #if BOARD_NR_SPI >= 1 case 1: this->spi_d = SPI1; break; #endif #if BOARD_NR_SPI >= 2 case 2: this->spi_d = SPI2; break; #endif #if BOARD_NR_SPI >= 3 case 3: this->spi_d = SPI3; break; #endif default: ASSERT(0); } }

ZMEMW16
Чт 16 июня 2016 г., 10:44
В этом фрагменте кода эта ссылка предназначена на страницу довольно всеобъемлющих примеров, включая несколько переменных и регистрации использования.

http: // www.Ethernut.de/en/documents/ram-inline-asm.HTML

и ссылка в нижних точках с документацией GCC Suite, включая Historial
Я уже вытащил 4.8.5. Теперь о чтении этого : D

http: // gcc.гну.org/onlinedocs/

Стивен

Rogerclark
Чт 16 июня 2016 г., 11:30 утра
ZMEMW16 написал:В этом фрагменте кода эта ссылка предназначена на страницу довольно всеобъемлющих примеров, включая несколько переменных и регистрации использования.
http: // www.Ethernut.de/en/documents/ram-inline-asm.HTML
Стивен

ZMEMW16
Чт 16 июня 2016 12:28
Я пытался отметить, что в дальнейшем появляются примеры, расширяющие конкретные элементы, которые вы упомянули в своем посте, также и OP знает, что, когда он пошел туда, он очень полезен.

Стивен

Rogerclark
Чт 16 июня 2016 г., 21:30
ХОРОШО

Я надеялся, что ОП прочтет всю страницу.

В основном я просто хотел проверить, действительно ли простой пример будет работать с STM32 и Arduino IDE.

Я добавлю пример в репо, в фиктивной библиотеке, которая содержит примеры

Саймонф
Пт 17 июня 2016 г. 1:09
Что ж, у меня было некоторое время для себя, не по уважительной причине атака камней убийственных почек.

Должен попробовать какую -нибудь сборку рук, только что воспроизвел то, что я сделал 38 лет назад в 6502 Assembler

Квадратная рутина
static const unsigned long g_ulSSIPort[] = { #ifdef TARGET_IS_BLIZZARD_RB1 GPIO_PORTA_BASE, GPIO_PORTF_BASE, GPIO_PORTB_BASE, GPIO_PORTD_BASE #else #ifdef __TM4C129XNCZAD__ GPIO_PORTA_BASE, GPIO_PORTB_BASE, GPIO_PORTD_BASE, GPIO_PORTF_BASE, GPIO_PORTG_BASE, GPIO_PORTQ_BASE #endif #ifdef __TM4C1294NCPDT__ GPIO_PORTA_BASE, GPIO_PORTB_BASE, GPIO_PORTD_BASE, GPIO_PORTF_BASE, GPIO_PORTQ_BASE #endif #endif };

Rogerclark
Пт 17 июня 2016 г. 3:55 утра
Спасибо

Я думаю, что SQRT Func будет полезен с кодом FFT, который находится в другом потоке.

Ну, я полагаю, что в этом случае было бы лучше, если бы ассемблер FFT только что вернул результат Pythag, а не возвращал реальные и мнимые ценности, но его чужой проект и уже достаточно быстро ;-)

Саймонф
Вт 26 июля 2016 г. 2:06 утра
Ну, я сделал еще одну трещину и сумел получить 32 -битный квадратный корень до 2. Относительные филиалы намного быстрее, чем абсолютные, но могут идти вперед, если я не читаю это неправильно.
static const unsigned long g_ulSSIPins[] = { #ifdef TARGET_IS_BLIZZARD_RB1 GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 #else #ifdef __TM4C129XNCZAD__ GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5, GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_4 | GPIO_PIN_5, GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0, GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0, GPIO_PIN_7 | GPIO_PIN_6 | GPIO_PIN_5 | GPIO_PIN_4, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 #endif #ifdef __TM4C1294NCPDT__ GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5, GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_4 | GPIO_PIN_5, GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0, GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 #endif #endif };

DFU Converter

iwdg_init () и iwdg_feed ()