Step to UEFI (287)Cpp UEFI 002 Cout

我们看到的最简单的 C++ 代码是如下形式:

问题来了:如何在 UEFI 下面实现这种形式的代码?根据【参考1】,cout << n; 中,<< 是个运算符,n 是个变量,运算符应该接的是变量,所以 cout是个变量,但是在C++中这种高级变量叫做对象。cout 是一个对象。

因此,我们可以通过定义 cout 这个对象,然后定义 << 这个运算符即可。完整代码如下:

运行结果如下:

已经非常像了。接下来还有一个 std 的问题。这个可以通过 Namespace来实现。“编写程序过程中,名称(name)可以是符号常量[......]

阅读全文

Windows 内存占用工具

最近因为测试需要一款能够占用内存的软件,于是求助天杀,请他帮忙编写了一个能够占用指定内存大小的代码。

在使用之前因为微软的限制需要对 Windows进行一些设定:

1.运行 gpedit.msc ,打开“本地组策略编辑器”

2.找到位于 “计算机配置”-> “Windows设置”->“安全设置”->“本地策略”->“用户权限分配”中的“锁定内存页”

3.接下来的目标是将“Administrators”加入其中。点击“添加用户组或组”。

4.点击“对象类型”按钮,勾选其中的“组”

5. 之后在“输[......]

阅读全文

串口速度测试工具

写了一个简单的串口测试工具,测试的是写入的速度。简单的说,就是打开串口,然后向里面写入数值,计算写入耗费的时间。通常来说,我们使用 USB 转串口设备,决定速度的因素有两个:1. USB 处理数据的时间 2.设备转串口的速度。其中最主要的因素是后者。

使用 CH343 进行测试:

'

编译后的 EXE 下载:

[......]

阅读全文

Ch569 项目从EXAM目录独立出来的方法

在使用 MounRiver 的过程中,你可能会遇到将 Exam中的例子搬移到其他路径之后无法工作的问题,这是由于Exam项目都依赖了\EXAM\SRC 下面的文件。解决这个问题的方法是:

重复2-5步骤,直到所有的错误消失。

附件是一个按照上面修改过的 SimulateCDC 的例子, 可以放在任意的位置。

参考:

1.https://www.wch.cn/downloads/CH569EVT_ZIP.html

[......]

阅读全文

Step to UEFI (286)Cpp UEFI 001 类构造函数

C++中使用关键字 class 来定义类, 其基本形式如下:

有一种比较特别的函数,被称为“构造函数”,名称和类名称相同。在创建类的对象时,编译器就运行一个构造函数。

设计一个Time类如下,其中有2个构造函数,其中是一个是构造函数的重载。如果在创建过程中有加参数,那么会调用重载之后的构造函数。

完整代码如下:

上述代码运行结果如下:

此外,还有析构函数,与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。

有兴趣的朋友可以自行研究。

参考:[......]

阅读全文

ESP32 S3 USB鼠标转蓝牙设计

ESP32-S3 是乐鑫科技推出的一款 WIFI/蓝牙 MCU,它可以看作是 ESP32-S2 的升级版本,相比S2 增加了蓝牙功能,因此我们有机会设计各种蓝牙和USB 相关的作品。这次带来的就是能够将 USB 鼠标转为蓝牙鼠标的装置。

电路比较简单,基本上相当于ESP32-S3最小系统引出 USB 接口即可:

板子上分别有一个USB公头和母头,公头用于取电,母头用于连接设备:

程序基本结构是:

其中的 USB Host 基于esp32-usb-host-demos-main 库。BLE 鼠标基于ESP32-BLE-Mouse-Main库。因为这个库并不支持[......]

阅读全文

EDK2 Stable202311来了

去年11月份 edk2 202311正式发布在:

https://github.com/tianocore/edk2/releases/tag/edk2-stable202311

从 History 来看,解决了不少Bug:

和之前类似,这里放上一个完整版,补全了所有的三方库,大小是136MB 左右。

链接:

https://pan.baidu.com/s/1eFC1XwfNTKj7hs_JRRieuw?pwd=LABZ

提取码: LABZ

个人建议:除非有特别明确的目的,否则没有必要追求最新的版本, 所谓 “小车能跑只管推”。

[......]

阅读全文

Step to UEFI (285)Cpp UEFI 000 实验环境的搭建

在之前的文章中【参考1】介绍了一个基于 Visual C++非常简单的 UEFI 开发框架。偶然的机会发现使用这个架构可以方便的实现C++ 的编写。于是,从这里开始,介绍如何使用这个框架学习简单的C++知识。

这次首先介绍实验环境的配置。在 C:\BuildBs\CppStudy\ 下创建 CPP 目录,其中放置测试使用到的文件:

其中 gfx.cpp 是源代码,g1.bat 是用于编译的批处理,这里直接使用批处理来进行编译,其中写入的都是绝对路径,这样更加直观容易理解发生了生么。

编译方法是打开 VS2019 X86 Command窗口(必须使用X64 窗口),在目录下[......]

阅读全文

EasyX 生成计时器的视频

前一段想在一个视频中增加一个计时器的画面,然后忽然发现视频编辑工具并没有直接提供这样的功能。通常建议的手段是:直接插入其他计时器的视频。最简单的做法是在手机上安装一个秒表之类的软件,然后通过内置的录屏功能得到需要的视频。只是这样方法很难获得需要的背景颜色和文字颜色。

正好最近研究了 EasyX 的使用,于是通过编程生成图片,然后使用FFMpeg 把图片粘成视频。

这次测试的代码如下:

用于生成视频的命令如下:

最终的结果可以在B站看到

【EasyX 生成1分钟计时器视频】

https://www.bilibili.com/video/BV1fi4y[......]

阅读全文