使用 QEMU 启动 openEuler RISC-V 系统
本文部分转载、整理自openEuler社区、qemu.wiki
原文章链接接
通过 QEMU 仿真 RISC-V 环境并启动 openEuler RISC-V 系统
installation (openeuler.org)
Hosts/Linux - QEMU
安装QEMU系统环境Ubuntu 22.04.4 LTS ( WSL2 )
安装支持 RISC-V 架构的 QEMU 模拟器目前大多数发行版都自带qemu-riscv64软件包,但由于自带的包常常过旧,我们采用手动安装。
安装之前查看官方 wiki 获取帮助,安装必要的软件包 Hosts/Linux - QEMU
Required additional packages
git (30 MiB), version manager
glib2.0-dev (9 MiB), this automatically includes zlib1g-dev
libfdt-devel
For Ubuntu LTS (and maybe other Debian based distributions), all r ...
操作系统实验二
分析µC/OS-II操作系统信号量机制任务说明了解µC/OS-II的信号量的定义及作用,并能够使用信号量保证进程间的同步。
要求应用程序中有一个函数Fun(),试编写程序使得任务MyTask需在6秒后经过任务YouTask同意才能调用这个函数一次。
示例结果如下图所示。
代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146/******************** ...
操作系统实验一
uC/OS-II中的任务创建任务说明本次试验拟定安排在第二章讲解进程控制之后进行,需要了解µC/OS-II的任务控制块结构及作用,任务堆栈的定义及作用,以及使用µC/OS-II提供的系统调用来创建任务。
要求根据示例程序编写创建具有两个不同优先级别任务的程序,两个任务分别是MyTask和YouTask。MyTask优先级为1,每隔3秒钟打印一次学号;YouTask优先级为2,每隔1秒打印一次姓名全拼。示例如下:
代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980#include "includes.h"#define TASK_STK_SIZE 512 //任务堆栈长度OS_STK MyTaskStk[TASK_STK_SIZE]; //定 ...
简单模拟
同学出的模拟题
题目描述最近可莉要出新皮肤了,她高兴坏了,决定炸个鱼庆祝一下。但是她又害怕被琴团长发现,于是决定去璃月的渌华池旁边炸鱼。 那里有着三种鱼类,金赤假龙、锖假龙、花锵。可莉害怕动静太大把仙人引来,于是决定用威力较小的炸弹。 每次爆炸只能把以炸弹为中心上下左右距离为r内的鱼炸死。 数据范围 池水的大小为100*100; 每种鱼的数量不超过5条; 炸弹数量0≤n≤5;
输入第一行输入一个n。表示有n颗炸弹。 第二行输入a,b,c。表示有a条金赤假龙、b条锖假龙、c条花锵。 接着三行分别输入所有金赤假龙、锖假龙、花锵的坐标(x,y); 接着输入n行,每行三个数,x,y,r;(表示炸弹的坐标(x,y),爆炸半径是r)
输出输出只有一行,表示剩余的金赤假龙、锖假龙、花锵各有多少条。
样例输入1234567831 1 11 14 23 65 5 15 3 23 1 2
样例输出10 1 1
解答123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 ...
2023GPLT L2-1 堆宝塔
L2-1 堆宝塔堆宝塔游戏是让小朋友根据抓到的彩虹圈的直径大小,按照从大到小的顺序堆起宝塔。但彩虹圈不一定是按照直径的大小顺序抓到的。聪明宝宝采取的策略如下:
首先准备两根柱子,一根 A 柱串宝塔,一根 B 柱用于临时叠放。
把第 1 块彩虹圈作为第 1 座宝塔的基座,在 A 柱放好。
将抓到的下一块彩虹圈 C 跟当前 A 柱宝塔最上面的彩虹圈比一下,如果比最上面的小,就直接放上去;否则把 C 跟 B 柱最上面的彩虹圈比一下:
如果 B 柱是空的、或者 C 大,就在 B 柱上放好;
否则把 A 柱上串好的宝塔取下来作为一件成品;然后把 B 柱上所有比 C 大的彩虹圈逐一取下放到 A 柱上,最后把 C 也放到 A 柱上。
重复此步骤,直到所有的彩虹圈都被抓完。最后 A 柱上剩下的宝塔作为一件成品,B 柱上剩下的彩虹圈被逐一取下,堆成另一座宝塔。问:宝宝一共堆出了几个宝塔?最高的宝塔有多少层?
输入格式:输入第一行给出一个正整数 N(≤103),为彩虹圈的个数。第二行按照宝宝抓取的顺序给出 N 个不超过 100 的正整数,对应每个彩虹圈的直径。
输出格式:在一行中输出宝宝堆 ...
2023GPLT L1题解 Pt.2
L1-5 猜帽子游戏描述宝宝们在一起玩一个猜帽子游戏。每人头上被扣了一顶帽子,有的是黑色的,有的是黄色的。每个人可以看到别人头上的帽子,但是看不到自己的。游戏开始后,每个人可以猜自己头上的帽子是什么颜色,或者可以弃权不猜。如果没有一个人猜错、并且至少有一个人猜对了,那么所有的宝宝共同获得一个大奖。如果所有人都不猜,或者只要有一个人猜错了,所有宝宝就都没有奖。下面顺序给出一排帽子的颜色,假设每一群宝宝来玩的时候,都是按照这个顺序发帽子的。然后给出每一群宝宝们猜的结果,请你判断他们能不能得大奖。
输入格式:输入首先在一行中给出一个正整数 N(2<N≤100),是帽子的个数。第二行给出 N 顶帽子的颜色,数字 1 表示黑色,2 表示黄色。再下面给出一个正整数 K(≤10),随后 K 行,每行给出一群宝宝们猜的结果,除了仍然用数字 1 表示黑色、2 表示黄色之外,0 表示这个宝宝弃权不猜。同一行中的数字用空格分隔。
输出格式:对于每一群玩游戏的宝宝,如果他们能获得大奖,就在一行中输出 Da Jiang!!!,否则输出 Ai Ya。
输入样例:12345651 1 2 1 230 1 2 ...
2023GPLT L1题解 Pt.1
前言发现站里的文章大多都是笔记类,比较面向定义和解释,为了高产(一月几更绝对不是因为摆)。
正好前几天蓝桥天梯比完了,趁着这段时间写下题解,提提产量,顺便也记录一些有意义的题目。
L1-1 最好的文档有一位软件工程师说过一句很有道理的话:“Good code is its own best documentation.”(好代码本身就是最好的文档)。本题就请你直接在屏幕上输出这句话。
解析略
L1-2 什么是机器学习描述输入格式:输入在一行中给出两个整数,绝对值都不超过 100,中间用一个空格分开,分别表示面试官给出的两个数字 A 和 B。
输出格式:要求你输出 4 行,每行一个数字。第 1 行比正确结果少 16,第 2 行少 3,第 3 行少 1,最后一行才输出 A+B 的正确结果。
输入样例:19 10
输出样例:1234316181
解析就是个简单的加减运算
1234567891011121314151617#include <bits/stdc++.h>using namespace std;int main(){ int a,b; cin > ...
将网站收录到bing和Google 添加sitemap
由于今天突然发现自己的网站被必应收录了,索性就把它提交给搜索引擎吧
别问为什么没有百度
Hexo配置文件准备检查根目录下的 _config.yml中sitemap(站点地址)是否开启
确认开启后安装 sitemap
生成sitemap安装1$ npm install hexo-generator-sitemap --save
这样,我们就获得了一份站点地址
当然,你需要执行 hexo cl 和 hexo g 才能生成public文件并在其中找到它
提交网站Google为了确定你是网站管理员,我们需要通过验证。
进入Google Search Console 输入网址
可以是二级域名或者子域名,这里以子域名继续
下载验证文件,将它放到
根目录 \ themes \ 你的主题 \ source 中
注意,不是根目录下的source!!!
部署并验证进入根目录,一键三连将它部署
123hexo -cleanhexo -ghexo -d
部署完毕后,点击验证,稍等片刻
如果一切顺利,恭喜
设置sitemap
在sitemap地址中输入 sitemap.xml 提交
由于服务器有延 ...
双链表及基本操作( 类 )
链表( Linked List )链表是一种线性数据结构,由一系列节点组成。每个节点包含两个部分,一个是存储数据的部分,另一个是指向下一个节点的指针。与数组不同的是,链表中的节点在内存中不一定是连续存储的。
链表可以分为单向链表和双向链表两种类型。在单向链表中,每个节点只有一个指向下一个节点的指针,而在双向链表中,每个节点有两个指针,一个指向前一个节点,另一个指向后一个节点。
链表的插入和删除操作非常高效,因为只需要修改节点的指针即可完成操作。但是,链表的访问操作需要从头节点开始,逐个遍历直到找到目标节点,时间复杂度为O(n),相比数组的O(1)访问时间要慢很多。
链表的优点是可以灵活地动态添加和删除节点,而且在内存管理方面比数组更加灵活。链表广泛应用于算法和数据结构中,例如链表可以用来实现栈、队列、哈希表等数据结构。
因为单链表比较简单,结构也比较单一,本篇文章就不做介绍
双链表 ( Doubly Linked List )
双链表 (DLL) 包含一个额外的指针 prev,以及 next 指针和链表中的 data
声明我们以c++中的类为例
123456789101112131 ...
指针的简单使用
本人很菜,决定先学下指针最简单的使用,便于调用函数
相关概念指针变量的声明指针变量的声明需要指定变量类型和指针所指向的数据类型,例如:
123int* p; // 声明一个指向整型变量的指针变量pchar* q; // 声明一个指向字符型变量的指针变量qfloat* r; // 声明一个指向浮点型变量的指针变量r
取地址符& 指针运算符***&**是取地址符,可以用来获取变量的内存地址。例如:
123int a = 10;int* p;p = &a; // 将a的地址赋值给指针变量p
**是指针运算符,可以用来获取指针所指向的变量的值*,也可以用来修改指针所指向的变量的值。例如:
1234int a = 10;int* p = &a;printf("%d\n", *p); // 输出10,表示指针p所指向的变量的值*p = 20; // 修改指针p所指向的变量的值为20
指针的运算指针可以进行加减运算,指针加上一个整数n的结果是指针指向的地址加上n倍指针所指向 ...