HNU-夏季小学期工训大作业-OLED屏显示
大二夏小学期第二阶段要求基于STC板完成一个课程设计,本质上就是抄来抄去换名字水过去,助教的验收更是水之又水,通过验收时到达的顺序来划分分数段。反正水过去就完了,抄来抄去也是没意思,想起以前买过一个oled小屏幕,于是决定基于这个屏幕来完成我的大作业。写这篇文章记录一下完成这个项目的过程,希望可以让有缘人在使用屏幕的时候少走一些弯路。
项目源代码地址:https://github.com/WuJean/HNU/tree/main/%E5%B7%A5%E8%AE%AD
项目准备硬件准备
某宝0.96寸oled屏 4针接口
公对母杜邦线
由于OLED自带的接针和STC板上的接口并不是直接对应,故需要杜邦线来对应接针
具体的对应关系为:
OLED
STC
GND
GND
VCC
VCC
SCL
P1.0
SDA
P1.1
资料准备参考0.96寸OLED程序源码-51例程
源码中为我们提供了几个调用OLED的基本库:
oled.c oled.h oledfont.h bmp.h
其中oled.c中实现了通过提前定义在oledfont.h以及bmp.h中的字 ...
ucore-lab2
完成ucore-lab1后总觉得做实验的过程怪怪的,每个练习的关联性并不强,有许多内容需要打开搜索引擎获得答案,难度缺少梯度做起来很难受。直到我某天闲着无聊二刷了lab0和lab1,才发现我所疑惑的一切问题都藏在了参考资料中,可能遇到的坑以及相对应的解决方法,甚至是不同练习之间的联系以及整个设计的框架都在参考资料中有详细的说明。
故我认为ucore的最佳做法是先阅读完实验原理再开始着手做相关练习,不要被内容的顺序所迷惑,这样才能真正有所得。
本周刚刚学完linux的内存管理,并且肝完了小班课的slab原理,顺带了解了一下分段和分页机制,希望在本次的lab2-内存管理模块中能亲手实现内存管理的机制,对内存管理有更深刻的理解。
实验目的
理解基于段页式内存地址的转换机制
理解页表的建立和使用方法
理解物理内存的管理方法
实验内容
了解如何发现系统中的物理内存
了解如何建立对物理内存的初步管理
了解页表相关的操作
练习0 merge将实验1的代码填入本实验中代码中有“LAB1”的注释相应部分。提示:可采用diff和patch工具进行半自动的合并(merge)
在ucore/la ...
CASPP-bomblab
开始写bomblab了,听说这是所有lab里最有趣的lab。反思一下写这篇博文既想当作实验报告,又想当成一个教程,边做边写总会出现一些纰漏,故前半部分记录了做lab的全过程,后半部分再做全局的总结和思考。
前置知识实验一览Phase 1反汇编出phase_1的汇编代码:
1(gdb) disas phase_1
123456789101112Dump of assembler code for function phase_1: 0x08048b60 <+0>: sub $0x1c,%esp 0x08048b63 <+3>: movl $0x804a284,0x4(%esp) 0x08048b6b <+11>: mov 0x20(%esp),%eax 0x08048b6f <+15>: mov %eax,(%esp) 0x08048b72 <+18>: call 0x80490a4 <strings_not_equal> 0x08 ...
ucore-lab0 and 1
本实验仅仅是记录个人的实验过程,并不带有任何教程性质和可参考性为了方便在远程访问,本实验将全程在nuc9上编写
实验环境:
nuc9幽灵峡谷
esxi8.0 ubuntu22.04
必须是desktop版本!一定要!
设置实验环境直接在github拉取代码文件:
1git clone https://github.com/chyyuu/ucore_lab.git
安装硬件模拟器QEMU
123sudo apt-get install qemu-system将qemu动态链接上sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu
编程方法和通用数据结构了解一个操作系统的底层构造,最重要也是最基础的就是了解它的编程方法和通用的数据结构。
编程方法采用了面向对象编程以及方法接口:
123456789101112131415161718192021// pmm_manager is a physical memory management class. A special pmm manager - XXX_pmm_manager// o ...
HNU-数据挖掘-面向第一次作业学习
第一题题目假设所分析的数据包括属性 age,它在数据元组中的值(以递增序)为
13 ,15 ,16 ,16 ,19 ,20 ,20 ,21 ,22 ,22 ,25 ,25 ,25 ,25 ,30 ,33 ,33 ,35 ,35 ,35 ,35 ,36 ,40 ,45 ,46 ,52,70。
a. 该数据的均值是多少?中位数是什么?
b. 该数据的众数是什么?讨论数据的模态(即二模、三模等)。
c. 该数据的中列数是多少?
d. 你能(粗略地)找出该数据的第一个四分位数(Q1)和第三个四分位数(Q3)吗?
e. 给出该数据的五数概括。
f. 绘制该数据的盒图。
g. 分位数-分位数图与分位数图有何不同?
解答a. 平均值:30.15 中位数:31.5
模态指的是一组数据中出现最频繁的数值
b. 众数是25和35 有两模态
中列数是指将数据按升序排列后,取最中间的五个数字的平均数。
c. 中列数:24.4
在统计学中,四分位数是将一组数据分为四个等份的值。四分位数的概念是用于描述数据的分布和形态。通常,我们使用三个四分位数来描述数据的分布,它们分别是:
第一个四分位数Q1:将数据集分为 ...
Esxi下配置ubuntu环境及tesla p4驱动安装
本文记录了在nuc9上的esxi环境下安装ubuntu22.04虚拟机,并安装tesla p4驱动的过程。
笔者的windows电脑嫌麻烦没装双系统,虽然wsl2用起来非常丝滑,但由于还没折腾好ssh连接wsl,以及win机子总不可能一直开着机,在外想用下linux环境时还是有一台本地的主机比较方便;有了上次过年背电脑回家的惨痛经历,以后回家就背nuc9回家了mac+nuc9+tesla p4,移动工作站yyds!
esxi环境下安装ubuntu虚拟机获取ubuntu ISO在ubuntu官网下载iso文件,笔者暂时没有可视化桌面的需求,故下载LTS版本的ios
https://ubuntu.com/download/server
将下载好的镜像文件上传到esxi的目录中:
切换显卡直通在 ESXi (VMware ESXi) 中,显卡直通(GPU Passthrough)是一种技术,允许将主机上的物理显卡直接分配给虚拟机,使虚拟机能够独占地访问显卡资源,而不与其他虚拟机或主机共享。这使得虚拟机可以在物理显卡上运行图形密集型应用程序,如游戏、图形渲染、人工智能等,而无需通过虚拟化软件 ...
Make and Makefile
一、如何编译一个程序
要编译一个C语言程序,通常需要使用C编译器将源代码文件编译成目标文件,再将多个目标文件链接成可执行文件。以下是使用GCC编译器编译C语言程序的基本步骤:
编写C语言程序的源代码文件,通常以.c为文件扩展名。例如,我们可以创建一个名为main.c的源代码文件,包含以下代码:
1234#include <stdio.h>int main() { printf("Hello, world!\n"); return 0;}
打开终端,并切换到C语言程序所在的目录。
使用GCC编译器将源代码文件编译成目标文件。命令格式为:
1gcc -c source_file.c -o object_file.o
其中,source_file.c为源代码文件名,object_file.o为目标文件名。例如,我们可以使用以下命令将main.c编译成目标文件main.o:
1gcc -c main.c -o main.o
如果程序包含多个源代码文件,则需要分别编译每个源代码文件,并将它们链接成可执行文件。命 ...
I2C工训摸鱼指北
首先先甩个图上来,这些东西我真的是一点都没听,每次去工训就和傻子一样坐着,直到要验收了才想起居然要做东西。相信很多同学有和我一样的感受,所以我在验收前一周的工训课上决定发奋图强,一个小时速通工训,为后来者减少这个东西的恶心程度。(其实是I2C协议让我提起了一点学习的兴趣)
速通开始
如果仅仅是要过的话,只要完成单元测试,上课没去别被点到(第二次课开始可能点名),提交了实验报告就能过了。但是我们速通需要的是精致速通,如何花最少的时间学到一点点东西;拿到不算低的分数;收获一点点成就感,尤为重要。
我们看占比最多的实验报告到底包含了什么内容:
编写TestBench的内容(一点点课后习题)可以加点仿真的内容
ModelSim工具的使用(操作的截图)可以和上一步合并
分析代码
实验总结
实验报告部分(1)如何描述组合电路 、时序电路、状态机?
组合电路是一种最基本的电路,它的输出只取决于当前的输入,没有任何延迟或存储,因此在响应时间上非常快速。它通常用于执行简单的逻辑操作,例如布尔运算、逻辑比较和选择。
时序电路是一种电路,它包含了存储器元件,可以在内部存储一定数量的位或字,并且可 ...
腾讯云域名转cloudflare
折腾了个homelab,已经弄好了frp内网穿透,想搭建一些自己的服务放到公网上访问;买好域名做好解析和ssl之后短暂的访问成功了一会,再次访问便被要求备案,就像下面这样:
原因是当域名解析到国内的服务器时都需要备案处理。
虽然我没有搞奇奇怪怪东西的想法,我的服务也没有提供给无法科学上网的人的必要,一大堆审核以及不定时的电话盘问很坏人的心情,我搭个网站搞搞服务 整得像搞破坏一样。为了更加自由的域名解析以及为将来更换国外的vps做准备,我决定将域名解析迁移到知名的cdn服务商cloudflare上。
折腾的过程注册cloudflare并添加域名官网:Cloudflare - The Web Performance & Security Company
首先打开 Cloudflare 的官网,点击 Sign Up 注册账号。输入邮箱和密码,点击 Create Account 即可。
注册完成后点击Add a Site添加自己的域名
选择免费的服务即可
更换dns服务器
由于我们的域名是在腾讯云购买的,我们需要手动指定该域名的dns服务器
打开腾讯云的域名界面:
用cloud ...
不同操作系统编译的异同
操作系统不同的操作系统 windows linux macos
关于操作系统是这样定义的: 操作系统(英语:Operating System,缩写:OS)是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。
什么是操作系统
OS 存在的意义即是:提供硬件资源的高效管理
OS提供cpu、存储功能、外部io的封装管理;并对外提供抽象的硬件服务
OS之间本质的不同在于内核的不同,在于内核对资源的管理和分配理念不同
从硬件角度讲,计算机硬件所提供的功能其实非常简单:CPU 提供的数学四则运算(包括逻辑运算),内存/硬盘提供的数据存储功能,各类接口提供的与外部世界做交互的 I/O。剩下的硬件,都是为了高效整合这三块资源而存在的。而 OS 本身,就是对这三块资源的统一管理与封装,对应用层的用户提供抽象的硬件服务。
它们的本质不同,在于各自的 OS kernel 的实现的不同。也即是,虽然大家面对的 ...