技术笔记
文章平均质量分 66
记录每天的学习进展
小马同志( ̄^ ̄)ゞ
这个作者很懒,什么都没留下…
展开
-
理解计算机Cache
首先考虑一种标量访问的情况。就像下面这段代码,它重复地访问同一个标量。在这种情况下,存储访问会出现需要访问的地址不随时间变化的特点。a = 10print(a)如果我们考虑数组访问,比如顺序访问数组中的每个元素。那么存储访问会出现需要访问的地址随时间线性变化的特点。观察这两种不同的访问情况,我们可以发现,内存访问并非是完全随机的,这背后体现的是局部性原理。局部性原理可以分为两类。一个是时间局部性,一个元素一旦被访问到,很可能在短时间内再次被访问到。原创 2024-06-20 15:01:47 · 439 阅读 · 0 评论 -
C++ 智能指针关联文件指针以及删除器的用法
平时我们在学习和使用 C++ 的时候,在用到智能指针时,经常会有一种固化的思维:智能指针就像 new 和 melloc 一样,用于分配动态内存空间,然后智能指针再指向这个空间。其实智能指针不一定非要和内存关联。智能指针与普通指针一样,也可以和文件指针关联,也可以和网络套接字关联,不要局限于内存。下面就举一个小例子。我们先创建一个文本文件 sentence.txt。我们在运行这段代码结束后,系统会自动 delete 掉我们创建的指针。在 delete 时会调用智能指针的删除器来关闭文件。原创 2024-06-17 09:51:23 · 454 阅读 · 0 评论 -
电阻笔记汇总
导体对电流的阻碍作用就叫该导体的电阻。电阻(Resistance,通常用“R”表示)是一个物理量,在物理学中表示导体对电流阻碍作用的大小。导体的电阻越大,表示导体对电流的阻碍作用越大。不同的导体,电阻一般不同,电阻是导体本身的一种性质。导体的电阻通常用字母R表示,电阻的单位是欧姆,简称欧,符号位Ω。原创 2024-05-14 23:14:15 · 746 阅读 · 0 评论 -
玩转Virtual Box虚拟机
虚拟化技术是将计算机的各种硬件资源予以抽象、转换、分割、组合的一种计算机技术。虚拟化技术打破了实体结构间不可切割的障碍,从而使用户可以按照需求重新组合硬件资源,使硬件资源得到更充分的利用。假如你现在有一台电脑,它有一个四核CPU、16GB内存和2TB硬盘。我们可以对CPU、内存和硬盘进行抽象、转换,再进行分割、组合。最终得到两台拥有双核CPU、8GB内存和1TB硬盘的虚拟机。原创 2024-04-21 23:43:59 · 1356 阅读 · 0 评论 -
技术笔记2023076 rBoot学习7
如果之前拿到的索引是否超出rom总数,则认为此索引是无效的,并默认加载第一个rom。如果此处if为真,则说明Flash中存在新的boot,此时要将Flash的第一个扇区覆盖。的注释去掉,并给宏定义设置一个合适的值,我将其设置为20000(单位为us)。令人意外的是,此文件竟然处于build目录下,这就说明它不是写出来的,而是通过某种方式生成的。写入boot所在的扇区,覆盖了之前的配置,在下次启动时将使用当前的配置。获取到rom的地址后,将当前的rom的索引写入配置结构体中。,并通过esptool2生成的。原创 2023-07-26 19:42:17 · 353 阅读 · 0 评论 -
技术笔记20230721 rBoot学习6
我学习ESP8266使用的系统是windows,所以选择了方便安装与使用的安信可一体化开发工具AiThinker_IDE v0.5。分别从git仓库中下载rBoot和esptool2,然后将他们复制到同一文件夹下。此函数有汇编版本与C语言版本,如rBoot作者所说,使用gcc编译时使用汇编版本的入口函数,而C语言版本的入口函数虽然会占用stack但其他功能与汇编版本相同。前几天看完了rBoot的readme,今天在网上看到了几篇分析rBoot的文章。此函数主要流程为找到image的地址、加载image。原创 2023-07-22 07:53:17 · 131 阅读 · 0 评论 -
技术笔记20230720 rBoot学习5
这是一个示例项目,展示了如何构建用于rBoot的rom以及如何执行OTA升级。我们可以使用rboot-ota.c和rboot-ota.h来添加我们项目对OTA的支持。在rboot_ota_start中也有一些注释掉的代码,展示了如何将非rom文件写入到Flash上的任意位置(例如,数据或嵌入式文件系统)。此版本的示例使用rBoot大闪存模式,该模式适用于具有较大闪存芯片的设备,例如ESP-12F。原创 2023-07-20 21:26:04 · 99 阅读 · 0 评论 -
技术笔记20230718 rBoot学习4
如果我们需要8个512KB的rom,就需要两个链接脚本,一个用于1MB大小Flash的前半部分,另一些用于后半部分。现在,当rBoot启动我们的rom时,通常会执行内存中映射的SDK代码。但是,更重要的是,我们需要确保rom的整体大小不超过我们在Flash布局中为它分配的空间。由于最大映射1MB大小Flash的限制,如果我们使用更大容量的Flash并且没有启用大Flash支持,则默认配置中的第二个rom仍将被放置在。因此,当任何rom运行时,代码都将出现在内存中的同一位置,而不管它在Flash上的位置。原创 2023-07-19 21:55:22 · 68 阅读 · 0 评论 -
技术笔记20230718 rBoot学习3
如果使用GPIO16以外的IO口,就需要在读取引脚电平之前使能内部上拉电阻,在读取结束后立刻禁用该IO口。如果我们配置一个专用的GPIO引导rom,那更能体现我们的技术力,但是可能引发操作问题,例如WiFi不工作或在程序引导阶段崩溃。如果默认的配置扇区不存在,或者仅有的配置被损坏,那么将在boot阶段创建一个默认的配置扇区,此默认rom将被设置为0号rom。如果引导检测GPIO在启动时读取到高电平,那么rBoot将根据当前状态启动当前选择的正常或临时rom。,那么GPIO可以用来在引导时跳到下一个rom。原创 2023-07-18 20:45:40 · 78 阅读 · 0 评论 -
技术笔记20230717 rBoot学习2
像上面那样配置结构体并将它写入到Flash的地址0x1000上。如果我们想要配置4个rom以上(默认为4个),只需要在编译rBoot时修改。在开始动手之前,一定要设计好Flash的布局。rom的地址必须遵循4k对齐的规则。原创 2023-07-18 08:31:00 · 43 阅读 · 0 评论 -
技术笔记20230716 rBoot学习1
⑦rBoot不浪费栈空间,而官方SDK中的bootloader需要占用144个字节的栈空间。ESP8266只能将1MB的Flash映射到内存中,但是可以选择需要映射的Flash扇区。这就允许单个ROM扇区的大小达到1MB,但是这1MB不能跨越Flash中1MB的边界。这意味着我们可以在一个4MB的Flash上划分出4个1MB的ROM或者8个512KB的ROM,或者二者的结合。但是,需要注意的是,不能在一个512KB的ROM后面紧跟着一个1MB的ROM,那样的话第二个ROM就会跨过1MB的边界。原创 2023-07-16 22:21:10 · 89 阅读 · 0 评论 -
技术笔记20230707
project.mk中的伪目标有:build-components(编译所有组件)、menuconfig(配置ESP8266_RTOS_SDK项目)、deconfig(将所有项目配置恢复成默认配置)、all(编译app、bootloader、分区表)、build(暂不明确)、clean(删除所有编译输出)。我记得uCOS之前是要收费商用的,现在开源了,以后有机会的话可以借鉴一下。先研究一下乐鑫的SDK吧,先从乐鑫开源/ESP8266_RTOS_SDK的hello_world的Makefile开始研究吧。原创 2023-07-08 00:24:31 · 36 阅读 · 0 评论 -
技术笔记20230706
其中提到:官方将会在v2.0.0之后将ESP8266_RTOS_SDK迁移到esp-idf。我看了esp-idf项目的相关文档,没有看到有关ESP8266的选项。而现在ESP8266_RTOS_SDK已经更新到了v3.4版本,不清楚乐鑫的安排。随后安装编译工具链,得到xtensa-lx106-elf-gcc.exe等文件。等实物到了再贴图上来。从目录上看,我发现SDK中的项目结构比较臃肿,个人认为有必要重构一下,自己重新写一套Makefile。既然要用ESP8266,那就要去看乐鑫官方的开源SDK项目了。原创 2023-07-06 23:06:07 · 62 阅读 · 0 评论