- 博客(64)
- 收藏
- 关注
原创 第 7 章 I/O 名字空间
在 QNX 中,微内核(Microkernel) 只提供最基本的功能:设备驱动程序、I/O管理、文件系统等 这些操作系统的大部分服务 并不直接在内核中运行,而是作为用户级进程存在。I/O 服务是由在系统运行中动态启动的进程来完成的。由于 QNX 的文件系统是可选的,所以它的路径名空间也没有像其它大多数铁板一块的系统那样被建立在文件系统中。QNX 中,路径名由进程管理器管理。在 QNX 中,路径名空间被划分为若干个授权区域。任何希望提供文件 I/O 服务的进程(即 I/O 资源管理器)将向进程管理器注册一个前
2025-12-16 00:15:00
1949
原创 第 6 章 进程管理器
进程管理器与微内核一起紧密配合,提供基本的操作系统服务。,但是,在。正因为如此,像其它进程一样,进程管理器由微内核来调度运行,并且也使用微内核的消息传递原语与系统中其它进程进行通信。进程管理器的任务是在系统中创建、装入新的进程,管理与进程有关的最基本资源(内存、地址空间)并最后结束进程,所有这些服务都是通过消息来提供的。例如,如果一个正在运行的进程想创建一个新进程,便可以通过给进程管理器发送一个包含待创建进程详细信息的消息来实现这一目的。
2025-12-15 01:00:00
1267
原创 第 5 章 QNX 实时性能的说明
实时性是指能够在限定时间内执行完规定的功能并对外部的异步事件作出响应的能力。实时性的强弱以完成规定功能和作出响应时间的长短来衡量。如何保证计算机系统的实时性?人们很容易想到采用提高硬件能力的办法:CPU 要有足够的处理能力,系统总线和存储器要有足够的速度和容量,中断控制器要有足够的响应和控制能力,I/O 通道和设备要有足够的吞吐能力等等。这些是非常必要的。但只考虑硬件还不够,还必须有一个实时操作系统。在同样的计算机硬件条件下,运行系统所提供的是一个实时的还是一个非实时的服务,是由操作系统来决定的。
2025-12-13 00:15:00
875
原创 第 4 章 进程调度
进程调度的任务是决定如何把 CPU 资源分配给执行中的各个进程。每个就绪的进程都在某个队列中排队,等待使用 CPU。用什么样的策略决定哪个就绪的进程使用 CPU,以及正使用 CPU 的进程什么情况下放弃使用 CPU,是进程调度的关键问题。一般地,每个进程都有一个优先级,优先级高的进程先使用 CPU。在 UNIX 分时系统中,调度程序用一个算法来计算正在执行的进程的优先级,对于使用过大量 CPU 时间的进程则降低它们的优先级,对于等待时间长的进程则升高它们的优先级。
2025-12-11 16:11:35
867
原创 第 3 章 进程间通信
当多个进程在一台计算机上同时执行时,它们之间会形成一种关系。即使是从程序上看不出有联系的几个进程,在同时运行时相互之间也会产生联系。因为它们都要使用机器上的资源,而这些资源是有限的,需要大家按照某种秩序来分别使用。当某资源被其他进程占用了,下一个要使用该资源的进程就要等待,待该资源被释放后再使用。那些在设计时就要求彼此之间共操作的多个进程,在运行时更要频繁地通信、传递数据、同步相互的动作。
2025-12-11 16:08:41
866
原创 第 2 章 QNX 的系统特点
大多数操作系统至少被划分为内核层和用户层两个层次。内核提供基本功能部分,如建立和管理进程,提供文件系统,管理设备等 —— 这些功能以系统调用方式提供给用户,系统调用是用户层使用内核层功能的唯一接口。应用程序可以在自己代码中使用系统调用,来实现对系统的访问或对内核功能的调用。系统调用在应用程序源代码中,看上去就像一般的库函数一样,只是在编译链接时,系统调用不像库函数那样把自己的代码嵌入到应用程序的可执行代码中去。许多操作系统的内核不以进程方式工作。应用进程通过系统调用来请求内核的服务。
2025-12-03 19:49:04
595
1
原创 第 1 章 QNX 概述
QNX 是一种运行在 Intel x86 兼容处理器和一些 RISC 处理器(如 PowerPC、MIPS)上的操作系统。是一种在计算机上运行的。它的主要任务是管理计算机上的系统资源,并为用户提供使用计算机及其外部设备的接口。它的目的是提高计算机的各种资源(如处理器、内存、磁盘、文件等等)的利用率,提高计算机系统的可用性。现在计算机上运行的操作系统种类繁多,小至资源很少的嵌入式处理器所用的操作系统,大到功能无比强大的巨型机所用的操作系统。
2025-12-02 18:16:35
919
原创 嵌入式构建系统中 Bear 与 Fakeroot 的 LD\_PRELOAD 冲突分析与解决
嵌入式开发中使用Bear生成Clangd所需的compile_commands.json时,发现与Fakeroot在镜像打包阶段发生冲突。分析表明二者均通过LD_PRELOAD机制拦截系统调用,导致Fakeroot的chown虚拟化失效。解决方案采用分阶段构建:先用Bear仅执行代码编译生成元数据,再单独进行镜像打包避免环境污染。该案例揭示了工具链集成时需注意动态库劫持冲突,建议优先使用构建系统原生支持的编译数据库生成方式。通过流程解耦实现了开发工具与构建系统的兼容。
2025-11-27 17:53:28
759
原创 QT-串口,完结!
QtSerialPort模块是QT5中附加模块的一个模块,为硬件和虚拟的串口提供统一的接口。串口由于其简单和可靠,目前在像嵌入式系统、机器人等工业中依旧用得很多。使用QtSerialPort模块,开发者可以大大缩短开发串口相关的应用程序的周期。Qt SerialPort 提供了基本的功能,包括配置、I/O操作、获取和设置RS-232引脚的信号。提供了访问串口的接口函数。使用辅助类可以获取可用的串口信息。将辅助类对象做为参数,使用setPort()或函数可以设置要访问的串口设备。
2025-09-21 19:00:51
736
原创 QT-数据库编程
SQLite Expert是SQLite数据库的可视化管理工具,SQLite Expert安装文件中带有SQLite数据库驱动。通过添加数据库驱动,并指定使用的驱动类型(如MySQL、PostgreSQL、SQLite等数据库的驱动),建立应用程序与特定数据库之间的连接,从而能够使用Qt的SQL模块API与数据库进行交互。采用SQLite数据库进行应用开发,SQLite数据库是一种单机(本地)数据库, 不支持远程连接,是一种文件数据库,所有的表、索引等数据库元素全部存储在一个文件里。
2025-09-21 18:57:17
1046
原创 QT-模型视图结构
模型/视图结构一种将数据存储和界面展示分离的编程方法。模型用于存储数据,视图组件用来显示模型中的数据。在Qt中,模型-视图架构(Model-View Architecture)被广泛应用于数据驱动的用户界面设计中。与传统的MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)模式类似,Qt的模型-视图架构也强调数据和表示的分离。Qt中的模型/视图架构主要涉及三个核心概念:模型(Model)、视图(View)和委托(Delegate)。
2025-09-21 18:54:37
1106
原创 QT-事件
Qt中事件是程序内部或外部发生的动作。比如程序外部:用户移动鼠标、单击鼠标、鼠标拖拽、按下按键等操作都会产生对应的事件。程序内部:窗口第一次显示、放大、缩小等。📌 两类事件外部事件(用户操作导致的)你移动鼠标→ 程序收到一个“鼠标移动事件”。你单击鼠标→ 程序收到一个“鼠标点击事件”。你按下键盘→ 程序收到一个“键盘按下事件”。你拖动窗口→ 程序收到“鼠标拖拽事件”。👉 就好比你在敲门、按电梯按钮,程序必须做出反应。内部事件(程序自己触发的)窗口第一次显示→ 产生“窗口显示事件”。
2025-09-04 10:20:11
1305
原创 QT-菜单栏、工具栏和状态栏
菜单栏、工具栏和状态栏一般用在MainWindow项目中,菜单栏、工具栏位于窗口上放,状态栏位于窗口下方。QMenuBar是菜单栏类,菜单栏上可以有多个菜单项,用户单击菜单项后,会触发一个动作。因此在Qt中使用菜单栏涉及到3个类:QMenuBar菜单栏类、QMenu菜单类和QAction动作类。1️⃣ — 菜单栏类通俗理解:就像 Windows 程序顶部的“文件 | 编辑 | 帮助”那一条。2️⃣ — 菜单类通俗理解:就是“文件”、“编辑”、“帮助”这样的菜单,点击会展开里面的选项。
2025-09-04 10:18:20
885
原创 QT-QSS样式表
QSS,全称为Qt StyleSheet,是Qt框架中用于定义控件外观的一种样式表语言。CSS层叠样式表CSS 是网页的“化妆师”,负责颜色、字体、布局等外观样式;而 QSS 是 Qt 程序里的 CSS 版本,用来美化界面控件。QSS可以应用于各种Qt部件(Widgets)上,包括按钮(Button)、标签(Label)、文本框(LineEdit)等,用来改变它们的颜色、字体、背景、边框等属性。颜色与背景:设置部件的前景色、背景色。字体:调整字体大小、类型、加粗、斜体等。边框。
2025-08-25 17:54:30
1172
原创 QT-布局管理器
布局管理器(Layout Manager)是在图形用户界面(GUI)应用程序中用于自动管理和排列窗口部件(Widget)的工具。Qt 共提供了 5 种布局管理器,来帮助开发者方便地组织和管理窗口部件。
2025-08-24 16:39:01
1064
原创 QT-常用类
常见字体:宋体 SimSun、黑体 SimHei、微软雅黑 Microsoft YaHei、微软正黑体 Microsoft JhengHei、楷体 KaiTi。类用于描述字体属性,如字体族(family)、大小(point size)、粗细(weight)和斜体(italic)等。用于处理图像,提供了对图像的操作功能,比如加载、保存、转换格式等。类用于管理图标集,这些图标可以被用于按钮、菜单项、工具栏按钮等 UI 元素上。,并且可以通过信号槽机制连接到特定的槽函数来处理定时事件。等控件结合使用来显示图片。
2025-08-23 16:51:10
610
原创 QT-常用控件
在Qt中,控件、组件、部件都是一个意思,所有控件都继承自QWidget类。相应的编辑器有QTimeEdit,QDateEdit,QDateTimeEdit。通过new QPushButton即可动态创建按钮,如果要为按钮执行其他操作,则需要通过connect()函数来关联对应的槽。,打开UI设计界面,拖动4个单选按钮。Qt通过QMessageBox类封装了消息对话框的各项功能,消息对话框显示了一段文本信息,以提醒用户。这些组件通过Qt的信号和槽机制相互连接,允许组件之间的交互,从而构建功能丰富的用户界面。
2025-08-23 10:09:16
1223
原创 QT-窗口类部件
QWidget定义:Qt 所有可视化界面控件的基类(Widget = 窗口部件/控件)。特点可以作为独立窗口(如果没有父对象)。可以作为子控件嵌套在别的控件里(比如按钮、文本框)。提供了基本的绘制、事件处理(鼠标、键盘)、布局功能。中文理解:小部件 / 控件。例子:按钮 ()、标签 (QLabel)、输入框 (QLineEdit) 都继承自QWidget。
2025-08-22 22:15:01
976
原创 QT-初识
Qt 是一个跨平台的应用程序开发框架,旨在简化GUI(图形用户界面)应用程序的开发工作,广泛应用于桌面应用程序、办公软件、车载系统、工控人机界面、医疗设备界面、游戏开发、建模软件等领域的开发。跨平台支持:Qt允许开发者编写一次代码,然后可以在多个操作系统上运行,包括Windows、macOS、Linux等。原理是一次编码,处处编译。上层API接口是一样的,针对不同平台提供了对应的程序包,使开发者可以在不知道底层具体实现细节的情况下编写跨平台的应用程序。丰富的GUI组件。
2025-08-21 10:30:16
520
原创 CPP11新特性-完结
作为捕获列表时,Lambda 表达式按引用捕获所在作用域的所有外部变量,Lambda内部可以直接访问并修改外部变量的原始值。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。表示对一个对象的唯一所有权,因此不能被复制,禁止智能指针对象拷贝,也就不存在浅拷贝及多次释放同一块空间的问题。
2025-08-19 09:53:28
698
原创 CPP异常
异常是程序运行时出现的预期之外的情况或错误,导致程序运行终止。int main()cout << "运算结果:" << num3 << endl;return 0;除数为0,程序出现异常,导致程序运行终止。在比如,下面代码,虽然通过检查到了错误,并输出了错误信息,但这并不足以处理错误;特别是对调用者来说无法进行进一步处理。cout << "加载文件失败" << endl;return;
2025-08-18 20:21:30
751
原创 CPP算法库
非修正序列算法是STL(Standard Template Library)中提供的一类算法,其特点是不修改所作用的容器内的元素次序和值。用于执行常见的数据操作,如排序、搜索、复制、修改容器中的元素等。在C++中,函数对象(也称为functors或函数对象类)指的是可以像函数那样被调用的对象。:将容器中等于指定值的元素“移到末尾”,返回新逻辑末尾迭代器,原容器大小不变,需要配合。根据谓词(一个返回bool值的函数或函数对象)计算满足条件的元素数量。)中作为比较函数或谓词,可以利用函数对象来定制算法的行为。
2025-08-16 11:03:21
953
原创 CPP标准模版库
容器it++ 等价于支持 it + n?vector指针 + 1✅ 支持deque指针或分块 + 1✅ 支持list节点指针跳到 next❌ 不支持。
2025-08-16 11:02:08
1423
原创 CPP模板编程
语法形式如下:多个参数用逗号分隔。template <typename t1,typename t2,...... > 返回值类型 函数名(参数列表){//函数体template <class t1,class t2,......> 返回值类型 函数名(参数列表){//函数体template关键字表示这是一个模板定义。typename T声明了一个类型参数T,表示函数可以接受任何类型作为此参数。模板定义中 <> 里的内容即模板参数列表,不能为空t1 : t2;
2025-08-14 21:30:35
1055
原创 CPP运算符重载
public:// 固定容量数组int size;// 当前元素数量// 非 const,支持写入// const 版本,支持只读运算符目的说明重载让自定义类对象能像数字一样相加,返回新对象表示和[]重载让自定义类对象像数组一样用下标访问或修改内部元素class Bookpublic:Book();运算符重载。
2025-08-14 14:50:07
417
原创 CPP多态
多态类型机制发生阶段说明静态多态函数重载、运算符重载、模板编译时根据参数类型和数量选择函数版本动态多态虚函数、继承运行时根据对象实际类型选择函数版本Animal.hpublic:// 虚函数声明Animal.cpppublic:virtual void eat() { // 虚函数public:void eat() override { // 重写虚函数public:void eat() override { // 重写虚函数关键点说明。
2025-08-10 19:58:45
819
原创 CPP继承
如下示例,Person 类、Student 类、Teacher 类有大量重复的代码,造成代码冗余,降低开发效率。我们可以通过继承来解决这一问题。在面向对象的编程语言中,继承是一个核心概念。主要作用将重复的代码统一定义在父类中,子类从父类继承,同时继承也是实现多态的重要条件。继承就是一个新类从现有类派生的过程。新类称之为派生类或子类,原有的类称之为基类或父类;子类可以继承父类中的成员,从而可以提高代码的可重用性。继承关系下,子类和父类存在 is a 的 关系。
2025-08-10 17:49:57
1074
原创 CPP封装
友元函数是一个定义在类外部的函数,但它可以访问该类的私有和受保护成员。尽管它是类外部的非成员函数,友元关系使得它可以绕过封装性限制,直接访问类的私有和受保护数据。
2025-08-07 20:14:12
982
原创 CPP类和对象
通过class关键字定义类,后跟类的名称,类的主体是包含在一对花括号中。class 类名 {访问修饰符 : 成员变量成员函数 }//访问权限public://成员变量int id;short age;//成员函数cout << "学号:" << id << endl;cout << "姓名:" << name << endl;cout << "年龄:" << age << endl;在定义类的过程中,建议对类名、成员变量名、成员函数名等使用不同的命名规范。
2025-08-07 10:11:42
1074
原创 CPP引用
通过 const 关键字定义常量引用,必须在声明时初始化。上述代码中,10 是一个字面值常量,本身不是变量,不能直接被引用。此时,如果想要修改 a 的值,是不被允许的。会提示表达式必须是可修改的左值。a = 100;常量引用主要用来修饰形参,提高安全性,防止形参改变实参。如下代码,向 test () 函数传入实参变量 a,test () 函数执行之后,输出 a 的值是 100。也就是说函数执行完成后,会对外部的变量 a 产生影响。int a = 10;这里ref是对a的常量引用。
2025-08-05 22:31:08
739
原创 CPP函数
C++ 中,函数由返回值类型、函数名、参数列表和函数主体组成。返回类型 函数名(参数列表) {函数体 }返回类型:是函数返回的值的数据类型。无返回值的函数使用 void 关键字表示。函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。参数列表:参数列表包括函数参数的类型、顺序、数量。参数是可选的。函数主体:函数主体包含一组定义函数执行任务的语句。在 C 语言中,宏是一种强大的预处理指令,基于预处理指令#define定义宏。当预处理器遇到宏定义时,会将宏名称替换为指定的文本或表达式。
2025-08-04 21:38:51
808
原创 CPP初识
C++ 语言是一种面向对象的、编译型语言,在 C 语言的基础上发展而来。它由 Bjarne Stroustrup 于 20 世纪 70 年代末开始开发,最初被称为 “C with classes”,1983 年正式命名为 C++。1998 年发布了第一个国际标准 ISO/IEC 14882:1998(C++98),之后又经历了多次修订和改进,如 C++11、C++14、C++17、C++20 等标准分别在 2011 年、2014 年、2017 年和 2020 年发布。
2025-08-04 21:37:03
1247
原创 位运算题目
一个数的某一位,置为0,只需要按位与一个需要置换的位置为0其他位置为1的数,因为&有0则0,一个数&1是本身,不变一个数的某一位,置为1,只需要按位或一个需要置换的位置为1其他位置为0的数,因为|有1则1,一个数|0是本身,不变一个数的某一位,进行反转,只需要异或一个需要置换的位置为1其他位置为0的数,因为相同(本身)为0相异为1,一个数0不变,1反转要清零,用,掩码位是0要置 1,用,掩码位是1要翻转,用,掩码位是1要取反,用,整个数变反。
2025-07-14 19:17:23
379
原创 网络编程员工管理系统
本项目是经过了上一个单机版员工管理系统改版,基于 TCP 网络编程的员工管理系统,包含客户端和服务端两部分。服务端支持多线程并发处理多个客户端连接,使用 SQLite 数据库存储员工信息。客户端与服务端通过 JSON 格式进行数据交互,利用 cJSON 库解析和构建请求与响应,实现登录、增删改查、排序、日志等功能。客户端负责菜单交互和数据展示,服务端负责业务逻辑和数据管理。用户可通过命令行界面操作,实现员工信息的管理和统计。
2025-07-12 13:37:58
418
原创 员工管理系统
以下我们实现一个单机版员工管理系统,代码约2000行。项目技术栈:使用sqlite做为数据存储方案使用IO流,多线程实现日志功能使用正则表达式,对用户输入(如姓名、密码)进行格式校验,保证数据合法性。对用户密码进行哈希加密,提升系统安全性。
2025-07-01 09:53:49
335
原创 网络编程TCP与UDP
(1)为了更好应对和苏联的军事竞赛,1958美国成立了ARPA部门,开发了内部联网技术- ARPANET(因特网的前身)方便不同部门之间可以快速沟通,开发ncp协议作为早期网络的通信协议。(2)70年代末,随着链接ARPANET的电脑节点不断增加,美国开发了tcp/ip,并代替旧的网络通信协议(ncp)作为军事内部的标准通信协议(3)1983,ARPANET分裂成军用和民用两部分,民用部分随着全社会的加入,因特网从而开始崭露头角,这个是离不开tcp\ip协议的推进。(4)1984,国际标准化组织(iso)发
2025-06-17 19:27:37
2297
原创 进程创建及守护进程
进程是系统进行资源分配和调度的基本单位,而线程是 CPU 调度和分派的基本单位。理解这一点有助于优化程序性能(如多线程并行计算)和资源管理(如避免进程间过度切换)。
2025-06-16 22:28:52
931
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅