01-基于粤嵌GEC6818实现屏幕的显示固定颜色进行自动切换

news2025/2/2 12:03:29

基于GEC6818实现屏幕颜色的切换

本文使用开发板GEC6818,实现屏幕显示特定颜色并且进行自动切换的功能。

文章目录

  • 基于GEC6818实现屏幕颜色的切换
    • 一、 初始化开发板--(开发板是新的则可以省略很多步骤)
      • 1.1 **删除文件和文件夹**
      • 1.2 **查看磁盘空间**
      • 1.3 **编辑配置文件**
      • 1.4 **创建文件夹**(选做)
      • 1.5 **使用串口工具进行文件传输**
      • 1.6 **更改文件权限**
    • 二、 练习:实现循环切换颜色
      • 2.1 解析
      • 2.2 代码实现

一、 初始化开发板–(开发板是新的则可以省略很多步骤)

拿到开发板GEC6818时可能需要做(开发板不是新的)

1.1 删除文件和文件夹

  • rm *: 删除当前目录下的所有文件。

1.2 查看磁盘空间

  • df -h: 显示磁盘使用情况。-h选项使输出以易读的格式显示。–查看该开发板的磁盘还有多少,如果很少了则需要再删除一些没有用的(前人的)文件夹

1.3 编辑配置文件

  • vi /etc/profile: 使用vi编辑器打开/etc/profile文件。在这里,需要手动查找并注释掉特定的行。在vi编辑器中,注释行通常是使用#字符开头的行。

  • 如果是别人使用过的开发板则看一看是否存在

        #source /IOT/driver_ko/insmod_driver.sh
        #cd/ IOT                                  
        #./iot &  
        #前面打 #   表示注释
    

1.4 创建文件夹(选做)

  • mkdir -p /var/log: 创建一个名为log的文件夹。如果var文件夹不存在,则先创建var文件夹,然后再创建log文件夹。–这个文件夹用来存放自己的文件当然这个也可以不做,看个人习惯

1.5 使用串口工具进行文件传输

  • rx 名字: 这是一个命令行工具,用于从另一个设备(如计算机)接收文件。在接收文件之前,您需要在发送端启动xmodem传输,然后使用CRT或其他串口工具发送文件。回车就会有一个C在闪,CRT -> 传输 -> 发送xmodem
    找到你要下载的文件双击/点击发送即可
    等待传输完成
  • 在这里插入图片描述

1.6 更改文件权限

  • chmod +x lcd: 赋予lcd文件可执行权限。这意味着您可以在此文件上运行它,前提是它是一个可执行文件。

二、 练习:实现循环切换颜色

在Linux系统上使用帧缓冲设备交替显示绿色和红色。每次颜色变化都会持续1秒,然后切换到另一种颜色,这样循环进行.
注意有函数:
延时 sleep(1)–>s级延迟
usleep(1)–>微秒级的延迟
当然可以。sleepusleep 是两个用于在程序中引入延迟的函数。它们都用于暂停程序的执行,但它们的时间单位和实现方式有所不同。

  1. sleep(1) - 秒级延迟

    • 原型unsigned int sleep(unsigned int seconds);
    • 参数seconds - 指定要暂停的秒数。
    • 返回值sleep 函数返回时剩余的秒数。
    • 实现sleep 函数会导致调用进程暂停执行,直到指定的秒数已过去或被捕获到信号。这是一个较为粗糙的延迟,因为它只能精确到秒。
  2. usleep(1) - 微秒级延迟

    • 原型int usleep(useconds_t useconds);
    • 参数useconds - 指定要暂停的微秒数。
    • 返回值usleep 函数没有返回值。
    • 实现usleep 函数会导致调用进程暂停执行,直到指定的微秒数已过去或被捕获到信号。这允许更细粒度的时间控制,因为它可以精确到微秒。

注意

  • 虽然 usleep 在许多系统中仍然可用,但它在某些系统和版本中已被标记为弃用。建议使用 nanosleep 函数,该函数提供了更高的时间精度,并且在不同的系统中具有更好的兼容性。

总之,这两个函数都提供了一种方式来暂停程序的执行,但它们的时间单位和精度有所不同。

2.1 解析

使用open()函数打开/dev/fb0设备文件,标志为O_RDWR,表示读写模式。
然后通过write()函数对这个设备进行写入
最后记得close()这个设备。

其中所使用的函数可以参考博客write函数与lseek函数详细解析、OPEN,READ,CLOSE以及实例分析

2.2 代码实现

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>

int main()
{   int  r1,r2;
    int fd =open("/dev/fb0",O_RDWR);
    if(-1 == fd)
    {
        perror("open file error");
        close(fd);
        exit(1);
    }
    int color1[800*480];
    int color2[800*480];
    int i;
    for(i=0;i<800*480;i++)
    {
        color1[i]=0x00FF00;
        color2[i]=0xFF0000;
    }
    while(1)
    {
        r1 = write(fd,color1,800*480*4);
        if (r1!=800*480*4)
        {
            perror("write error");
            return -2;
        }
        sleep(1);//延迟1s
        lseek(fd,0x00,SEEK_SET);
        printf("green\n");
        r2 = write(fd,color2,800*480*4);
        if (r2!=800*480*4)
        {
            c
            return -2;
        }
        printf("red\n");
        lseek(fd,0x00,SEEK_SET);
        sleep(1);
    }
    close(fd);
}


上面代码中使用了perror()这个函数👇。

perror是C/C++语言中的一个函数,用于将最近的系统错误信息打印到标准错误输出流(stderr)。

它的使用方法如下:

  • 包含头文件:#include <stdio.h>

  • 声明函数原型:void perror(const char *s);

在需要打印错误信息的地方调用perror函数,并传入一个用于提示的字符串参数。例如:perror(“Error:”);

perror函数的作用是将errno变量中的错误号转化为可读的错误信息,并将其打印到标准错误输出流(stderr)中。传入的参数s将会作为一个前缀字符串输出。打印的格式一般为:“s: 错误信息”。

注意

perror函数只能打印与最近的系统调用相关的错误信息。
如果系统调用成功,errno的值不会被改变,perror函数不会打印任何错误信息。
perror函数在打印错误信息后会自动换行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1329059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32的以太网外设+PHY(LAN8720)使用详解(2):硬件设计

0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册1 PHY&#xff08;LAN8720&#xff09;硬件配置 1.1 硬件配置引脚说明 在LAN8720上电或复位时会读取一些特定引脚的电平&#xff0c;根据电平来进行硬件配置。LAN8720的引脚分布如下&…

在MongoDB中使用数组字段和子文档字段进行索引

本文主要介绍在MongoDB使用数组字段和子文档字段进行索引。 目录 MongoDB的高级索引一、索引数组字段二、索引子文档字段 MongoDB的高级索引 MongoDB是一个面向文档的NoSQL数据库&#xff0c;它提供了丰富的索引功能来加快查询性能。除了常规的单字段索引之外&#xff0c;Mong…

深度学习建模从零开始步骤流程

深度学习建模从零开始步骤流程 步骤如下&#xff1a; 环境准备三方库安装建模开发 环境准备 Anaconda安装&#xff1a; Anaconda下载网址&#xff0c;下载win10下的64位版本。 清华镜像站 下载完毕后点击安装&#xff0c;一直点确定或下一步 到上图点击 Just me&#xff…

基于SpringBoot的桃花峪滑雪场租赁系统 JAVA简易版

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设计3.1 教练表3.2 教练聘请表3.3 押金规则表3.4 器材表3.5 滑雪场表3.7 售票表3.8 器材损坏表 四、系统展示五、核心代码5.1 查询教练5.2 教练聘请5.3 查询滑雪场5.4 滑雪场预定5.5 新…

黑芝麻智能与亿咖通科技签署战略合作协议,深化协同助力智能驾驶量产落地

12月22日&#xff0c;全球智能汽车计算芯片引领者黑芝麻智能与全球出行科技企业亿咖通科技共同签署战略合作协议&#xff0c;通过深化合作&#xff0c;整合双方研发、产品和技术资源&#xff0c;联手打造领先智能驾驶系统解决方案&#xff0c;合力推进商业拓展和市场应用&#…

左值右值引用,完美转发

1.c98/03&#xff0c;类模板和函数模板只能含固定数量的模板参数&#xff0c;c11的新特性可以创建接受可变参数的函数模板和类模板 //Args是一个模板参数包&#xff0c;args是一个函数形参参数包 //声明一个参数包Args… args,这个参数包可以包括0到任意个模板参数 template&l…

Ignite数据流处理

数据流处理 #1.概述 Ignite提供了一个数据流API&#xff0c;可用于将大量连续的数据流注入Ignite集群&#xff0c;数据流API支持容错和线性扩展&#xff0c;并为注入Ignite的数据提供了至少一次保证&#xff0c;这意味着每个条目至少会被处理一次。 数据通过与缓存关联的数据…

【AI】YOLO学习笔记三-YOLOV5代码解析

YOLOv5是Glenn Jocher等人研发&#xff0c;它是Ultralytics公司的开源项目。YOLOv5根据参数量分为了n、s、m、l、x五种类型&#xff0c;其参数量依次上升&#xff0c;其效果也是越来越好。由于其代码是长期维护的且具有工程化的思维&#xff0c;所以方便应用在实际的项目中&…

【算法】使用二分查找解决算法问题:理解二分法思想,模板讲解与例题实践

文章目录 二分算法思想 / 性质 / 朴素模板二分查找的引入&#xff08;二段性&#xff09;704.二分查找 模板34.在排序数组中查找元素的第一个和最后一个位置 二分查找的前提条件 / 时间复杂度分析 算法题69.x的平方根35.搜索插入位置852.山脉数组的峰顶索引162.寻找峰值153.寻找…

Servlet-Filter 执行顺序测试

Servlet-Filter 执行顺序测试 对于 web.xml 文件注册过滤器这里就不多说了&#xff0c;就是谁声明的早&#xff0c;谁先被调用。因为在上面的过滤器信息最先被扫描到。 模型抽象 为了便于在实践中使用&#xff0c;结合部分底层原理&#xff0c;我们可以对 Filter 链的执行做…

【3D生成与重建】SSDNeRF:单阶段Diffusion NeRF的三维生成和重建

系列文章目录 题目&#xff1a;Single-Stage Diffusion NeRF: A Unified Approach to 3D Generation and Reconstruction 论文&#xff1a;https://arxiv.org/pdf/2304.06714.pdf 任务&#xff1a;无条件3D生成&#xff08;如从噪音中&#xff0c;生成不同的车等&#xff09;、…

PlatEMO UI 界面

&#x1f389; 博主相信&#xff1a; 有足够的积累&#xff0c;并且一直在路上&#xff0c;就有无限的可能&#xff01;&#xff01;&#xff01; &#x1f468;‍&#x1f393;个人主页&#xff1a; 青年有志的博客 &#x1f4af; Github 源码下载&#xff1a;https://github.…

【快速开发】使用SvelteKit

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

数据结构之进阶二叉树(二叉搜索树和AVL树、红黑树的实现)超详细解析,附实操图和搜索二叉树的实现过程图

绪论​ “生命有如铁砧&#xff0c;愈被敲打&#xff0c;愈能发出火花。——伽利略”&#xff1b;本章主要是数据结构 二叉树的进阶知识&#xff0c;若之前没学过二叉树建议看看这篇文章一篇掌握二叉树&#xff0c;本章的知识从浅到深的对搜索二叉树的使用进行了介绍和对其底层…

uniapp H5项目使用ucharts的Echart组件方式创建圆环

问题&#xff1a;没有报错但是图表不出来 【 调试了半天圆环图表没有不出来。是因为没有明示设置宽度与高度】 /* 请根据实际需求修改父元素尺寸&#xff0c;组件自动识别宽高 */ .charts-box { width: 100%; height: 300px; } 最终效果 先导入ucharts到项目 uniapp的项目…

hadoop集群的开启与关闭

背景 很久没完hadoopl,连怎么开启关闭都不会了qwq 1.进入安装hadoop的目录 我这里是已经进入了 2.开启集群 sbin/start-dfs.sh 3.关闭集群 sbin/stop-dfs.sh

NLP论文阅读记录 -| 对摘要评分的通用规避攻击

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法3.1 问题表述3.2 对 ROUGE 和 METEOR 的白盒输入不可知攻击3.3BERTcore 上的黑盒通用触发器搜索 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果 五…

华为Harmony——ArkTs语言

文章目录 一、简单示例二、声明式UI描述创建组件无参有参数 配置属性配置事件配置子组件 三、自定义组件基本用法基本结构成员函数/变量 一、简单示例 我们以一个具体的示例来说明ArkTS的基本组成。如下图所示&#xff0c;当开发者点击按钮时&#xff0c;文本内容从“Hello Wo…

Python编写第一个APP自动化脚本,将脚本跑起来

一、前置说明 Python 使用 Appium 做 APP自动化的基本流程&#xff08;Android平台&#xff09;&#xff1a; 启动 Appium Serveradb 连接设备&#xff08;真机或模拟器&#xff09;uiautomatorviewer 连接设备&#xff0c;定位元素信息使用appium-python-client库&#xff0…

基于ssm+jsp二手车估值与销售网络平台源码和论文

随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;二手车估值与销售网络平台也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#…