lv6 嵌入式开发-Flappy bird项目(信号机制、定时器功能实现)

这篇具有很好参考价值的文章主要介绍了lv6 嵌入式开发-Flappy bird项目(信号机制、定时器功能实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1 信号(signal)

2 设置信号响应方式 – signal

3 设置定时器

4 示例


问题:

getch()阻塞获取键盘按键输入, 怎么操作才能不影响小鸟下落和管道移动?

getch如果阻塞,下面的程序都是无法执行。通过信号机制方式实现。

1 信号(signal)

在Linux中,软中断信号(signal,简称为信号)是在软件层次上对中断的一种模拟,用来通知进程发生了异步事件。内核可以因为内部事件而给进程发送信号,通知进程发生了某个事件。

信号响应的方式:

1.忽略信号,即对信号不做任何处理;

2.捕捉信号,即信号发生时执行用户自定义的信号处理函数。

3.执行缺省操作,Linux对每种信号都规定了默认操作。

信号的检测与处理流程图

lv6 嵌入式开发-Flappy bird项目(信号机制、定时器功能实现),嵌入式开发,linux

2 设置信号响应方式 – signal

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

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler); 

成功时返回原先的信号处理函数,失败时返回SIG_ERR  

signum:指明了所要处理的信号类型  

handler:描述了与信号关联的动作               

        SIG_DFL代表缺省方式; SIG_IGN 代表忽略信号;               

        指定的信号处理函数代表捕捉方式

示例

// 头文件省略
void handler (int signo) {

     printf(“HELLO!\n”); 
}

int  main() {
     signal(SIGINT, handler);
      while ( 1 ) ;
      return 0;
}

3 设置定时器

struct itimerval {
    struct timeval it_interval; /* 计时器重新启动的间歇值 */
    struct timeval it_value;    /* 计时器安装后首次启动的初 };                               始值,之后就没有用 */
struct timeval {
    long tv_sec;       /* 秒 */
    long tv_usec;      /* 微妙*/
};

计时器的实现

int setitimer(int which, const struct itimerval *value,            
                struct itimerval *ovalue)

参数: which:间歇计时器类型,    

                   ITIMER_REAL     //数值为0,发送的信号是SIGALRM。

            struct itimerval *value:将value指向的结构体设为计时器的当前值,

            struct itimerval *ovalue:保存计时器原有值。一般设置为NULL。

返回值: 成功返回0。失败返回-1。

4 示例

#include <stdio.h>
#include <curses.h>
#include <signal.h>
#include <sys/time.h>

int x=10,y=10;
int a=5,b=10;
void handler(int sig)
{
	move(a,b);
	addch('B');
	refresh();
	b++;

}
int main(int argc, const char *argv[])
{
	char ch;
	initscr();//进入curses模式
	curs_set(0);
	noecho();//禁止字符显示
	keypad(stdscr,1);//允许使用功能键
	start_color();//启动颜色机制
	init_pair(1,COLOR_WHITE, COLOR_RED);
	init_pair(2,COLOR_GREEN,COLOR_WHITE);

	signal(SIGALRM, handler);

	/*设置定时时间*/
	struct itimerval timer;
	timer.it_value.tv_sec = 3;//首次启动定时时间
	timer.it_value.tv_usec = 0;
	timer.it_interval.tv_sec = 1;//之后每次的定时时间
	timer.it_interval.tv_usec = 0;
	/*启动定时*/
	setitimer(ITIMER_REAL, &timer, NULL);

	while(1){
		ch = getch();
		if(ch == 'Q')
		{
			attron(COLOR_PAIR(1));
			move(x,y);
			addch('A');
			refresh();
			y++;
			attroff(COLOR_PAIR(1));
		}
	}

	while(1);
	endwin();//退出curses模式
	return 0;
}

5 练习

使用信号机制实现每隔1s打印字符串“Flappy bird”,提交代码。

方式1

#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>

void handle(int sig)
{
	
	printf("Flappy bird\n");
	
}

int main(int argc,char *argv[])
{
	struct sigaction act;
	struct itimerval timevalue;
	int ret;

	
	act.sa_handler = handle;
	act.sa_flags = 0;
	sigemptyset(&act.sa_mask);

	timevalue.it_interval.tv_sec = 1;
	timevalue.it_interval.tv_usec = 0;
	timevalue.it_value.tv_sec = 5;
	timevalue.it_value.tv_usec = 0;

	setitimer(ITIMER_REAL, &timevalue,NULL);
	ret = sigaction(SIGALRM,&act,NULL);

	if(ret < 0)
	{
		perror("sigaction");
		return 0;
	}

	
	while(1)
	{

	}

	return 0;
}

方式2文章来源地址https://www.toymoban.com/news/detail-729663.html


#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>

void handle(int sig)
{
	
	printf("Flappy bird\n");
	
}

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

	struct itimerval timevalue;


	timevalue.it_interval.tv_sec = 1;
	timevalue.it_interval.tv_usec = 0;
	timevalue.it_value.tv_sec = 5;
	timevalue.it_value.tv_usec = 0;

	setitimer(ITIMER_REAL, &timevalue,NULL);
	signal(SIGALRM,handle);


	
	while(1)
	{

	}

	return 0;
}

到了这里,关于lv6 嵌入式开发-Flappy bird项目(信号机制、定时器功能实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • lv3 嵌入式开发-3 linux shell命令(文件搜索、文件处理、压缩)

    目录 1 查看文件相关命令 1.1 常用命令 1.2 硬链接和软链接 2 文件搜索相关命令 2.1 查找文件命令 2.2 查找文件内容命令 2.3 其他相关命令 3 文件处理相关命令 3.1 cut  3.2 sed 过滤 3.3 awk 匹配 4 解压缩相关命令 4.1 解压缩文件的意义 4.2 解压缩相关命令 cat - concatenate files and pri

    2024年02月10日
    浏览(63)
  • lv3 嵌入式开发-5 linux shell脚本编程(概念、变量、语句)

     Shell脚本是利用 shell 的功能所写的一个程序。这个程序是使用纯文本文件,将一些 shell 的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能  第一个Shell脚本文件 变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念

    2024年02月10日
    浏览(83)
  • lv7 嵌入式开发-网络编程开发 03 TCP/IP与五层体系结构

    目录 1 TCP/IP协议族体系结构 1.1 OSI与TCP/IP 1.2 TCP/IP 的体系结构  1.3 TCP/IP 体系结构的另一种表示方法 1.4 沙漏计时器形状的 TCP/IP 协议族 2 五层协议的体系结构 2.1 各层的主要功能  2.2 互联网中客户-服务器工作方式 2.3 同时为多个客户进程提供服务  3 练习 是事实上的国际标

    2024年02月07日
    浏览(68)
  • Python (Pygame) 游戏开发项目实战: 飞扬的小鸟 (Flappy Bird, 像素鸟)

    原文链接:https://xiets.blog.csdn.net/article/details/131791045 版权声明:原创文章禁止转载 专栏目录:Pygame 专栏(总目录) 使用 Python Pygame 开发一个 Flappy Bird 小游戏,也叫 飞扬的小鸟、像素鸟。 Flappy Bird 是一款简单而富有挑战性的益智休闲游戏。玩家只需要点击屏幕即可操作。点

    2024年02月13日
    浏览(49)
  • 嵌入式开发--电子钢琴项目(Linux+C开发)附上源码

    复盘一下之前做的一个小项目,温习一下c语言和Linux的知识,唔,就是这样子。 所用软件以及工具如下: 1、VMware-workstation-full搭配Ubuntu18.04的Linux操作系统,VMware是桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统和进行开发、测试 、部署新的应用程

    2024年02月08日
    浏览(50)
  • AI嵌入式K210项目(1)-芯片开发板介绍

    在人工智能大潮滚滚而来的时代,作为一个从事嵌入式行业多年的程序猿倍感焦虑,有被替代的焦虑,也有跟不上新技术步伐的无奈,本系列文章将介绍一个从硬件设计到ai训练、最后到模型部署的完整案例;第一阶段我将介绍使用C语言进行裸机开发,在熟悉了硬件和系统之

    2024年01月17日
    浏览(70)
  • AI嵌入式K210项目(19)-安装CanMV IDE开发软件

    前几章我们介绍K210使用C语言裸机开发方法,大家对K210内部的硬件和各种加速器有了初步的了解,但是开发人工智能相关程序,使用C语言的话复杂度比较高,因此接下来我们逐步学习基于K210芯片使用python开发人工智能相关程序,包含颜色识别,人脸识别,口罩识别等,也包

    2024年01月25日
    浏览(62)
  • 嵌入式物联网单片机项目开发实例-4G DTU边缘数据采集网关开发

    链接:https://pan.baidu.com/s/163D-kElFqXov629YaSrWDw?pwd=1688 提取码:1688 [1.EC200S_STM32F103_4G CAT1网络TCP和UDP的透传字符串] [2.EC200S_STM32F103_4G CAT1网络TCP和UDP的透传十六进制包含0x00] [3.EC200S_STM32F103_4G CAT1通过外置MQTT协议发送定位和固定数据到ONENET] [4.EC200S_STM32F103_4G CAT1通过外置MQTT协议发送

    2024年01月16日
    浏览(52)
  • 【Pygame】细致讲解开发Flappy Bird小游戏

    方式1: # 加载图片 # 加载音乐 调用sound.play()即可播放音效。 方式2: 利用python的字典查找图片。 通过python的内置模块os(operatingsystem) 来提供一些和操作系统有关的用法,使用os.listdir方法列出文件夹中的所有文件,利用os.splitext 分割文件名和后缀。 文件名+后缀(“小鸟”+”

    2023年04月13日
    浏览(69)
  • 嵌入式Linux实战开发之项目总体概述(基于IMX6ULL)

    现在越来越多的智能设备融入到我们的生活,然而,丰富的设备之下也是有一套基本的运行框架,只是根据不同的需求增减相应的功能从而满足自身的需要。而电子产品量产工具项目,就是实现基础的功能,可以作为一个基础的模版,学成之后便可进行扩展,根据自身需求,

    2024年02月13日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包