Добрый день. Моя цель - написать простую программу c, которая запускается на моем beagleboard-xm и открыть светодиод на gpio pin каждые 100 мс. Я хочу использовать прерывание таймера для достижения этого. Я пытаюсь с этим руководствомТаймер С программирование на beagleboard-xm с armstrong
http://www.kunen.org/uC/beagle/omap_dmtimer.html
, но я что-то пропустил. Нужно ли мне манипулировать ядром? Я установил родной компилятор GCC на BeagleBoard-хт и кросс-компилятор с кодом Sourcery на окнах 7 и я могу строить простые программы для манипулирования светодиодов, но и компилятор не распознает заголовки, используемые в учебнике:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/clk.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <asm/io.h>
#include <mach/dmtimer.h>
#include <linux/types.h>
Любое предложение будет высоко оценено. Заранее спасибо Здесь я выкладываю код, который я использовал для GPIO манипулировать
#include <stdio.h>
#include<signal.h>
#include<unistd.h>
void sig_handler(int signo) {
if (signo == SIGINT) {
FILE *fp;
if ((fp = fopen("/sys/class/gpio/gpio157/direction", "w")) == NULL) {
exit(1);
} else {
fprintf(fp, "low");
fclose(fp);
}
fp = fopen("/sys/class/gpio/unexport", "w");
fprintf(fp, "157");
fclose(fp);
printf("Closing and cleaning \n");
}
}
void main() {
FILE *fp;
printf("\n*************************************\n"
"* Welcome to PIN Blink program *\n"
"* ....blinking pin 22 on port GPIO *\n"
"* ....rate of 1 Hz............ *\n"
"**************************************\n");
if (signal(SIGINT, sig_handler) == SIG_ERR)
printf("\ncan't catch SIGINT\n");
fp = fopen("/sys/class/gpio/export", "w");
fprintf(fp, "157");
fclose(fp);
printf("...export file accessed, new pin now accessible\n");
while (1) {
if ((fp = fopen("/sys/class/gpio/gpio157/direction", "w")) == NULL) {
printf("Error \n");
exit(1);
}
fprintf(fp, "high");
fclose(fp);
sleep(1);
if ((fp = fopen("/sys/class/gpio/gpio157/direction", "w")) == NULL) {
printf("Error \n");
exit(1);
}
fprintf(fp, "low");
fclose(fp);
sleep(1);
}
}
Установите файлы заголовков ядра, и если это не исправить вашу проблему, установите исходный код ядра. – JimR
В вашем коде вы снова и снова открываете и закрываете файл «/ sys/class/gpio/gpio157/direction». Было бы гораздо быстрее просто открыть этот файл за пределами while() и закрыть его после while(). Затем внутри вы можете просто написать ему каждую секунду. Но даже так .. ознакомьтесь с моим комментарием к моему ответу ниже для ссылки setitimer/getitimer. Вы должны использовать это вместо sleep() –