Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Цифровые сигнальные процессоры Вопросы, связанные с применением цифровых сигнальных процессоров: программирование, отладочные средства, алгоритмы...

 
Опции темы

Как реализовать что-то типа события в си?

Непрочитано 24.05.2013, 15:35  
hie
Временная регистрация
 
Аватар для hie
 
Регистрация: 28.05.2007
Сообщений: 95
Сказал спасибо: 30
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
hie на пути к лучшему
Счастье Как реализовать что-то типа события в си?

Т.е. вот у меня код релизован на цикле
Код:
#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.
Реклама:
hie вне форума  
Непрочитано 24.05.2013, 16:04  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Как реализовать что-то типа события в си?

Выбираем любую ножку, способную генерировать внешнее прерывание (см. даташит), настраиваем и вешаем сигнал на нее, и ждем в спячке или выполняя фоновую задачу наступления прерывания
niXto вне форума  
Непрочитано 26.05.2013, 10:06  
DK
Почётный гражданин KAZUS.RUN
 
Аватар для DK
 
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,480
Сказал спасибо: 734
Сказали Спасибо 1,899 раз(а) в 777 сообщении(ях)
DK на пути к лучшему
По умолчанию 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;
}
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
DK вне форума  
Непрочитано 26.05.2013, 13:28  
zöner
Гражданин KAZUS.RUN
 
Регистрация: 16.02.2012
Сообщений: 440
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
zöner на пути к лучшему
По умолчанию Re: Как реализовать что-то типа события в си?

Protothreads, Atomthreads (PT_WAIT_UNTIL):
http://bsvi.ru/protopotoki-protothreads/
zöner вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Северная Корея, провал запуска "Млечного пути" dosikus Отвлекитесь, эмбеддеры! 53 22.04.2012 05:31
Водка и как с ней бороться SerjT Отвлекитесь, эмбеддеры! 108 29.09.2009 21:25
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49


Часовой пояс GMT +4, время: 12:53.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.