从冯诺依曼到LED:用Qt点亮嵌入式系统的‘输出艺术’

p12419378_112010_Linux-x86-64.zip oracle 11G (Release 11.2.0.1.0)升级至(Release 11.2.0.1.6) Oracle Database "exp.exe"参数文件远程缓冲区溢出漏洞 Oracle Database Server远程Core RDBMS漏洞(CVE-2011-0880) Oracle Database Server远程Core RDBMS漏洞(CVE-2011-0838) Oracle Database Server远程Core RDBMS漏洞(CVE-2011-0835) Oracle Database Server远程Core RDBMS漏洞(CVE-2011-2230) Oracle Database Server远程Database Vault漏洞(CVE-2011-2238) Oracle Database Server RDBMS远程Core RDBMS漏洞(CVE-2011-2239) Oracle数据库Network Foundation组件远程拒绝服务漏洞 Oracle Database Server远程Core RDBMS漏洞(CVE-2011-0832) Oracle Database Vault远程安全漏洞 Oracle Database Server Enterprise Manager Console远程安全漏洞(CVE-2011-0876) Oracle Database Target Type Menus远程安全漏洞(CVE-2011-2257) Oracle Database Server和Enterprise Manager Grid安全漏洞(CVE-2011-2244) Oracle Database Server 远程Enterprise Config Management漏洞(CVE-2011-0831) Oracle Database Server Core RDBMS本地安全漏洞(CVE-2011-2242) Oracle Database Server远程Core RDBMS漏洞(CVE-2011-2243) Oracle Database Server远程Core RDBMS漏洞(CVE-2011-2253) 立即下载

从冯诺依曼到LED:用Qt点亮嵌入式系统的‘输出艺术’

在计算机科学的世界里,冯诺依曼体系结构为我们勾勒出了计算机的基本轮廓:输入、处理、输出,这三者构成了信息流动的闭环。而在嵌入式系统中,这个闭环往往以最直观、最物理的方式呈现——比如,点亮一个小小的LED灯。这看似简单的动作,背后却蕴含着软硬件协同设计的精髓,是嵌入式开发者对“输出”这一概念的具象化表达。

对于嵌入式初学者和软硬件结合兴趣者而言,掌握如何通过软件控制硬件输出是一项基础且关键的技能。本文将带你从计算机基本原理出发,探讨如何借助Qt这一强大的跨平台框架,在Ubuntu环境下以写文件的方式实现对开发板GPIO的控制,从而点亮或熄灭LED。我们将深入原理与实现的细节,揭示软硬件之间的巧妙联结,让你在动手实践中感受嵌入式开发的魅力。

1. 嵌入式输出控制:从理论到实践

冯诺依曼体系结构中的“输出”概念,在嵌入式系统中找到了最直接的物理映射。当我们谈论输出时,我们谈论的是如何让计算机的处理结果以某种形式影响现实世界。在开发板上,最常见的输出方式之一就是通过GPIO(通用输入输出)接口控制外部设备,如LED灯。

GPIO是嵌入式系统与外部世界交互的桥梁,它允许开发者通过软件控制硬件的状态。每个GPIO引脚都可以被配置为输入或输出模式,当配置为输出时,我们可以通过写入特定的值(通常是0或1)来设置引脚的电平状态,从而控制连接的设备(如LED)的开关。

在Linux系统中,GPIO通常通过sysfs文件系统暴露给用户空间,这使得我们可以像操作普通文件一样操作GPIO。例如,要控制一个GPIO引脚,我们只需要向特定的文件写入值即可。这种设计哲学体现了Linux的“一切皆文件”思想,也为我们的Qt控制程序提供了简洁而强大的接口。

注意:不同的开发板可能有不同的GPIO映射和文件路径,因此在编写代码前,务必查阅你所使用开发板的用户手册,确认正确的文件路径和配置方式。

2. Qt框架在嵌入式开发中的优势

Qt作为一个跨平台的C++应用程序框架,不仅在桌面和移动开发中广受欢迎,在嵌入式领域也展现出强大的实力。其信号与槽机制、丰富的UI组件以及出色的跨平台支持,使其成为嵌入式GUI开发和硬件控制的理想选择。

对于嵌入式开发而言,Qt的优势主要体现在以下几个方面:

  • 跨平台能力:Qt允许开发者在一台机器上编写和测试代码,然后交叉编译到目标平台运行。这大大提高了开发效率,尤其是在资源受限的嵌入式环境中。
  • 信号与槽机制:这是一种强大的事件处理机制,非常适合处理硬件事件(如按钮按下)和状态变化(如LED开关)。通过信号与槽,我们可以将UI事件与硬件操作紧密连接。
  • 丰富的UI组件:Qt提供了大量现成的UI组件,使得创建直观的控制界面变得简单快捷,即使对于嵌入式初学者也是如此。
  • 硬件集成能力:Qt提供了多种方式与硬件交互,包括直接文件操作、串口通信、网络通信等,使其能够灵活适应各种嵌入式场景。

在本文中,我们将重点展示如何利用Qt的文件操作能力,通过写文件的方式控制GPIO,从而实现LED的控制。这种方法虽然朴素,却体现了Unix哲学的精髓,也是许多嵌入式系统中最直接、最可靠的硬件控制方式。

3. 环境准备与开发板配置

在开始编写代码之前,我们需要确保开发环境正确设置。这包括Ubuntu开发环境的准备、Qt开发工具的安装以及目标开发板的配置。

首先,确保你的Ubuntu系统上安装了Qt开发环境。你可以通过以下命令安装Qt Creator和必要的开发库:

sudo apt update
sudo apt install qtcreator qt5-default

接下来,需要确认你的开发板与Ubuntu开发机的连接方式。通常,嵌入式开发采用交叉编译模式:在x86架构的Ubuntu机器上编译代码,然后将生成的可执行文件传输到ARM或其他架构的开发板上运行。这个过程需要安装对应的交叉编译工具链,具体步骤因开发板而异,请参考你的开发板文档。

对于GPIO控制,最关键的是确定LED对应的sysfs路径。在Linux系统中,GPIO可以通过/sys/class/gpio目录访问,而LED设备通常有专门的/sys/class/leds目录。你可以通过以下命令查看系统中可用的LED设备:

ls /sys/class/leds/

不同的开发板会有不同的LED命名和路径,例如可能是/sys/class/leds/led1、/sys/class/leds/user-led等。此外,有些开发板可能已经预配置了LED的驱动和行为(如呼吸灯效果),这可能干扰我们的控制。在这种情况下,我们需要先取消这些预设行为:

echo none > /sys/class/leds/led1/trigger

这个命令将LED的控制从系统预设的触发器(如心跳、呼吸等)改为手动控制,使我们能够通过写brightness文件直接控制LED状态。

4. Qt控制LED的完整实现

现在,让我们进入具体的代码实现环节。我们将创建一个简单的Qt应用程序,包含一个按钮用于控制LED的开关,并通过写文件的方式实现对GPIO的控制。

首先,我们创建项目头文件widget.h,定义我们的窗口类和必要的成员:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QFile>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void onPushButtonClicked(bool checked);

private:
    Ui::Widget *ui;
    QFile ledFile;
    QString ledPath = "/sys/class/leds/led1/brightness";
};

#endif // WIDGET_H

在这个头文件中,我们定义了一个Widget类,它包含一个QFile对象ledFile用于操作LED设备文件,一个字符串ledPath存储LED设备的文件路径,以及一个槽函数onPushButtonClicked用于响应按钮点击事件。

接下来,我们实现主要的cpp文件:

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    
    // 设置LED文件路径
    ledFile.setFileName(ledPath);
    
    // 检查LED设备是否存在
    if (!ledFile.exists()) {
        QMessageBox::critical(this, "错误", "LED设备不存在,请检查路径是否正确");
        return;
    }
    
    // 取消系统预设的LED行为(如呼吸灯效果)
    system("echo none > /sys/class/leds/led1/trigger");
    
    // 连接按钮的点击信号到槽函数
    connect(ui->pushButton, &QPushButton::clicked, this, &Widget::onPushButtonClicked);
    
    // 初始化按钮文本
    ui->pushButton->setText("开");
}

Widget::~Widget()
{
    delete ui;
}

void Widget::onPushButtonClicked(bool checked)
{
    // 尝试以只写方式打开LED设备文件
    if (!ledFile.open(QIODevice::WriteOnly)) {
        QMessageBox::critical(this, "错误", "无法打开LED设备文件");
        return;
    }
    
    // 根据按钮状态决定写入的值
    if (checked) {
        // 打开LED
        ledFile.write("1");
        ui->pushButton->setText("关");
        qDebug() << "LED已打开";
    } else {
        // 关闭LED
        ledFile.write("0");
        ui->pushButton->setText("开");
        qDebug() << "LED已关闭";
    }
    
    // 关闭文件
    ledFile.close();
}

这段代码实现了以下功能:

  1. 在构造函数中,我们设置了LED设备的文件路径,检查设备是否存在,并取消系统预设的LED行为。
  2. 将按钮的点击信号连接到槽函数onPushButtonClicked。
  3. 在槽函数中,根据按钮的状态(checked参数)决定向LED设备文件写入"1"(打开)或"0"(关闭)。
  4. 同时更新按钮的文本显示,提供视觉反馈。

需要注意的是,每次操作完成后都必须关闭文件,否则可能会导致资源泄漏或控制失效。

5. 进阶技巧与常见问题排查

掌握了基本的LED控制后,我们可以进一步探索一些进阶技巧和常见问题的解决方法,让我们的嵌入式开发更加得心应手。

5.1 多LED控制与封装

在实际项目中,我们通常需要控制多个LED。为了提高代码的复用性和可维护性,我们可以将LED控制逻辑封装成单独的类:

class LedController : public QObject
{
    Q_OBJECT
public:
    explicit LedController(const QString &path, QObject *parent = nullptr);
    ~LedController();
    
    bool setBrightness(int value); // 设置亮度(0-255)
    bool turnOn();                 // 打开LED
    bool turnOff();                // 关闭LED
    bool toggle();                 // 切换状态
    
private:
    QFile ledFile;
    QString ledPath;
};

这种封装方式使得我们可以轻松创建多个LED控制器实例,每个实例管理一个LED设备,大大提高了代码的模块化和可复用性。

5.2 权限问题与解决方案

在Linux系统中,直接访问设备文件可能需要root权限。如果你在运行程序时遇到"Permission denied"错误,有以下几种解决方案:

  1. 以root身份运行程序:虽然简单,但不推荐,因为这会带来安全风险。
  2. 设置setuid位:允许程序以文件所有者的权限运行,但同样存在安全隐患。
  3. 使用udev规则:这是最推荐的解决方案。你可以创建udev规则,使特定设备文件对普通用户可写。

例如,创建一个udev规则文件/etc/udev/rules.d/99-leds.rules:

SUBSYSTEM=="leds", ACTION=="add", RUN+="/bin/chmod 0666 /sys/class/leds/%k/brightness"

然后重新加载udev规则:

sudo udevadm control --reload-rules
sudo udevadm trigger

这样,所有LED设备文件都会自动设置为对所有用户可读可写。

5.3 性能优化与响应式UI

在嵌入式系统中,资源往往有限,因此性能优化尤为重要。对于LED控制这类操作,有几点优化建议:

  • 避免频繁的文件操作:每次打开和关闭文件都有开销,如果需要频繁控制LED,可以考虑保持文件打开状态。
  • 使用异步操作:文件IO可能会阻塞UI线程,导致界面卡顿。可以考虑使用QFile的异步操作或将其移到单独的线程中。
  • 减少调试输出:在生产环境中,减少qDebug()输出可以提高性能。

以下是一个保持文件打开状态的示例:

// 在类定义中添加
private:
    bool openLedFile();
    
// 实现
bool Widget::openLedFile()
{
    if (!ledFile.isOpen()) {
        if (!ledFile.open(QIODevice::WriteOnly)) {
            QMessageBox::critical(this, "错误", "无法打开LED设备文件");
            return false;
        }
    }
    return true;
}

void Widget::onPushButtonClicked(bool checked)
{
    if (!openLedFile()) {
        return;
    }
    
    if (checked) {
        ledFile.write("1");
        ui->pushButton->setText("关");
    } else {
        ledFile.write("0");
        ui->pushButton->setText("开");
    }
    
    ledFile.flush(); // 确保数据写入设备
}

这种方法减少了文件打开关闭的开销,但需要注意在程序结束时正确关闭文件。

6. 跨平台考量与实战建议

虽然本文重点介绍了在Ubuntu和特定开发板上的实现,但Qt的跨平台特性使我们的代码能够相对容易地适配其他平台和环境。

对于不同的开发板,主要差异在于GPIO的设备文件路径和可能的预配置行为。为了使代码更具可移植性,可以考虑以下策略:

  1. 使用配置文件:将设备文件路径等平台相关配置放在配置文件中,而不是硬编码在代码里。
  2. 抽象硬件访问层:创建一个抽象类定义硬件访问接口,然后为不同平台提供具体实现。
  3. 条件编译:使用Qt的预定义宏或自定义宏来区分不同平台的处理逻辑。

以下是一个使用配置文件的示例:

// 读取配置文件中的LED路径
QSettings settings("config.ini", QSettings::IniFormat);
QString ledPath = settings.value("LED/path", "/sys/class/leds/led1/brightness").toString();
ledFile.setFileName(ledPath);

对应的配置文件config.ini:

[LED]
path=/sys/class/leds/user-led/brightness

在实际项目中,我还发现一些开发板可能有特殊的GPIO控制方式,不仅仅是简单的写0和1。有些可能需要更复杂的协议或时序控制。这时候,查阅开发板的用户手册和数据手册就显得尤为重要。记得有一次我在一个项目中使用了一块不太常见的开发板,花了整整两天时间才发现需要先向一个特定的控制寄存器写入使能位,才能正常控制GPIO。这个经历让我深刻体会到,嵌入式开发既需要软件开发的抽象思维,也需要硬件开发的细致和耐心。

嵌入式开发是一个充满挑战和乐趣的领域,软硬件的结合让我们能够以代码直接影响物理世界。通过Qt这样的高级框架,我们可以在保持开发效率的同时,实现底层的硬件控制。希望本文能为你打开嵌入式开发的大门,让你在点亮第一个LED时,感受到那种连接数字与物理世界的奇妙体验。

流媒体影视爆款预测数据集6000部剧集电影21特征 本数据集模拟流媒体平台影视内容特征,包含6000部剧集、电影与纪录片样本、21个字段,覆盖内容类型、题材、出品国家、上映年份与月份、内容分级、是否平台原创、是否系列续集、改编来源、时长、季数、明星影响力、制作与营销预算、观众评分、社交热度等维度。提供top10_hit分类目标(进入平台榜单前十并保持4周以上)与views_28d_m回归目标(上线28天观看量),结果字段独立分离,便于练习避免目标泄漏。数据干净完整、无缺失值、无需表关联,直接可用于分类、回归、探索性分析,以及发布档期选择、题材与续集表现、单位营销成本观看效率等研究,适合影视行业分析、推荐系统与机器学习教学。说明:本数据为Python生成的合成数据,仅反映生成规则,不含真实节目与个人信息。许可:CC0公有领域,可自由使用与二次分发。 立即下载

相关推荐

AI大模型安全架构落地解决方案.pptx

AI大模型安全架构落地解决方案.pptx

windows终端服务

. 终端服务简介  终端服务是在windows2000中提供的允许用户在一个远端的windows2000服务器上执行基于windows的应用程序的技术。   对于大部分的公司而言,他们所采用的计算模型是各不相同的。使用windows2000操作系统系列平台,用户可以选择最适合他们的计算模型,这有可能 是高度分布的客户机/服务器模型或者也可能是高度集中的中央计算模型。通过windows2000服务器

black_ben的专栏 3985

国央企创新负责人如何提升企业创新与技术合作的精准度?.docx

国央企创新负责人如何提升企业创新与技术合作的精准度?

服务器系统及软件常见漏洞

最近由有一个什么事情,大家都懂。上头发了个加密传真,要求加强网络安全检查,于是乎所有服务器进行了大扫描,现整理一些常见漏洞... 漏洞名称 允许Traceroute探测 远端WWW服务支持TRACE请求 远端WWW服务提供了对WebDAV的支持 远端WEB服务器上存在/robots.txt文件 远端VNC服务正在运行 远端HTTP服务器类型和...

runfeel 2220

科技中介服务机构在协助企业对接科研成果时,如何提升服务响应速度与专业化水平.docx

科技中介服务机构在协助企业对接科研成果时,如何提升服务响应速度与专业化水平

高校技术转移办公室人员如何利用智能工具简化技术成果的推介与转化流程?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Windows 远程桌面授权服务远程代码执行漏洞(CVE-2024-38077)

开启该服务(Windows 远程桌面授权服务)并且操作系统版本在受影响范围的 Windows Server 受影响,没有开启该服务但是操作系统版本在受影响范围的Windows Server 不受影响,Windows 10、Windows 11 等非 Server 版本的操作系统,不论是否开启Windows 远程桌面(RDS),均不受影响。这一漏洞存在于Windows远程桌面许可管理服务(RDL)中,该服务被广泛部署于开启Windows远程桌面(3389端口)的服务器,用于管理远程桌面连接许可。

企业实战系列集 ●●● https://ximenjianxue.blog.youkuaiyun.com 1万+

solong 图像处理器 - v3.4 - 吾爱大佬 by 金牌软件 .exe

solong 图像处理器 _ v3.4 _ 吾爱大佬 by 金牌软件 .exe

加密狗 检测到程序在终端服务器上运行

原因: 1. 客户从电脑A远程电脑B,去访问加密了的程序,虽然电脑B上插着超级狗U盘。 2. 如果确实需要远程控制,需要打开远程桌面的权限!

u012219045的专栏 1367

西门子 S7 PLC 对接 MES 系统:HTTP/JSON 通信实施指南

内容概要:本文介绍了通过IGT-DSER智能网关实现西门子S7-1500 PLC(采用优化访问DB数据块)与MES系统的对接方案。重点阐述了使用S7-PLUS标签方式读取PLC变量标签数据,结合网关边缘处理能力进行数据换算与JSON封装,并通过HTTP/GET或POST方式将数据上传至MES系统的技术路径。文中详细说明了网络配置、变量映射、触发逻辑设置、JSON结构生成、联调验收流程及常见故障排查方法,强调无需修改PLC程序即可完成集成,适用于工业现场快速部署。; 适合人群:自动化工程师、MES实施工程师、工业网络与设备运维人员; 使用场景及目标:①实现西门子S7-1500等支持优化DB的PLC与MES系统高效对接;②在不改动原有PLC程序的前提下完成数据采集与上传;③通过标准化JSON格式与HTTP协议实现与各类业务平台的数据交互;④提升系统集成效率并确保数据传输的准确性与可监控性; 阅读建议:此资源以实际工程案例为基础,建议读者结合IGT-DSER网关参数管理软件操作实践,重点关注标签配置、触发条件设定与JSON字段映射的细节,并在测试环境中验证请求与响应闭环后再投入正式运行。

从零构建NVENC编码器:一个游戏开发者的实战手册

本文详细介绍了如何从零构建NVENC编码器,特别针对游戏开发者提供实战指南。内容涵盖NVENC基础概念、DirectX纹理捕获、异步编码优化及高级特性配置,帮助开发者高效集成硬件编码技术到游戏引擎中,实现高性能游戏录制和直播功能。重点解析了NVIDIA专用编码芯片的优势与API使用技巧。

weixin_29292431的博客 366

Qt控制开发板的LED

我们设计简单一点我们要使用信号和槽来使用按钮来控制灯的亮灭,有两种状态,那我们就要是哟个bool类型的信号1.2.

weixin_70293633的博客 1699

Prometheus安装部署说明

1. 安装Prometheus Server   Prometheus基于Golang编写,编译后的软件包,不依赖于任何的第三方依赖。用户只需要下载对应平台的二进制包,解压并且添加基本的配置即可正常启Prometheus Server。 1.1 下载并解压二进制安装包 通过Prometheus的官方网站:https://prometheus.io/download/,下载最新版本的Prometheus安装包 #下载、解压、创建软链接 cd /export/ wget https://githu..

m0_38100619的博客 5014

Windows 10系统的terminal service终端服务

terminal service是终端服务,此服务允许多位用户连接并控制一台机器,且在远程计算机上显示桌面和应用程序。如需要使用远程功能时就必须开启terminal service服务。而在Windows 10系统中,terminal service服务已更改为Term Service,所以在Windows10系统中使用远程功能时,只需开启Remote Desktop Services服务就可以了。如果要防止远程使用此计算机,可在【系统属性】控制面板项目的【远程】选项卡上:去掉允许远程协助连接这台计算机..

顺其自然~专栏 1万+

保姆级教程:在Win10/Win11上搞定AppScan 10.0.0安装与许可证激活(含常见报错解决)

本文提供AppScan 10.0.0在Win10/Win11上的详细安装与许可证激活指南,涵盖环境准备、分步安装、文件替换技巧及常见报错解决方案。通过专业的安全测试工具部署实践,帮助用户高效完成安装并避免常见陷阱,提升Web应用安全扫描效率。

weixin_30800987的博客 425

STM32H750实战:如何用CubeMX配置NAND Flash时序(附常见问题排查)

本文详细解析了STM32H750通过CubeMX配置NAND Flash时序的实战技巧,包括硬件连接、时序参数计算与优化策略,以及常见问题如RGB屏幕干扰、多片选冲突的解决方案。特别针对NAND Flash的时序配置和抗干扰设计提供了实用代码示例和优化建议,帮助开发者提升系统稳定性和性能。

weixin_29176179的博客 365

全程图解 手把手教您开启windows终端服务

一、什么是远程桌面?   远程桌面是微软公司为了方便网络管理员管理维护服务器而推出的一项服务。从windows 2000 server版本开始引入,网络管理员使用远程桌面连接程序连接到网络任意一台开启了远程桌面控制功能的计算机上,就好比自己操作该计算机一样,运行程序,维护数据库等。远程桌面从某种意义上类似于早期的telnet,他可以将程序运行等工作交给服务器,而返回给远程控制计算机的仅仅是图象,...

weixin_33810006的博客 2877

《Python星球日记》 第72天:问答系统与信息检索

《Python星球日记》 第72天:问答系统与信息检索,在前面的日子里,我们学习了自然语言处理的基础知识,包括文本预处理、词向量、Transformer架构和各种预训练模型。今天,我们将探索问答系统这一NLP的重要应用,以及如何结合信息检索技术构建智能问答系统。

Code_流苏:在代码中寻诗意,在实践中觅真知 1075

打造自己的Windows终端服务客户端

打造自己的Windows终端服务客户端2006-12-02 08:40 1. 首先确保你的机器上存在mstscax.dll,如果没有这个文件,可以从http://download.microsoft.com/download/whistler/tools/1.0/wxp/en-

2135

YOLOv11涨点改进 | 全网独家下采样改进、细节涨点篇 | TGRS 2025 | 引入PWD参数化小波下采样模块,减少下采样过程中小目标的关键细节丢失,即插即用,助力高效涨点发论文

本文提出了一种改进YOLOv11小目标检测性能的参数化小波下采样(PWD)模块。PWD通过小波变换保留目标细节信息,增强频率域特征表达,有效解决了传统下采样导致的小目标信息丢失问题。该模块采用双分支设计,结合自适应频率选择和空间补偿机制,在红外图像和低光场景中表现出更强的抗干扰能力。实验表明,PWD能显著提升YOLOv11对弱纹理和低对比度目标的检测精度,同时保持计算效率。文章详细介绍了PWD的结构原理、实现代码及在YOLOv11中的集成方法,为小目标检测提供了有效的改进方案。

Ai缝合怪、助力小伙伴高效发论文 238

微信小程序 - 最新详细实现跳转打开第三方网站方法流程及示例代码,在小程序内直接打开H5页面或微信公众号文章后台业务域名配置及下载校验文件上传服务器,嵌入外部网站跳转第三方h5网页(详细配置及代码)

微信小程序,打开第三方网站,放校验文件,怎么配置业务域名,后台配置,怎么打开外部没有关联的网站,小程序直接打开公众号文章,指定页面,跳转第三方url,跳转到外部网站,小程序跳转到任意外部网页,网站链接,跳转到其他网页(外部链接),小程序嵌入外部h5链接,校验文件怎么放到对方服务器上,要跳转到网站没权限放过去,校验文件验证域名,把校验文件放到对面网站,别人的服务器也打不开没权限怎么放呢,勾选不校验合法域名,txt,打不开别人的网页怎么办,真机调试打不开,无法跳转,有什么其他办法不放校验文件吗,别人不可能同意,

🏆 前端领域优质创作者 1万+
上一篇: openbmc ast2600 jffs2挂载mtd5(rwfs)异常定位与SPI驱动修复
下一篇: GPIO(结构解析 + 模式实战 + 应用避坑)
普通网友
博客等级 码龄4年 95粉丝 1459原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值