gpt4 book ai didi

Linux下树莓派上的定时器中断

转载 作者:行者123 更新时间:2023-12-04 10:03:43 27 4
gpt4 key购买 nike

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

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

this post在 Pi 论坛上暗示有一个免费的 STC 寄存器,以及 this one提供了一些信息,但被标记为“BareMetal”,我认为这意味着不涉及 Linux?

背景:我知道这根本不是 Linux 所擅长的,但是我有兴趣向 Espruino 添加硬件定时器功能。 JS解释器。它最初是为微 Controller 设计的,包含一些期望通过定时器 IRQ 运行的代码(例如,用于软件 PWM、定时脉冲和其他位和 bob)——如果在线程中运行,它的那部分将毫无用处。

最佳答案

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

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

编译:
gcc -Wall -o helloworld helloworld.c -lwiringPi

Control+c 退出。

我希望这有帮助,

江苏大学

Hello World

#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
}

}

关于Linux下树莓派上的定时器中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32734895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com