Если есть подозрение, что компилятор оптимизирован для кортекс-а9, так что мешает это проверить? Собрали код ресурсоёмкий, например асимметричное шифрование на эллиптических кривых (ECDSA), на одном и другом компиляторе, и сравнили бы производительность. П.С. Осмелюсь высказать своё мнение, В процессе разработки, сборка и выполнение тест-кейсов выполняется на тех средствах, что удобны для разработчика. Если железо позволяет, это как раз наш случай, финальная сборка и тест-кейсы выполняется на реальном железе. К сожалению, не всегда достаточно ресурсов для выполнения сборки на реальном железе
ну примерно как на Атмеге328 - через Вайринг 70 КГц, через регистры - 8 МГц Тем не менее в подавляющем большинстве случаев скорости digitalWrite() вполне хватает. Так что питон не так и плох, я ожидал худшего в сравнении С/С++
залез на малинку, а там.... Код (Bash): gcc version 4.9.2 (Raspbian 4.9.2-10+deb8u2) а из какого магазина? Из родного доставка кусается))
Если атмеги стм-ки можно назвать realtime, то линуксовые одноплатники роутеры и т.п. как-то с realtime-мом не очень получается. Смотрю логическим анализатором на ногодрыг 5-6 мегабит и вижу пропуски до сотен наносекунд микросекунд. Код (Bash): pi@raspberrypi:~ $ cat /etc/os-release PRETTY_NAME="Raspbian GNU/Linux 10 (buster)" NAME="Raspbian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=raspbian ID_LIKE=debian HOME_URL="http://www.raspbian.org/" SUPPORT_URL="http://www.raspbian.org/RaspbianForums" BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs" pi@raspberrypi:~ $ gcc --version gcc (Raspbian 8.3.0-6+rpi1) 8.3.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. pi@raspberrypi:~ $ cat /proc/device-tree/model Raspberry Pi 3 Model B Rev 1.2 onpad.ru Только одну штуку купил, на пробу.
Так Unix-подобные системы и не были никогда real time. Тут просто нужно смотреть на систему, и допустимые задержки. Может для чего-то они будут и real time.
Ну, если работать на уровне user space, то с real time все очень печально. Ядро в любой момент может положить на user process с прибором, даже если он высокоприоритетный, и заняться своими внутренними делами. Несколько лучше обстоит дело если работать с прерываниями на уровне драйверов (Kernel space), но всегда могут случиться и более высокоприоритные прерывания и порушить тайминги. А запрещать в драйвере прерывания больше чем на несколько микросекунд крайне не рекомендуется. И вообще на уровне драйверо порушить всю систему плевое дело. Поэтому сейчас стало модным делать комбинированные системы на чипе, где на ряду с Cortex-А ядрами для Линкукса или, прости господи, WinCE есть еще и одно или два Cortex-M ядра где можно под FreeRTOS или вообще без ОС заниматься реалтаймом. Общаются они по shared memory.
Просто порой, читая пОсты о том что, на некоторых mcu производительность пониже, давайте возьмем лучше другой чип, у которого и mmu есть и производительность выше, поднимем на нем линукс и получим другое качество. А получается если на M3 не было проблем с spi в режиме slave на одном мегабите, то на линуксовом контроллере реализуя программный spi для slave режима, даже на мегабите получаем ошибки. Летом вышел i.MX7 пока до нас не доехал, хотелось бы попробовать, без него все какой-то колхоз получается, для M4 делаем обвязку устанавливая медиатеки (+память +флешка +стекляшка).
а что так? В промышленном оборудовании всё то, что имеет поддержку CodeSys, внутри имеет WinCE. Овен, beckhof и иже с ним...
Получил nanopineo2, был удивлен архитектурой. На raspberrypi и nanopineo2 вроде-бы Cortex-A53, только один armv7l а другой aarch64 Спойлер: lscpu Код (C): pi@raspberrypi:~ $ lscpu Architecture: armv7l Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 4 Socket(s): 1 Vendor ID: ARM Model: 4 Model name: Cortex-A53 Stepping: r0p4 CPU max MHz: 1200.0000 CPU min MHz: 600.0000 BogoMIPS: 38.40 Flags: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 alex@nanopineo2:~$ lscpu Architecture: aarch64 Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 4 Socket(s): 1 NUMA node(s): 1 Vendor ID: ARM Model: 4 Model name: Cortex-A53 Stepping: r0p4 CPU max MHz: 1008.0000 CPU min MHz: 120.0000 BogoMIPS: 48.00 NUMA node0 CPU(s): 0-3 Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid Решил сравнить производительность используя криптографию на эллиптических кривых, вычисление и проверка подписи, взял код с гитхаба и построил маленький примерчик. Спойлер: main.c Код (C): #include <stdio.h> #include <time.h> #include "ecc.h" int main() { time_t t = time(NULL); int n; for (n = 0; n < 250; n++) { uint8_t p_publicKey[ECC_BYTES+1]; uint8_t p_privateKey[ECC_BYTES]; uint8_t p_secret[ECC_BYTES]; uint8_t p_hash[ECC_BYTES]; uint8_t p_signature[ECC_BYTES*2]; if (ecc_make_key(p_publicKey, p_privateKey) != 1) { puts("ecc_make_key failed"); break; } if (ecdh_shared_secret(p_publicKey, p_privateKey, p_secret) != 1) { puts("ecdh_shared_secret failed"); break; } if (ecdsa_sign(p_privateKey, p_hash, p_signature) != 1) { puts("ecdsa_sign failed"); break; } if (ecdsa_verify(p_publicKey, p_hash, p_signature) != 1) { puts("ecdsa_verify failed"); break; } } printf("elapsed time: %ld\n", time(NULL) - t); return 0; } Собираю и смотрю что получилось на raspberrypi Спойлер: gcc Код (C): pi@raspberrypi:~ $ gcc ecc.c main.c -o test1 pi@raspberrypi:~ $ readelf -h test1 ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: ARM Version: 0x1 Entry point address: 0x10438 Start of program headers: 52 (bytes into file) Start of section headers: 21108 (bytes into file) Flags: 0x5000400, Version5 EABI, hard-float ABI Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 9 Size of section headers: 40 (bytes) Number of section headers: 29 Section header string table index: 28 И на nanopineo2 Спойлер: gcc Код (C): alex@nanopineo2:~$ gcc ecc.c main.c -o test1 alex@nanopineo2:~$ readelf -h test1 ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: DYN (Shared object file) Machine: AArch64 Version: 0x1 Entry point address: 0x7c0 Start of program headers: 64 (bytes into file) Start of section headers: 25904 (bytes into file) Flags: 0x0 Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 9 Size of section headers: 64 (bytes) Number of section headers: 29 Section header string table index: 28 А теперь устроим соревнование Код (Bash): pi@raspberrypi:~ $ ./test1 elapsed time: 57 alex@nanopineo2:~$ ./test1 elapsed time: 25 64-х битный Cortex-A53 одержал победу над 32-х битным Cortex-A53
Летом?? Мы iMX7 в готовых изделиях уже с 16 года используем, а вышел он вообще в 14м кажется. Может ты с iMX8 путаешь?
Летом в новостях CNXSoft читаль статью о массовом производстве, видимо новость немножко тухлая. П.С. Нашел, это был PicoCORE i.MX 7ULP
А такой вопрос: альтернативные функции GPIO контролируются ядром Linux? В исходниках wiringPI вижу обращение к файлу /dev/spidev0.х для включения SPI, а не к /dev/mem с записью в регистр альтернативных значений.
Загрузили драйвер ядра и он смонтировал устройство /dev/spidev0.x а нам захотелось линии spi использовать самостоятельно. А зачем тогда драйвер загружали?? Видимо библиотека wiringPI предназначалась для работы в юзер-спейсе и не предполагалось что у пользователя будет достаточно сил чтоб выгрузить драйвер ядра и работать с регистрами напрямую.
В исходниках драйвера, для армбиан где-то в недрах armbian/build Не понятно зачем вам это? Не устраивает скорость? На малине, старой, ещё с одним ядром, в режиме мастер, на макете с проводами 20см получал скорость 25мегабит, выше сыпались ошибки, это на кадрах в 4к. А на маленьких кадрах и на 40мегабит работало.