Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

NoName
2015-01-12 20:16:05

Python                  RPi.GPIO                   0.3.0 / August 1, 2012                                44 kHz
C                         Native library             not applicable / July 3 and August 14, 2012     14-22 MHz

Python в 500 медленее ) в идеальных условиях конечно.

VladV
2015-01-12 20:07:47

Python  RPi.GPIO   - 44 kHz

Как такое может быть? Пайтон это по сути и есть есть, он построен на СИ, как он может работать быстрее чем СИ? Сама библиотека RPi.GPIO написана на СИ  yikes

TheCluster
2014-11-01 21:30:08

Самая быстрая работа с любыми I/O будет только если драйвер писать. Код, работающий в драйвере (читай - на уровне ядра операционной системы) может напрямую работать со всеми доступными аппаратными интерфейсами. Код, запускаемый в user space, напрямую обращаться к железу обычно не может (все это применимо к сложным процессорным архитектурам - x86, x86_64, ARM) и для работы вызывает различные API, предоставляемые ядром ОС. Вызов API, передача параметров, переключение контекста (user space -> kernel space), выполнение кода ядра, возвращение управления обратно в программу (снова переключение контекста kernel space -> user space), все это занимает такты процессора и влияет на скорость работы с любыми I/O операциями.

NoName
2014-07-10 12:14:20

провокационный вопрос )
боюсь что нужно "курить" ядро гну линуха

мои соображения:
скрипты - раз.  ( система должна понять что от нее требуется, обработка текста, не самый  быстрый процесс )
низкий приоритет выполнения скрипта - два. (мои домыслы )
все операции по записи в файл выполняются ядром,  по мере возможности. Опять же непонятно с каким приоритетом.

но есть очень хорошие + : гирлянду на елку  можно прописать с консоли.

Андрей
2014-07-10 11:50:04

Ого, а чего такой медленный доступ из-под shell?

NoName
2014-07-09 15:50:30

Всем привет,  есть Raspberry Pi model B, устройство интересное, многофункциональное и не дорогое, + включил и работает, что тоже очень важно )
музыку послушали, мультики посмотрели,  нужно что то посущественней -  например моторами покрутить, картинки показать )
для таких дел есть  GPIO ( напоминаю нагружать ноги запрещено, используйте шилд   )
вариантов "подрыгать" ногами  много , давайте рассмотрим скорость  работы библиотек
в таблице максимально возможные частоты условного меандра
Language                Library                    Version / tested                                         Square wave
Shell                      /proc/mem access     not applicable / July 3, 2012                         3.4 kHz
Python                  RPi.GPIO                   0.3.0 / August 1, 2012                                44 kHz
Python                  wiringPi                    github @ August 14, 2012                            20 kHz
C                         Native library             not applicable / July 3 and August 14, 2012     14-22 MHz
C                         BCM 2835                 1.3? / July 3, 2012                                      4.7 – 5.1 MHz
C                         wiringPi                     not available / August 14, 2012                    6.9 – 7.1 MHz
Perl                      BCM 2835                 1.0 / July 3, 2012                                       35 kHz
источник: Benchmarking Raspberry Pi GPIO Speed
библиотеки хороши, код  легко читаем, легко и быстро писать, но скорость работы оставляет желать лучшего.
Поэтому только Native, только "хардкор" )

проверил, действительно,   20MHz на ура выдает
скорость работы важна, энергоносители нужно экономить, железяка должна греться поменьше, да и когда есть запас по скорости можно  легко реализовывать "фичи"  )
например:  добавим ка градаций серого к ч/б индикатору  (LCD Nokia 3310) :
mini_2014-05-04-16_56_49.jpeg 

к делу:
данный пример - простейшее "ногодрыганье", но на "малине" и не со стандартным железом 
была необходимость выбрать индикатор, простой, недорогой, малопотребляюший, удобный по монтажу,    выбор пал на RDX0032
особо то времени не было, за основу был взят проект  UC1601s
выражаю благодарность   Геннадию Чернову, основа запустилась сразу.

далее мелкие изменения в коде, для более легкого переноса примера на другие MCU
Индикатор подключается используя шину I2C

в моём примере он не совсем корректно подключен к GPIO, у меня была колодка заточенная под SPI на нее и подключил.
подключение простое (см. RDX0120 ):
Подключение индикаторов:

где:
RST pin 25
SCK pin 11
SDA pin 9

пример для более удобного ( мне ) старта реализован в среде QT 4.8.2.

выбор среды пал на QT по причине кроссплатформенности + я его изучаю  в фоновом режиме )
интерфейс удобный, подсветка идеальна )
установка QT
sudo apt-get install qt4-dev-tools
sudo apt-get install qtcreator
sudo apt-get install gcc
также нужно настроить toolchain

результат теста:


исходники посмотреть, UC1601s_LCD128x32 rev1.00 (30.05.2014)    по хорошему нужно переделать на hardware I2C + DMA
пример выводит на дисплей среднюю нагрузку из top

getloadavg(load, 3)

getloadavg возвращает число процессов в системной очереди, усредненное по разным периодам времени, выводит 3 значения, представляя средние данные за последние 1, 5 и 15 минут соответственно. 

управление "ногами"

    SDAT_HI;  SDAT_OUT;       /* SDAT = 1 */
    SCLK_HI;                         /* SCLK = 1 */
    SDAT_LO;                        /* SDAT = 0 */
    SCLK_LO;                        /* SCLK = 0 */

где

#define  SCLK_LO GPIO_CLR = ( 1 << SCK)
#define  SCLK_HI GPIO_SET = ( 1 << SCK)

#define RST 25
#define SCK 11
#define SDA 9

#define GPIO_SET    *(gpio+7)  // sets   bits which are 1 ignores bits which are 0
#define GPIO_CLR    *(gpio+10) // clears bits which are 1 ignores bits which are 0
см. BCM2835-ARM-Peripherals.pdf

там же документация на индикатор
RDX0032.pdf                          - общий вид LCD
uc1601s_a1.25.pdf                 - описание драйвера LCD
BCM2835-ARM-Peripherals.pdf   - BCM2835 contains the following peripherals which may safely be accessed by the ARM:
•  Timers
•  Interrupt controller
•  GPIO
•  USB
•  PCM / I2S
•  DMA controller
•  I2C master
•  I2C / SPI slave
•  SPI0, SPI1, SPI2
•  PWM
•  UART0, UART1

Підвал форуму