自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李述铜的笔记

记录底层开发、课程教学相关的一些问题和经验

  • 博客(24)
  • 收藏
  • 关注

原创 FATFS基本入门教程(3)- FAT文件系统简介

作者注:FATFS应该是一个比较常用的嵌入式文件系统,支持FAT12/FAT16/FAT32/EXFAT格式,很多开发人员都用过。我在这里会写一系列文章来介绍FATFS的基本使用,欢迎感兴趣的同学关注。已发布的内容:(配套资料请见下方的第一篇文章中的介绍)为了深入地理解FATFS的使用,我们必须要对它支持哪些文件系统,以及这些文件系统的工作原理有所理解。这样才能在使用某些FATFS接口时,更好理解其特性,从而更加高效地使用这些接口。

2023-12-04 08:27:38 201

原创 GODOC命令无效,原因是需要手动安装

在看《GO程序设计语言》这本书,按照其中的内容,想看下GO自带的包的文档。书中讲,可以直接输入GoDOC命令来打开一个服务器,从而可以用浏览器访问文档库。输入命令后,系统提示找不到该命令。查了资料后才发现,这个命令在新版的GO中不自动了,需要自己去下载安装。

2023-12-02 12:36:17 264

原创 FATFS基本入门教程(2)-什么是文件系统

作者注:FATFS应该是一个比较常用的嵌入式文件系统,支持FAT12/FAT16/FAT32/EXFAT格式,很多开发人员都用过。我在这里会写一系列文章来介绍FATFS的基本使用,欢迎感兴趣的同学关注。在学习FATFS之前,首先要搞清楚什么是文件系统,理解其中的基本原理、主要概念,然后再学学习如何使用。如果没有这些基础知识的理解,一上来就试图去使用FATFS;那么,在后续的使用过程中,你很有可能会遇到各种各样的问题。而实际上,这些问题往往是由于你对文件系统本身的基本概念和原理不理解导致的。。

2023-12-01 14:16:51 116 1

原创 FATFS基本入门教程(1)-简介

作者注:FATFS应该是一个比较常用的嵌入式文件系统,支持FAT12/FAT16/FAT32/EXFAT格式,很多开发人员都用过。我在这里会写一系列文章来介绍FATFS的基本使用,欢迎感兴趣的同学关注。FATFS(File Allocation Table File System)是一个轻量级的文件系统,广泛用于嵌入式系统和嵌入式设备中。在开发中应该是用得挺多的。不过,目前市面应该没有什么由浅入深地去讲解FATFS的教程。

2023-12-01 13:49:35 134 1

原创 vivado编辑器出现中文乱码的问题及解决方法

初次玩vivado,发现写好的verilog文件在vivado中打开显示乱码。要解决这个问题,需要完成两步操作:一是更改文件的编码为GBK;二是更改显示的字体。以下二者缺一不可,这样既可以在vivado中显示中文,又可以保证在其它文本编辑器中打开时同样也能显示中文。

2023-06-08 08:37:37 2095 1

原创 怎样学写一个操作系统,学写之后能拿到高薪吗?

曾经有同学私发了他的简历让我看,问我怎么样,适不适合报我的操作系统课?然后考虑到离秋招时间很近,我打消了他报我课的想法,而是建议他做自己手上备用的网络项目,优先找个好工作。如果自己已经完成了一个初步的小系统,那么可以试着去看一下更复杂的实现,比如Linux 0.11内核,甚至其它更新的内容。这个我是有亲身经历,在大学时我曾自己在宿舍折腾学习,花费了不少时间和精力,但是学得到的远比老师讲的多。还有一些书和资料也是很不错的,我在开发这个课程时也参考了这些优秀的资料,这里列举一下。还有,正如之前的回答中说所,

2023-06-06 20:32:47 342

原创 网络编程中的大小端

以4字节整型为例,它的二进制表示方式是32位的。当数据存储先存高字节,再存低字节,称为大端字节序(Big-Endian),即在内存中高位字节在前,低位字节在后;当数据存储从低地址向高地址排列时,称为小端字节序(Little-Endian),即低位字节在前,高位字节在后。例如,对于一个多字节数据,比如一个32位整数0x12345678,在内存中存储时,大端序和小端序所采用的存储方式是不同的。大端序指的是将高位字节存储在低地址处,低位字节存储在高地址处,如下图所示。

2023-05-01 11:18:59 290

转载 在操作系统开发中选bochs还是qemu

最近有同学问我:为什么你的《从0写x86 Linux操作系统课程》选择了bochs,而不是qemu?他认为bochs更加好用,很多资料上都写了用该软件。其实我也是经过不断地对比和尝试后,选择使用qemu。

2023-04-07 09:35:33 1424

原创 怎样用一行代码判断系统的大小端?

闲来无事,想着优化一下问题的解决方案。这个问题据说是很常见的面试问题:如何判断当前系统的大小端?最近在设计自己的TCP/IP协议栈,代码完成的差不多了,已经能够跑在嵌入式STM32开发板上。就是这样,一个宏就可以判断出来。没必要用结构体,也没必要用位域。

2023-02-04 15:04:43 129 1

原创 在VScode中添加快捷键执行自定义任务

在出现的json窗口中,添加以下内容。其中key是要按下的快捷键,这里选了F5旁边的F6,更好操作一些。command是要执行的命令,写下图中的固定值即可。args则是想启动的VSCode中的任务,这里是【启动Qemu】,根据实际情况来确定。在这里只能更改已有的按键绑定,这个是我不需要的。因此,点击红框图标,打开json文件进行更高级的配置。这样需要调试操作系统的代码时,只需要按F5键,再按F6键即可一键启动调试,方便课程的学习。也就是说,上面的配置项,只需要更改key和args的值即可。

2022-11-15 20:25:50 1550 1

原创 用200行代码实现x86保护模式下的操作系统(1)

最大的问题就在于我对于相关硬件知识的欠缺。其中就包括对硬件方面的理解,操作系统支持原理的理解、编程语言的熟练度等各方面的问题。而在所有的这些问题中,最基础的往往是对CPU工作模式方面、各种硬件工作原理的理解。此外,一些同学在学习我的《从0学写x86 Linux操作系统》课时,对x86的保护模式以及相关的芯片细节普遍感到不好理解。因此,我设计了这门课程,试图通过非常精练的代码展现x86保护模式下的编程方法,进而方便同学将注意集中到硬件知识本身。上面的文档配套了相关的源码和视频,视频已经发布到了CSDN上。

2022-09-08 09:41:32 551

原创 ESP8266开发实践(6)-点亮3色RGB灯

淘宝上购买的这种LED模块有个很大的缺点,就是不给原理图,只给Arduino测试程序,因此,我用ESP8266去连接时,还要考虑是接3.3V电源进去,还是接GND进去。连接方式比较简单,我选用了ESP8266的下面三个引脚,对应的IO口为GPIO16、5、4。程序上,用宏定义引脚,方便以后修改管脚的序号。另外,再额外定义了两个函数,分别用于实现点亮某个颜色、关闭某个颜色、关闭所有颜色。写了一段程序,简单测试了下,功能大体为:先依次点亮红、绿、蓝,然后再混合点亮红绿、绿蓝、蓝红。...

2022-08-18 06:54:40 856

原创 ESP8266开发实践(5)-创建可连接的wifi网络

前一篇文章介绍了如何将esp8266连接到已有的wifi网络。但是在某些情况下,比如周围没有wifi时,我们可以让esp8266主动创建一个wifi网络,从而让其它设备,比如电脑、手机等连接上这个网络,然后与esp8266通信。大致的通信结构如下图所示。...

2022-08-12 19:13:58 795

原创 ESP8266开发实战之(4)-连接路由器的wifi

ESP8266支持连接到wifi,从而使得我们能够通过网络访问,做出一些简单而有趣的功能。因此,第一步工作便是连接到wifi网络。一般情况下,我们要连接wifi,在手机上的操作是查到wifi的名称,然后输入密码。在esp8266中,也是需要提供相应的wifi名称和密码才能连接到wifi网络。然后就可以使用esp8266的sdk包中提供的接口函数连接上去。......

2022-08-11 21:14:25 6615 1

原创 ESP8266开发实战之(3)-点亮LED灯

自带的例程中,其使用了digitalWrite(LED_BUILTIN, HIGH)和digitalWrite(LED_BUILTIN, LOW)来控制灯亮和灭。后面在Arduino的界面中,发现了一个可以配置的项,如下图所示。也就是安装好后的ESP8266开发包将这块做成了一个可配置的项,LED_BUILTIN具体的值取决于这里的选择。首先我查了下开发板配套的图,发现LED灯是连接在GPIO2端口的,因此只需要控制GPIO2输出高低电平即可控制LED灯的亮灭。总之,指定好和板上连接LED对应的引脚即可。.

2022-08-10 20:46:13 1116

原创 ESP8266开发实战之(二)-提高烧写速度

在我们点击Arduino的上传按钮时,编译生成的程序数据是一个位一个位的传给ESP8266。因此,这种串行通信的速度很慢,导致了程序烧写的速度也变慢了。在Arduino开发ESP8266的开发环境搭建好之后,发现一个非常让人抓狂的问题:编译和程序烧写速度都非常慢。编译速度这个问题无解,因为在Arduino的使用界面中并没有允许我们往编译器传递参数进行控制的界面。因此,在前面提到的菜单项中,【Upload Speed】即更改的是该通信速度,常见的速度为9600、115200等。幸好,这个速度是可以加快的。..

2022-08-10 20:42:57 680

原创 ESP8266开发实战之(一)-开发环境配置

esp8266的开发方式有多种:可以使用C/C++语言进行开发,使用的开发环境为Arduino。可也可以使用Micropython,开发环境为Pycharm。这篇文章介绍如何使用Arduino+C/C++语言开发esp8266应用。

2022-08-08 16:22:29 7415

原创 如何设计一个自己的操作系统(1)

到了工作几年后,从事地也只是嵌入式开发方面的工具,写的也只是嵌入式方面的小型操作系统内核,非常简单的一个东西。但是直接看Linux 0.11内核源码分析的书还是比较麻烦的,因为搭建调试环境是一件不容易的事情,相关的工具也是比较老的了,所以一直懒得去搭。因此,接下来的一系列文章中,我会以一个极微缩版的操作系统为基础,介绍编写操作系统中重要的知识点,如CPU的x86保护模式、系统调用等关键性的知识。理解了这些知识之后,就可以操作系统的基本运行原理有基础的了解,为开发自己的操作系统打下基础。...

2022-08-07 21:39:34 2178

原创 超简单!在Keil中指定某个函数或变量存放的地址

在我们开发过程中,有时候会有这样一个需求:希望能够指定某个函数或变量存放的地址。也许你看过一些文章,里面介绍了一大堆内容,甚至于还会介绍分散加载文件的配置。但是绝大多数情况下,为了实现这么一个简单的功能,还要学太多东西,是不是一下就懵了?那么,请继续往下看吧。这篇文章会教你一种非常简单的方法,一看就会。只需要使用__attribute__((section(".ARM

2017-12-15 20:13:19 35734 6

原创 有关const的一个误区

在学习C语言时,无数本教材都告诉我们:用const 类型 标志符; 这种方式是定义一个常量,也就意味着不可以修改。但真的只是这样吗?例如:int main () { const int var = 0x1; var = 2; printf("%d\n", var); return 0;}你可能会说: var是不可修改的。从表面上看,似乎是这样,现在来编译一下,编译器提

2017-12-09 11:49:08 661

原创 uCOS/FreeRTOS任务创建的两种模式

在我们使用uCOS/FreeRTOS编写代码时,首先要面临的一个问题是怎样创建任务并启动整个系统。一般来说,我们会有两种不同的方式。这两种方式不仅适用于uCOS/FreeRTOS,同时也适用于其它RTOS。创建任务的两种方式这两种方式各有优缺点。如果用一幅图来表示的话,见下方。下面将分别说明这两种方式的具体应用方法。方式一:先创建启动任务,启动任务初始化软硬件并创建其它任务这种方式是这样的:在启动启

2017-11-18 11:37:50 1108

原创 RTOS系统延时与普通软延时的特点与区别

我们知道,在RTOS中会提供若干延时函数的API。对于没有仔细了解过RTOS的同学而言,可能会产生这样疑惑:这些API与普通自写的延时函数相比究竟有何优势呢?为什么要额外提供这些API?在这篇文章中,我们来分析下这些API接口的工作原理、特点以及其相比自写的延时函数,究竟有什么优缺点,我们该如何选择。普通延时方式在没有使用RTOS之前,我们可能通过以下方式实现延时或定时。指令软延时在比较简单、各条指

2017-11-18 11:36:09 3278

原创 自己动手从0到1写嵌入式操作系统-李述铜-专题视频课程

这不是rtos源码分析的课程,而是为初级的同学设计,从基础原理讲师,一步步不断迭代设计rtos的课程!用不到【2000行代码,汇编代码仅18行】(不含注释)实现一个精巧的可以运行在ARM Cortex-M内核芯片上的RTOS!该RTOS功能与ucos类似,具体实现不同。学习之后,再去学习ucos之类的系统将没有什么问题。...

2017-04-06 13:21:56 3842 1

原创 深入掌握ARM调试工具-原理篇-李述铜-专题视频课程

本课程深入介绍了ARM调试器工作原理相关的内容。让你能够掌握基本通用的工作原理,但又不至于陷入与具体内核调试、IDE内部相关的细节当中。之后,我们将学习一些常见调试问题的解决方法与技巧。课程的老师从事过数年调试器开发经验,解决过上百位一线ARM开发工程师的调试问题。通过去除不相干的细节,抽取出核心的知识点凝聚成些课时。...

2017-04-06 13:21:36 541

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除