| Цифровые сигнальные процессоры Вопросы, связанные с применением цифровых сигнальных процессоров: программирование, отладочные средства, алгоритмы... |
Как реализовать что-то типа события в си?
24.05.2013, 15:35
|
|
|
Временная регистрация
Регистрация: 28.05.2007
Сообщений: 95
Сказал спасибо: 30
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Как реализовать что-то типа события в си?
Т.е. вот у меня код релизован на цикле
|
Код:
|
#include ‹stdio.h›
#include ‹time.h›
#include ‹bcm2835.h›
#define PIN RPI_V2_GPIO_P1_03
#define PIN_IN RPI_V2_GPIO_P1_05
int main()
{
if (!bcm2835_init()) // Инициализация GPIO
return 1;
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP); //Устанавливаем порт Р1_03 на вывод
bcm2835_gpio_fsel(PIN_IN, BCM2835_GPIO_FSEL_INPT); // Устанавливаем порт PIN_IN на ввод
bcm2835_gpio_write(PIN, LOW); // Устанавливаем в порт логический нуль
while(1) // Повторяем бесконечный цикл пока не будет выполнено условие ниже
{
if(!bcm2835_gpio_lev(PIN_IN)) //1 или 0 в PIN_IN ?
{
bcm2835_gpio_write(PIN, HIGH); // Устанавливаем в порт логическую единицу
break;
}
}
return 0;
} |
При такой реализации всю систему подвешивает этот бесконечный цикл, как реализовать чтобы и систему не подвешивал и при подключении к PIN_IN выполнялось условие?
Если на Си нельзя, еще есть возможность написать на Python.
Работать будет в linux.
|
|
|
|
24.05.2013, 16:04
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
Re: Как реализовать что-то типа события в си?
Выбираем любую ножку, способную генерировать внешнее прерывание (см. даташит), настраиваем и вешаем сигнал на нее, и ждем в спячке или выполняя фоновую задачу наступления прерывания
|
|
|
|
26.05.2013, 10:06
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,480
Сказал спасибо: 734
Сказали Спасибо 1,899 раз(а) в 777 сообщении(ях)
|
Re: Как реализовать что-то типа события в си?
Вот же примеры http://www.airspayce.com/mikem/bcm2835/examples.html
|
Цитата:
|
|
Код:
|
Shows how to use event detection on an input pin
// event.c
//
// Example program for bcm2835 library
// Event detection of an input pin
//
// After installing bcm2835, you can build this
// with something like:
// gcc -o event event.c -l bcm2835
// sudo ./event
//
// Or you can test it before installing with:
// gcc -o event -I ../../src ../../src/bcm2835.c event.c
// sudo ./event
//
// Author: Mike McCauley
// Copyright (C) 2011 Mike McCauley
// $Id: RF22.h,v 1.21 2012/05/30 01:51:25 mikem Exp $
#include ‹bcm2835.h›
#include ‹stdio.h›
// Input on RPi pin GPIO 15
#define PIN RPI_GPIO_P1_15
int main(int argc, char **argv)
{
// If you call this, it will not actually access the GPIO
// Use for testing
// bcm2835_set_debug(1);
if (!bcm2835_init())
return 1;
// Set RPI pin P1-15 to be an input
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_INPT);
// with a pullup
bcm2835_gpio_set_pud(PIN, BCM2835_GPIO_PUD_UP);
// And a low detect enable
bcm2835_gpio_len(PIN);
while (1)
{
if (bcm2835_gpio_eds(PIN))
{
// Now clear the eds flag by setting it to 1
bcm2835_gpio_set_eds(PIN);
printf("low event detect for pin 15\n");
}
// wait a bit
delay(500);
}
bcm2835_close();
return 0;
} |
|
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
26.05.2013, 13:28
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.02.2012
Сообщений: 440
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
|
Re: Как реализовать что-то типа события в си?
Protothreads, Atomthreads (PT_WAIT_UNTIL):
http://bsvi.ru/protopotoki-protothreads/
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:53.
|
|