Страница 2 из 3
RP2040 как альтернатива
Добавлено: 25 янв 2023, 13:09
ecoins
Ingwar писал(а): 25 янв 2023, 09:16
Провел тест вычислений с флоат - жесточайшее разочарование...
Ingwar писал(а): 25 янв 2023, 09:16
Это фиаско
AVR на максималках (
Да, говорили мне об этом, но как-то не придал значение. Теперь озадачен...
Круг применений сужается... Но не глобально
И это значит, что STM32F4 выходит в лидеры предпочтений для серьезных применений (научные исследования, промышленная автоматизация с двигающими устройствами и пр.).
А еще из доступного есть ST32H7
https://www.compel.ru/lib/146567 (480мГц);
https://aliexpress.ru/item/100500446690 ... 4aa6YHFNRX
Да, очень интересный разработчик (khoin-prog) из Канады. Пишет все основательно и понятно, и в тренде времени Один из его "коньков" - таймеры и прерывания. Много написано для ESP32.
По Wi-Fi для Raspberry Pi Pico тоже есть наработки.
======================
Вы очень основательно и глубоко исследуете возможности контроллеров.
Если чем-то можем быть полезны(чипы, модули, платы, библиотеки) готовы принять посильное участие в поддержке Вашей работы. Нам это очень интересно.
RP2040 как альтернатива
Добавлено: 25 янв 2023, 14:39
Dryundel
Ingwar писал(а): 25 янв 2023, 09:16
Провел тест вычислений с флоат - жесточайшее разочарование...
Точность всего семь знаков!!! Не важно где запятая. Например в результате вычислений получили 1234567,8 и в этом числе 100% число "8" НЕВЕРНОЕ.
А если результат 87654321,01 то НЕВЕРНЫЕ цифры начиная с "1" и далее вправо.
Это фиаско
Попробуйте использовать
double вместо
float.
Есть подозрение, что для RP2040 это не одно и то же.
Ядро Cortex-M0+ не содержит блока вычислений с плавающей запятой. Это эмулируется библиотеками.
RP2040 как альтернатива
Добавлено: 25 янв 2023, 15:42
Ingwar
Dryundel писал(а): 25 янв 2023, 14:39
Попробуйте использовать double вместо float.
Попробую.
ecoins писал(а): 25 янв 2023, 13:09
Вы очень основательно и глубоко исследуете возможности контроллеров.
тут Вы реально "пересаливаете"
Мой уровень начальный (хоть бы не конечный). То, что тестирую под свои конкретные задачи никоим образом не отображает глубину исследования. У нас на форуме есть более "глубокие" специалисты
Жаль, что некоторые из них очень скромны и не радуют нас своими знаниями.
С другой стороны все, до чего дошел сам, гораздо лучше запоминается/понимается и будет хорошим фундаментом для следующих познаний.
Отправлено спустя 26 минут 55 секунд:
Dryundel писал(а): 25 янв 2023, 14:39
Попробуйте использовать double вместо float.
Начал искать как правильно "обозвать" переменные. Добрался до этого
https://github.com/raspberrypi/pico-sdk ... ico_double
И пока не понимаю, какой синтаксис использовать....)
RP2040 как альтернатива
Добавлено: 25 янв 2023, 16:23
Dryundel
[ref]Ingwar[/ref], тупо замени
float на
double в простом вычислительном скетче и проверь правильность на калькуляторе.
Не факт что сработает. Это теоретические измышления.

RP2040 как альтернатива
Добавлено: 25 янв 2023, 16:35
Ingwar
Dryundel писал(а): 25 янв 2023, 16:23
Это теоретические измышления.
Прокатило ))) спасибо. 13 знаков верно.
Щас измерю время расчета, а жалуются - долго считает.
RP2040 как альтернатива
Добавлено: 25 янв 2023, 16:45
Phazz
Тема действительно не для болталки уже ).
RP2040 как альтернатива
Добавлено: 25 янв 2023, 17:38
rw6cm
[ref]Ingwar[/ref],
Точность выше 6 знаков float в FLProg проблематична.
Здесь описывал
Нюансы при создании проекта GPS в FLProg. с чем приходится сталкиваться. может что то понадобиться.
RP2040 как альтернатива
Добавлено: 25 янв 2023, 17:48
Ingwar
Докладываю по математике)
Методика измерения не претендуют на правильность. Замерял деление.
Сначала объявлял тип переменных (числитель, знаменатель, результат одинаковые).
Сразу присвоил числителю и знаменателю значение "1".
Ну а в loop по классике типо такого
Код: Выделить всё
temp_=micros();
_gtv3 = (_gtv2)/(_gtv5);
t_out =micros() - temp_;
Итоги на частоте 133МГц:
без знаковые (byte, int, long) - 12us
знаковые (int, long) - 17us
внимание! float - 16us
duble - 20us
Все измерения имели 100% повторяемость при более 5 попыток каждого.
Отправлено спустя 5 минут 33 секунды:
rw6cm писал(а): 25 янв 2023, 17:38
Здесь описывал Нюансы при создании проекта GPS в FLProg. с чем приходится сталкиваться. может что то понадобиться.
Спасибо. Прошло мимо меня...
RP2040 как альтернатива
Добавлено: 25 янв 2023, 17:54
Dryundel
Ingwar писал(а): 25 янв 2023, 17:42
внимание! float - 16us
duble - 20us
Так, это уже интересно. Если duble тратит больше времени, чем float, вероятно расчеты идут по двойной точности. Уже хорошо.
Ingwar писал(а): 25 янв 2023, 17:42
Докладываю по математике)
А где доклад по математике?
На сколько я помню претензии были к точности расчетов с плавающей точкой.
RP2040 как альтернатива
Добавлено: 25 янв 2023, 17:58
Phazz
[ref]Ingwar[/ref], лучше замерять на большом количестве итераций.
RP2040 как альтернатива
Добавлено: 25 янв 2023, 18:00
Ingwar
Написанные выше результаты нельзя считать верными )))
Сделал измерение с двумя действиями деления.
Данные замера для float увеличились на 2мкс, для double на 4 мкс, для byte на 2мкс, для int на 2мкс, для unsigned long на 2-3 мкс)))
RP2040 как альтернатива
Добавлено: 25 янв 2023, 18:01
Dryundel
rw6cm писал(а): 25 янв 2023, 17:38
Точность выше 6 знаков float в FLProg проблематична.
Виновата не сама FLProg, а то, что в ней нет duble.
На 16 битах ее и не требуется. Точность 6 знаков обусловлена именно этим. А раз ESP32 может давать гораздо выше точность, то и RP2040 теоретически должен.
RP2040 как альтернатива
Добавлено: 25 янв 2023, 18:03
Ingwar
Phazz писал(а): 25 янв 2023, 17:58
лучше замерять на большом количестве итераций.
Ну точнее наверное делать не столько много вычислений, сколько смотреть на изменения при добавлении новых.
ИМХО.
RP2040 как альтернатива
Добавлено: 25 янв 2023, 18:13
Dryundel
Ingwar писал(а): 25 янв 2023, 09:16
Точность всего семь знаков!!! Не важно где запятая...
Так что с точностью при использовании
duble?
RP2040 как альтернатива
Добавлено: 25 янв 2023, 18:18
rw6cm
Dryundel писал(а): 25 янв 2023, 18:01
Виновата не сама FLProg, а то, что в ней нет duble.
Об этом и еще других типах чисел Сергея просили еще с первых версий FLProg, но ...

RP2040 как альтернатива
Добавлено: 25 янв 2023, 18:22
Ingwar
Dryundel писал(а): 25 янв 2023, 18:13
Так что с точностью при использовании duble?
viewtopic.php?t=8404&start=20#p120565
RP2040 как альтернатива
Добавлено: 25 янв 2023, 18:34
Dryundel
Упс. Пропустил.

Сори.
RP2040 как альтернатива
Добавлено: 25 янв 2023, 18:41
Ingwar
Phazz писал(а): 25 янв 2023, 17:58лучше замерять
Думаю что измерять нужно расчетами из даташита)))
Поясню.
Эта конструкция выполняется за 12мкс
Код: Выделить всё
temp_=micros();
_gtv3 = (_gtv2)/(_gtv5);
_gtv3 = (_gtv5)/(_gtv2);
t_out =micros() - temp_;
а эта за 13-14мкс
Код: Выделить всё
temp_=micros();
_gtv3 = (_gtv2)/(_gtv5);
_gtv5 = (_gtv3)/(_gtv2);
t_out =micros() - temp_;
а эта за 14мкс
Код: Выделить всё
temp_=micros();
_gtv3 = (_gtv2)/(_gtv5);
_gtv2 = (_gtv3)/(_gtv5);
t_out =micros() - temp_;
а эта за 12-13мкс
Код: Выделить всё
temp_=micros();
_gtv3 = (_gtv2)/(_gtv5);
_gtv5 = (_gtv3)/(_gtv3);
t_out =micros() - temp_;
RP2040 как альтернатива
Добавлено: 26 янв 2023, 16:51
Ingwar
Правильно ли я понимаю из этого файла
https://github.com/earlephilhower/ardui ... rc/SPI.cpp
что назначить пины SPI я могу только из предложенного перечня (другие по аналогии)?
Код: Выделить всё
bool SPIClassRP2040::setCS(pin_size_t pin) {
constexpr uint32_t valid[2] = { __bitset({1, 5, 17, 21}) /* SPI0 */,
__bitset({9, 13, 25, 29}) /* SPI1 */
};
if ((!_running) && ((1 << pin) & valid[spi_get_index(_spi)])) {
_CS = pin;
return true;
}
if (_running) {
panic("FATAL: Attempting to set SPI%s.CS while running", spi_get_index(_spi) ? "1" : "");
} else {
panic("FATAL: Attempting to set SPI%s.CS to illegal pin %d", spi_get_index(_spi) ? "1" : "", pin);
}
return false;
RP2040 как альтернатива
Добавлено: 26 янв 2023, 17:21
ecoins
Мы исходим из того, что именно так - непосредственно в dataSheet не смотрели.