Timer Linux下Raspberry Pi的定时器中断

Timer Linux下Raspberry Pi的定时器中断,timer,raspberry-pi,interrupt,irq,Timer,Raspberry Pi,Interrupt,Irq,是否可以在Raspberry Pi上设置硬件定时器外设,并在特定时间(在Linux下运行时)获得中断?有图书馆/例子吗 我知道你可以通过wiringPi(当以管理员权限运行时),所以如果有一个免费的定时器外设,这似乎是可能的 在Pi论坛上,这意味着有一个免费的STC注册,并提供了一些信息,但被标记为“裸金属”,我想这意味着Linux没有参与 背景:我知道Linux根本不擅长这一点,但是我对在JS解释器中添加硬件定时器功能感兴趣。它最初是为微控制器设计的,包含一些预期通过计时器IRQ运行的代码(例

是否可以在Raspberry Pi上设置硬件定时器外设,并在特定时间(在Linux下运行时)获得中断?有图书馆/例子吗

我知道你可以通过wiringPi(当以管理员权限运行时),所以如果有一个免费的定时器外设,这似乎是可能的

在Pi论坛上,这意味着有一个免费的STC注册,并提供了一些信息,但被标记为“裸金属”,我想这意味着Linux没有参与


背景:我知道Linux根本不擅长这一点,但是我对在JS解释器中添加硬件定时器功能感兴趣。它最初是为微控制器设计的,包含一些预期通过计时器IRQ运行的代码(例如,对于软件PWM、定时脉冲和其他位和BOB)-如果在线程中运行,这部分代码实际上是无用的。

如果我理解了你的问题,你可以通过alarm()和signal()间接访问计时器

这里是一个非常简单的Hello World程序,用于Raspberry Pi,使用wiringPi切换引脚40和引脚38。 针脚40在主回路中切换,针脚38在报警中断信号中切换

编译时使用: gcc-Wall-o helloworld helloworld.c-lwiringPi

Control+c退出

我希望这有帮助

JSU

helloworld.c

#include <wiringPi.h>
#include <stdlib.h>

#include <signal.h>
#include <unistd.h>

void alarmWakeup(int sig_num);


int main(int argc, char *argv[])
{
    unsigned int j;

    wiringPiSetupPhys();//use the physical pin numbers on the P1 connector


    pinMode(40, OUTPUT);
    pinMode(38, OUTPUT);

    signal(SIGALRM, alarmWakeup);   
    ualarm(5000, 5000);


    while(1)
    {
        digitalWrite(40, HIGH); //pin 40 high
        for(j=0; j<1000000; j++);//do something
        digitalWrite(40, LOW);  //pin 40 low
        for(j=0; j<1000000; j++);//do something
    }

    return 0;

}//int main(int argc, char *argv[])


void alarmWakeup(int sig_num)
{
    unsigned int i;

    if(sig_num == SIGALRM)
    {
        digitalWrite(38, HIGH); //pin 38 high
        for(i=0; i<65535; i++); //do something
        digitalWrite(38, LOW);  //pin 38 low
    }

}
#包括
#包括
#包括
#包括
无效报警唤醒(int sig_num);
int main(int argc,char*argv[])
{
无符号整数j;
wiringPiSetupPhys();//使用P1接头上的物理管脚号
pinMode(40,输出);
pinMode(38,输出);
信号(信号报警、报警唤醒);
乌拉拉姆(5000,5000);
而(1)
{
digitalWrite(40,高);//引脚40高

对于(j=0;jThanks-这看起来很棒。你知道它在类似Pi的东西上有多精确吗?在示波器(LeCroy Wave Ace 234)上测得,针脚38的周期正好是5ms。频率计数器(HP 5381A)测得的频率为201.5Hz。如ualarm()计时是从主处理器时钟中派生出来的,你会认为它是相当准确的。很好-谢谢你的检查-这是一个巨大的帮助!