当前位置: 首页 > news >正文

英语教育网站建设/网络服务包括哪些内容

英语教育网站建设,网络服务包括哪些内容,社保在哪个网站做增员,网站建设招标参数本篇开始将会介绍与开发版相关的Qt项目,首先从点亮一个LED开始。I.MX6U和STM32MP157的相关信息都会用到,但是后期还是将I.MX6U的学习作为重点。当然其他开发版的开发也可以参考本博文。 文章目录 1. Qt是如何操控开发板上的一个LED2. 出厂内核设备树中注…

本篇开始将会介绍与开发版相关的Qt项目,首先从点亮一个LED开始。I.MX6U和STM32MP157的相关信息都会用到,但是后期还是将I.MX6U的学习作为重点。当然其他开发版的开发也可以参考本博文。

文章目录

  • 1. Qt是如何操控开发板上的一个LED
  • 2. 出厂内核设备树中注册的LED设备
  • 3. 如何去使用驱动提供的应用层接口
    • 3.1 如何通过按钮控制LED
      • 3.1.1 需要先找到接口
      • 3.1.2 如何访问该接口
    • 3.2 开发UI程序控制LED灯
      • 3.2.1 在源文件“mainwindow.h”的代码如下
      • 3.2.2 在源文件“mainwindow.cpp” 的代码如下
  • 4. 程序运行效果
    • 4.1 Ubuntu 上仿真界面的效果
    • 4.2 板卡上运行效果

1. Qt是如何操控开发板上的一个LED

Qt是无法直接控制开发板上的硬件,那么它是如何操控开发板上的硬件的呢?
从下图可以看到是Qt通过驱动层提供的接口来操控开发板上的硬件
在这里插入图片描述
关于驱动提供的接口可以从正点原子的驱动和试用教程,具体在哪?后期找一下。

如果你是应用开发人员,就要问驱动人员提供的接口信息。

2. 出厂内核设备树中注册的LED设备

此部分没有特别清楚,大概讲的应该就是Linux系统安装中2.3 硬件设备文件名中内容。

I.MX6U和STM32MP157的出厂系统如下:

  • I.MX6U设备树路径为:arch/arm/boot/dts/imx6ull-14x14-evk.dts
  • STM32MP157设备树路径为:arch/arm/boot/dts/stm32mp157d-atk.dtsi

(1)要找到设备树,先找到Linux源码
在“01、例程源码\03、正点原子Uboot和Linux出厂源码”下文件内容如下:
在这里插入图片描述
应用层访问的ID设备,都是在上图框选的Linux源码配置的,如何编译这个源码,正点原子的其他教程中做了介绍,此处不再做介绍。

(2)下面应该就是Linux源码的关于LED灯部分的内容
在这里插入图片描述
上图为I.MX6U的,led节点,其中是一个LED即led1,配置了sys.led,也就是系统ID,即收到货时闪的那个led,其中的heartbeat代表正在运行,gpio.leds代表驱动,本篇使用到的也就是该LED。

3. 如何去使用驱动提供的应用层接口

想要控制这个 LED,首先I.MX6U的出厂内核已经默认将这个 LED 注册成了 gpio-leds类型设备(驱动层配置给应用层的接口)。 所以我们可以直接在应用层接口直接可以操作这个 LED 设备。(如果搞了一些移植,有可能LED没有配置,就无法正常使用)
以下将会介绍如何查找和使用接口控制LED灯的过程。

3.1 如何通过按钮控制LED

3.1.1 需要先找到接口

“10、用户手册/01【正点原子】I.MX6U用户快速体验V2.6.pdf”中查找说明
在这里插入图片描述
上图中驱动提供的对应的接口文件即为:

echo none > /sys/class/leds/sys-led/trigger // 改变 LED 的触发模式
echo 1 > /sys/class/leds/sys-led/brightness // 向接口写1点亮 LED
echo 0 > /sys/class/leds/sys-led/brightness // 向接口写0熄灭 LED

3.1.2 如何访问该接口

我们在 Qt 里有很多种方法可以控制正点原子 I.MX6U 的 LED 设备。 如可以用 C 语言的读写函数读写来控制 LED的状态,或者直接使用 system()函数启动一个进程执行相关指令直接控制 LED 等。
我们介绍最简单的方法控制开发板上的LED, 就是使用Qt的操作文件的类QFile直接控制LED因为 Linux 上一切皆文件,所有的东西都当作文件来处理。

/* 开发板的 LED 控制接口 */
file.setFileName("/sys/devices/platform/leds/leds/sys-led/brightness");

项目虽然简单,但是在嵌入式里基本都是从点亮一个 LED 里开始说起。
只有我们会操作一个 IO,剩下的基本都不会难!

3.2 开发UI程序控制LED灯

项目简介:设置一个按钮,点击即可控制 LED 状态反转(点亮或者熄灭 LED)。 项目看来很起来很简单, 实际上有些需要注意的地方,我们在改变 LED 的状态时,需要先去读取 LED的状态,防止外界(外面应用程序)将 LED 的状态改变了。 否则我们反转操作将不成立。 在C++里一般使用 get()和 set()方法来获取和设置。我们的 LED 程序里也有这种方法。所以需要写好一个让人看得懂的程序是有“方法”的。不能将程序功能写在一堆,最好是分开写,留有接口。让后面的人看懂!

3.2.1 在源文件“mainwindow.h”的代码如下

#ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3 4
#include <QMainWindow>
5 #include <QPushButton>
6 #include <QFile>
7 8
class MainWindow : public QMainWindow
9 {
10 Q_OBJECT
11
12 public:
13 MainWindow(QWidget *parent = nullptr);
14 ~MainWindow();
15
16 private:
17 /* 按钮 */
18 QPushButton *pushButton;
19
20 /* 文件 */
21 QFile file;
22
23 /* 设置 lED 的状态 */
24 void setLedState();
25
26 /* 获取 lED 的状态 */
27 bool getLedState();
28
29 private slots:
30 void pushButtonClicked();
31 };
32 #endif // MAINWINDOW_H

在头文件“mainwindow.h”里第 24 行声明一个设置 LED 状态方法, 另一个是获取状态的方法。 另外声明一个槽函数,作用是点击切换 LED 的状态。

3.2.2 在源文件“mainwindow.cpp” 的代码如下

#include "mainwindow.h"
2 #include <QDebug>
3 #include <QGuiApplication>
4 #include <QScreen>
5 #include <QRect>
6 7
MainWindow::MainWindow(QWidget *parent)
8 : QMainWindow(parent)
9 {
10 /* 获取屏幕的分辨率, Qt 官方建议使用这
11 * 种方法获取屏幕分辨率,防上多屏设备导致对应不上
12 * 注意,这是获取整个桌面系统的分辨率
13 */
14 QList <QScreen *> list_screen = QGuiApplication::screens();
15
16 /* 如果是 ARM 平台,直接设置大小为屏幕的大小 */
17 #if __arm__
18 /* 重设大小 */
19 this->resize(list_screen.at(0)->geometry().width(),
20 list_screen.at(0)->geometry().height());
21 /* 默认是出厂系统的 LED 心跳的触发方式,想要控制 LED,
22 * 需要改变 LED 的触发方式,改为 none,即无 */
23 system("echo none > /sys/class/leds/sys-led/trigger");
24 #else
25 /* 否则则设置主窗体大小为 800x480 */
26 this->resize(800, 480);
27 #endif
28
29 pushButton = new QPushButton(this);
30
31 /* 居中显示 */
32 pushButton->setMinimumSize(200, 50);
33 pushButton->setGeometry((this->width() - pushButton->width()) /2 ,
34 (this->height() - pushButton->height()) /2,
35 pushButton->width(),
36 pushButton->height()
37 );
38 /* 开发板的 LED 控制接口 */
39
file.setFileName("/sys/devices/platform/leds/leds/sys-led/brightness");if (!file.exists())
42 /* 设置按钮的初始化文本 */
43 pushButton->setText("未获取到 LED 设备! ");
44
45 /* 获取 LED 的状态 */
46 getLedState();
47
48 /* 信号槽连接 */
49 connect(pushButton, SIGNAL(clicked()),
50 this, SLOT(pushButtonClicked()));
51 }
52
53 MainWindow::~MainWindow()
54 {
55 }
56
57 void MainWindow::setLedState()
58 {
59 /* 在设置 LED 状态时先读取 */
60 bool state = getLedState();
61
62 /* 如果文件不存在,则返回 */
63 if (!file.exists())
64 return;
65
66 if(!file.open(QIODevice::ReadWrite))
67 qDebug()<<file.errorString();
68
69 QByteArray buf[2] = {"0", "1"};
70
71 /* 写 0 或 1 */
72 if (state)
73 file.write(buf[0]);
74 else
75 file.write(buf[1]);
76
77 /* 关闭文件 */
78 file.close();
79
80 /*重新获取 LED 的状态 */
81 getLedState();
82 }
bool MainWindow::getLedState()
85 {
86 /* 如果文件不存在,则返回 */
87 if (!file.exists())
88 return false;
89
90 if(!file.open(QIODevice::ReadWrite))
91 qDebug()<<file.errorString();
92
93 QTextStream in(&file);
94
95 /* 读取文件所有数据 */
96 QString buf = in.readLine();
97
98 /* 打印出读出的值 */
99 qDebug()<<"buf: "<<buf<<endl;
100 file.close();
101 if (buf == "1") {
102 pushButton->setText("LED 点亮");
103 return true;
104 } else {
105 pushButton->setText("LED 熄灭");
106 return false;
107 }
108 }
109
110 void MainWindow::pushButtonClicked()
111 {
112 /* 设置 LED 的状态 */
113 setLedState();
114 }

第 9 行~24 行,界面初始化设置,在嵌入式里,根据实际的屏的大小,设置全屏显示。按钮居中显示。

第 23 行,因为出厂系统里配置 LED 的触发方式为心跳方式, 要想控制此 LED,需要将 LED的触发方式改为none,即是无触发方式。为了方便,编者直接使用 system()函数,用指令的方式改变 LED 的触发方式。

第 54~82 行设置 LED 的方法,写入“0”或“1”代表开和关。 写入之前先读取 LED 的状态,预防在用户其他地方有设置过 LED。

第 84 行~108 行, 获取 LED 的状态。

第 110 行~114 行设置 LED 的状态,此方法为槽函数,由点击按钮触发。

4. 程序运行效果

4.1 Ubuntu 上仿真界面的效果

下面为 Ubuntu 上仿真界面的效果,由于 Ubuntu 不是“开发板”,所以在读取 LED 设备时会读取失败。实际在板上运行图略。 交叉编译程序到正点原子 I.MX6U 开发板上运行即可控制LED 的状态。
在这里插入图片描述

4.2 板卡上运行效果

按照上一篇I.MX6U开发板交叉编译Qt项目进行交叉编译,拷贝到开发板的Linux系统中,可以看到通过UI上的按钮控制了LED灯。
在这里插入图片描述

对应地址:Qt点亮I.MX6U开发板的一个LED

相关文章:

Qt点亮I.MX6U开发板的一个LED

本篇开始将会介绍与开发版相关的Qt项目&#xff0c;首先从点亮一个LED开始。I.MX6U和STM32MP157的相关信息都会用到&#xff0c;但是后期还是将I.MX6U的学习作为重点。当然其他开发版的开发也可以参考本博文。 文章目录 1. Qt是如何操控开发板上的一个LED2. 出厂内核设备树中注…...

网络摄像头-流媒体服务器-视频流客户端

取电脑的视频流 当涉及交通事件检测算法和摄像头视频数据处理时&#xff0c;涉及的代码案例可能会非常复杂&#xff0c;因为这涉及到多个组件和技术。以下是一个简单的Python代码示例&#xff0c;演示如何使用OpenCV库捕获摄像头视频流并进行实时车辆检测&#xff0c;这是一个…...

Django05_反向解析

Django05_反向解析 5.1 反向解析概述 随着功能的不断扩展&#xff0c;路由层的 url 发生变化&#xff0c;就需要去更改对应的视图层和模板层的 url&#xff0c;非常麻烦&#xff0c;不便维护。这个时候我们可以通过反向解析&#xff0c;将 url解析成对应的 试图函数 通过 path…...

基于HTML、CSS和JavaScript制作一个中秋节倒计时网页

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 这个项目使用HTML、CSS和…...

富斯I6刷10通道固件

使用USB转串口模块刷写10通道固件 一、下载固件 1. 十通道英文固件 下载地址: https://github.com/benb0jangles/FlySky-i6-Mod-/tree/master 选择 FlySky-i6-Mod–master \ 10ch Mod i6 Updater \ 10ch_MOD_i6_Programmer_V1 路径下的文件,亲测可用。 2. 原版六通道中…...

vector的模拟实现 总结

vector的模拟实现 总结 vector.hTest.cpp vector.h 1、迭代器的实现 #pragma oncenamespace JPC {template<class T>class vector{public://对于存储空间是连续的结构而言&#xff0c;可以用原身指针来 模拟实现 迭代器。typedef T* iterator;typedef const T* const_i…...

k8s中的有状态,无状态,pv、pvc等

数据库是一个典型的有状态服务&#xff0c;他的部署和无状态服务是不一样的。 PostgresSQL----基于Kubernetes部署PostgresSQL-CSDN博客 一、创建SC、PV和PVC存储对象 二、部署PostgresSQL Volume Kubernetes 中文指南——云原生应用架构实战手册 有状态应用&#xff1a; …...

springboot+jxls复杂excel模板导出

JXLS 是基于 Jakarta POI API 的 Excel 报表生成工具&#xff0c;可以生成精美的 Excel 格式报表。它采用标签的方式&#xff0c;类似 JSP 标签&#xff0c;写一个 Excel 模板&#xff0c;然后生成报表&#xff0c;非常灵活&#xff0c;简单&#xff01; Java 有一些用于创建 …...

用selenium webdriver获取网站cookie后,实现免登录上网站

以csdn为例&#xff0c;代码分为两部分。 一、csdn_get_cookies.py为半手动登录网站后获取cookies 二、csdn_use_cookies.py为使用获取到的cookies免登录上网站 #获取登录cookiesfrom selenium import webdriver import jsoncsdn_driver webdriver.Chrome() url "htt…...

如何使用Java进行安全测试?

要使用Java进行安全测试&#xff0c;可以按照以下步骤进行&#xff1a; 确定测试目标&#xff1a;首先&#xff0c;明确要测试的应用程序或系统的安全目标和需求。确定要测试的安全方面&#xff0c;如身份验证、授权、输入验证、安全配置等。 了解安全测试知识&#xff1a;熟悉…...

Linux之Socket函数(详细篇)

本篇是基于Linux man手册的一些总结 socket作用&#xff1a; create an endpoint for communication 函数结构 c #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int socket(int domain, int type, int protocol); 描述 socket() …...

Dajngo06_Template模板

Dajngo06_Template模板 6.1 Template模板概述 模板引擎是一种可以让开发者把服务端数据填充到html网页中完成渲染效果的技术 静态网页&#xff1a;页面上的数据都是写死的&#xff0c;万年不变 动态网页&#xff1a;页面上的数据是从后端动态获取的&#xff08;后端获取数据库…...

快速幂 c++

一般大家写都是 int ans 1; for (int i 1; i < a; i )ans * x;时间复杂度 但是这对于我们还不够&#xff0c;我们要 首先我们得知道一个数学知识 那么求 就有以下递归式 a 能被2整除 a 不能被2整除 (这里a/2是整除) 所以每次都调用 不就是么 最后补充一个东西…...

分享一个基于微信小程序的医院口腔助手小程序 牙科诊所预约小程序 源码 lw 调试

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…...

Si3262 一款低功耗刷卡+触摸+mcu 三合一SOC芯片

Si3262是-款高度集成的低功耗soC芯片&#xff0c;其集成了基于RISC-V 核的低功耗MCU和工作在13.56MHz的非接触式读写器模块。 该芯片ACD模式下刷卡距离可达4-5cm&#xff08;天线决定&#xff09;&#xff0c;适用于智能门锁&#xff0c;电子锁&#xff0c;柜锁&#xff0c;桑拿…...

[H5动画制作系列] 奔跑的豹子的四种Demo演化

资源: bg.jpg: leopard.png: 背景透明 peopard2.png 背景不透明 参考代码1: leopard.js: (function(window) {ma function() {this.initialize();}ma._SpriteSheet new createjs.SpriteSheet({images: ["leopard.png"], frames: [[0,0,484,207],[486,0,484,207]…...

如何实现让一个函数能返回多个值的效果

在C语言中&#xff0c;一个函数通常只能返回一个值。但是可以通过指针参数或结构体来模拟返回多个值的效果。 使用指针参数&#xff1a;你可以将需要返回的值作为函数的参数&#xff0c;通过指针的形式传入&#xff0c;让函数将结果写入指针所指向的内存位置。 void multiple…...

End-to-end 3D Human Pose Estimation with Transformer

基于Transformer的端到端三维人体姿态估计 摘要 基于Transformer的架构已经成为自然语言处理中的常见选择&#xff0c;并且现在正在计算机视觉任务中实现SOTA性能&#xff0c;例如图像分类&#xff0c;对象检测。然而&#xff0c;卷积方法在3D人体姿态估计的许多方法中仍然保…...

状态管理Pinia

Vue3 状态管理 - Pinia 1. 什么是Pinia Pinia 是 Vue 的专属的最新状态管理库 &#xff0c;是 Vuex 状态管理工具的替代品 2. 手动添加Pinia到Vue项目 后面在实际开发项目的时候&#xff0c;Pinia可以在项目创建时自动添加&#xff0c;现在我们初次学习&#xff0c;从零开始…...

maven运行报错解决

在IDEA上运行较大项目时&#xff0c;编译量很大&#xff0c;可能会报出 Error:java: java.lang.OutOfMemoryError: Java heap space 的错误&#xff0c;解决方法如下&#xff1a; java.lang.OutOfMemoryError是内存不足导致的&#xff0c;因此需要修改Idea运行项目的内存大小。…...

在线会计软件推荐:高效实用的选择解析

如果您始终在密切关注Zoho&#xff0c;您一定知道&#xff0c;我们的软件在一个接一个的增加&#xff0c;为的是构建出一套可以全面在线协作、提升业务生产力的应用系统&#xff0c;我们始终致力于为各类企业构建完整的业务应用&#xff0c;以便他们在Zoho上运行整个业务系统。…...

vue监听Enter键

目录 keydown.enter 方法1: 使用keydown.enter指令 方法2: 在keydown事件处理函数中检查按下的键 keyup.enter.native keydown.enter与keyup.enter.native区别 1. 触发时机&#xff1a; 2. 事件类型&#xff1a; 3. 事件冒泡&#xff1a; keydown.enter 在Vue中监听En…...

ADS中带通滤波器模型参数含义学习笔记

ADS中带通滤波器模型参数含义 1、 Fcenter 中心频率 2、 BWpass 通带带宽 3、 Apass 衰减量时的通带带宽 这两个是对应的&#xff0c;比如说是80MHz&#xff0c;3dB&#xff0c;那么就是3dB时的带宽为80MHz&#xff0c;如果改为0.1dB&#xff0c;那么带宽就是0.1dB时的带宽为80…...

【Blender】Blender入门学习

目录 0 参考视频教程0.1 Blender理论知识0.2 Blender上手实践0.3 FBX模型导入Unity 1 Blender的窗口介绍1.1 主界面1.2 模型编辑窗口 2 Blender的基本操作2.1 3D视图的平移2.2 3D视图的旋转2.3 3D视图的缩放2.4 修改快捷键2.5 使物体围绕选择的物体旋转2.6 四视图的查看2.7 局部…...

Redis 三种特殊的数据类型 - Geospatial地理位置 - Hyperloglog基数统计的算法 - Bitmaps位图(位存储)

目录 Redis 三种特殊的数据类型&#xff1a; Geospatial&#xff1a;地理位置 Geospatial类型常用的命令&#xff1a; GEOADD&#xff1a;添加地理位置 GEOPOS&#xff1a;获取地理位置 GEODIST&#xff1a;返回两个给定位置之间的距离 GEORADIUS&#xff1a;以给定的经纬…...

Python web 框架web.py「简约美」

web.py is a web framework for Python that is as simple as it is powerful. web.py is in the public domain, you can use it for whatever purpose with absolutely no restrictions. web.py 是一个简单而强大的 Python Web 框架。web.py 属于公共领域&#xff0c;您可以…...

Bootstrap 重新数据查询时页码为当前页问题

记录一下使用前端组件Bootstrap遇到的一个小问题&#xff1a; 问题描述 第一次查询数据为5页&#xff0c;翻页到第5页后&#xff0c;选中条件再次查询数据时&#xff0c;传到后端页码仍旧为5&#xff0c;而此时数据量小于5页&#xff0c;这时候页码没有重置成第一页&#xff…...

scratch舞蹈比赛 2023年5月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch舞蹈比赛 一、题目要求 1、准备工作 2、功能实现 二、案例分析...

windows下安装redis扩展库

1.根据PHP版本号&#xff0c;编译器版本号和CPU架构 选择php_redis和php_igbinary文件(如果是选择线程的情况下需要再去配置php5ts.dll) windows.php.net - /downloads/pecl/releases/redis/ windows.php.net - /downloads/pecl/releases/igbinary/ php_igbinary-3.1.2-7.2-…...

大数据平台数据安全具体措施有哪些?有推荐的吗?

大数据平台是企业处理和分析数据的重要工具之一&#xff0c;也是企业数据存储的重要载体&#xff0c;因此保障大数据平台安全至关重要。那你知道大数据平台数据安全具体措施有哪些&#xff1f;有推荐的吗&#xff1f; 大数据平台数据安全具体措施有哪些&#xff1f; 1、数据…...