摘要: 1 Linux进程简介 Linux中,进程的优先级是动态的 Linux 2.6开始,内核是抢占式的 内核线程没有自己的地址空间,整个内核共享内核的虚拟地址 Linux采用对称多处理模型,每个CPU地位相同 2 进程分类 进程可以分为普通进程(包括交互式进程、批处理进程)、实时进程。 交互式进程和实时 阅读全文
posted @ 2025-03-03 22:41 moonのsun 阅读(17) 评论(0) 推荐(0)
摘要: 1 内核抢占 定义:内核控制路径被其他内核进程抢占,称为内核抢占 条件:进程描述符thread_info的抢占计数器preempt_count字段<=0 && 中断打开 发生时机: 结束内核控制路径(通常是中断处理程序)时 异常处理程序调用preempt_enable()时 启用可延迟函数(软中断, 阅读全文
posted @ 2025-02-23 12:45 moonのsun 阅读(23) 评论(0) 推荐(0)
摘要: 1 处理器探测异常 fault:可以被纠正,并不失连贯的执行;比如缺页异常 trap:发生后没有必要纠正和继续执行,调试时使用,可以认为是断点 abort:发生严重的错误,只能强制终止受影响的进程;比如assert? 2 硬件连接 设备 <== IRQ ==> 可编程中断控制器PIC <== INT 阅读全文
posted @ 2025-02-16 22:59 moonのsun 阅读(48) 评论(0) 推荐(0)
摘要: 1 参考文档 6. 线程的定义与线程切换的实现 — [野火]RT-Thread内核实现与应用开发实战——基于STM32 文档 2 定义线程栈 RTOS中存在多线程和线程切换,没有进程的概念; 每个线程都有线程栈,通常是预先定义好的全局数组,存在RAM中。比如定义两个线程栈: /* 定义线程栈*/ r 阅读全文
posted @ 2025-02-04 22:02 moonのsun 阅读(77) 评论(0) 推荐(0)
摘要: 1. 进程、线程,轻量级进程 1.1. 进程 进程是程序执行的一个实例,是担当分配系统资源(除CPU之外的资源)的实体 线程是程序执行的基本单位,是担当分配CPU的实体 —— 线程除了共享地址空间和内存,调度逻辑和进程没有区别,也都是由内核调度 当前,同一进程间的线程切换更加轻量化 1.2. 轻量级 阅读全文
posted @ 2025-01-17 09:49 moonのsun 阅读(47) 评论(0) 推荐(0)
摘要: 1. 内存地址 逻辑地址、虚拟地址、线性地址、物理地址,它们是很绕的逻辑,有些和Intel绑定的概念,没有必要完全区分; 可以认为,地址包括:虚拟地址和物理地址两种。 1.1. 逻辑地址 程序编译后的地址 1.2. 线性地址 程序运行时的内存地址 1.3. 物理地址 内存总线上的地址 如果CPU没有 阅读全文
posted @ 2025-01-05 12:50 moonのsun 阅读(45) 评论(0) 推荐(0)
摘要: 1. 名词解释 POSIX:Portable Operating Systems based on Unix SMP:Symetric Multiprocessor,对称多处理器 2. Linux的特点 单块结构的内核:每一个内核层都被集成到整个内核程序中 编译并静态连接的传统Unix内核:可以动态 阅读全文
posted @ 2024-12-29 15:21 moonのsun 阅读(25) 评论(0) 推荐(0)
摘要: 1. 作用 Linux内核的“定时测量”主要有两个作用:① 获取时间日期 ② 定时人物。 2. 时钟和定时器电路 ① 实时时钟 RTC 独立电源(蓄电池)供电;Linux用来获取时间和日期 ② 时间戳计数器 TSC 和CPU频率绑定,每个时钟信号到来时+1 系统初始化期间算出CPU实际频率 便于测量 阅读全文
posted @ 2024-12-27 09:42 moonのsun 阅读(77) 评论(0) 推荐(0)
摘要: I2C读出来的内容的地址,比datasheet给出的小9? add- 0x0 = 0x0add- 0x1 = 0x76add- 0x2 = 0x73add- 0x3 = 0x4add- 0x4 = 0x0add- 0x5 = 0x61add- 0x6 = 0x4badd- 0x7 = 0x0add- 阅读全文
posted @ 2024-01-20 16:09 moonのsun 阅读(158) 评论(0) 推荐(0)
摘要: 1. 定义 这是个老生常谈的问题,定义大家都懂: 大端模式:数据低位存放在内存高位 小端模式:数据高位存放在内存高位 比如一个十进制数字:12345678 数据低位就是数据的右边,数据高位就是数据的左边; 地址低位就是地址的左边,地址高位就是地址的右边。 假如一页纸表示内存的话,大端模式刚好符合我们 阅读全文
posted @ 2023-03-31 14:44 moonのsun 阅读(397) 评论(0) 推荐(0)
摘要: 1. I2C基本规则 ① start:scl = high,sda ↑ ② stop:scl = high,sda↓ ③ bit 1:scl = high,sda = 1 ④ bit 0:scl = high,sda = 0 总之:scl为高,sda才有效,可以保持电平或者上升下降;scl为低,sd 阅读全文
posted @ 2022-11-19 12:04 moonのsun 阅读(500) 评论(0) 推荐(0)
摘要: PICO 避坑指南 1. Win10 不需要串口驱动,使用PICO W之前先刷固件pico w的固件 micropython-firmware-pico-w-290622.rar 刚开始 刷的固件不对,一直无法识别串口。 2. 使用Mirco USB数据线(更粗),不要使用电源线 这种线目前比较少用,我随手找了一根,一 阅读全文
posted @ 2022-10-14 20:15 moonのsun 阅读(148) 评论(0) 推荐(0)
摘要: 1. UTC、GMT、墙上时间 Coordinated Universal Time(UTC) Greenwich Mean Time(GMT) 两者都表示标准时间,或世界时,几乎没有差异,后者更加精确 墙上时间也就是本地时间,说出墙上时间的时候,需要告知时区信息,这样才有意义。 2. typede 阅读全文
posted @ 2022-05-10 15:52 moonのsun 阅读(287) 评论(0) 推荐(0)
摘要: 今天查询协程的使用方法,找到一些不明觉厉的文章,以后对协程有了深入了解之后再多读几次: 1. https://zhuanlan.zhihu.com/p/146844906 《说说对协程的看法》 2. https://zhuanlan.zhihu.com/p/147608872 《也来谈谈协程》 —— 阅读全文
posted @ 2022-04-12 21:43 moonのsun 阅读(42) 评论(0) 推荐(0)
摘要: 条件变量 1. 条件变量初始化 1 // 方法1 2 pthread_cond_t cv = PTHREAD_COND_INITIALIZER; 3 4 5 // 方法2 6 pthread_cond_t cv; 7 pthread_condattr_t cattr; 8 int ret; 9 10 阅读全文
posted @ 2022-02-15 19:18 moonのsun 阅读(40) 评论(0) 推荐(0)
摘要: https://docs.oracle.com/cd/E19253-01/819-7051/index.html 1. Lightweight process(轻量进程) 用来执行内核代码和系统调用的内核线程,又称作 LWP。 一般来说内核只有进程,为了提高效率搞了一个轻量级进程,只用于内核调度。轻 阅读全文
posted @ 2022-02-09 10:31 moonのsun 阅读(44) 评论(0) 推荐(0)
摘要: 1.创建多进程 一般的步骤是这样的: #include <unistd.h> //C 和 C++ 程序设计语言中提供对POSIX 操作系统API 的访问功能的标头档的名称。是Unix Standard的缩写。 pid_t fpid; //fork函数返回值 fpid = fork(); //fork 阅读全文
posted @ 2021-09-23 10:35 moonのsun 阅读(144) 评论(0) 推荐(0)
摘要: 1.创建线程 pthread_cread(pthread_t tid, attr, (void*) pFun(void*), (void*)arg) 在新线程tid内执行指定函数pFun,参数为arg,原有线程继续往下执行; 2.结束线程 pthread_exit((void*) retValue) 阅读全文
posted @ 2021-09-23 10:33 moonのsun 阅读(47) 评论(0) 推荐(0)
摘要: 1:递归法 vector<int> result;getValue(TreeNode* root, vector<int>& result) { if (root != nullptr) { getValue(root->left, result); result.emplace_back(root 阅读全文
posted @ 2021-09-11 17:21 moonのsun 阅读(593) 评论(0) 推荐(0)
摘要: 几条规则: 1. while(left <= right)作为循环进入条件,退出则为left > right 循环内不再有return条件 2. nums[mid] == target之后,假如收缩左侧边界,就修改left,右侧则修改right; 以上图为例,如果找到target,可以一直往左边收缩 阅读全文
posted @ 2021-08-12 14:27 moonのsun 阅读(97) 评论(0) 推荐(0)