- 博客(263)
- 资源 (27)
- 收藏
- 关注
原创 lwIP 细节之三:errf 回调函数是何时调用的
使用 lwIP 协议栈进行 TCP 裸机编程,其本质就是编写协议栈指定的各种回调函数。将你的应用逻辑封装成函数,注册到协议栈,在适当的时候,由协议栈自动调用,所以称为回调。本节讲述 errf 回调函数。
2023-12-12 16:29:24 408
原创 C 嵌入式系统设计模式 02:结构化编程与面向对象编程
结构化编程将软件组织成两个截然不同的方面:数据和行为。面向对象的方法将两者结合起来,让紧密耦合的元素更内聚,并提高内容的封装。C 是结构化语言,但它可以用于开发面向对象的嵌入式系统。
2023-11-28 10:51:13 941
原创 AD7792/AD7793 备忘
AD7792/AD7793 是一款 ∑-Δ ADC,3 通道、低噪声,内部集成仪表放大器和参考源。AD7792 为 16 位,AD7793为 24 位。
2023-11-06 17:38:11 1181
原创 电压参考芯片 LM285D-1.2 备忘
LM285D-1.2是一款参考电压芯片,本次备忘使用的数据手册是安美森家的。LM285D中的D指的是 SOIC-8 封装,是贴片的;而LM285Z中的Z指的是 TO-92 封装,是直插的。购买时需要注意,防止买错封装。注:以下参数中,典型值均在 25℃条件下测得。
2023-10-17 16:25:50 467
原创 lwIP更新记10:IP 冲突检测
lwip-2.2.0-rc1 版本于 2023 年 6 月 29 日发布,带来了我期盼已久的 `IPv4 冲突检测` 功能。
2023-08-21 10:52:15 1048
原创 TortoiseGit 入门指南17:使用子模块
如果你想在自己的代码仓库中嵌入其它仓库,这称为引入子模块(Submodule)。使用右键菜单TortoiseGit - Submodules Add 选项,弹出添加子模块对话框,可以将一个外部仓库嵌入到源代码树的专用子目录中。
2023-07-26 19:17:09 2011 1
原创 TortoiseGit 入门指南16:叠加图标不见了
叠加图标是一种可视化的提示系统,它通过在文件和文件夹的图标上添加额外的图形元素(即叠加),来显示这些文件或文件夹的 Git 状态。这样,用户可以直接在文件浏览器中看到哪些文件已经被提交,哪些文件还有未提交的更改
2023-07-20 16:36:36 391
原创 TortoiseGit 入门指南15:版本分支图与浏览存储库
版本分支图(Revision graphs)用于方便的查看分支和标签的位置。随着时间的推进,仓库的分支和标签也会越来越多,分支和标签之间的关系会呈树状,那么就需要能在一张图上显示所有这些关系的功能,版本分支图就是为此而开发的。
2023-07-20 16:05:19 1757
原创 TortoiseGit 入门指南14:比较差异
版本控制系统最常见的应用是查看发生了哪些变化。Git 通过比较两个 文件 或者两个 提交 的 差异 (differences)来实现这个功能。
2023-07-20 10:14:00 2100
原创 TortoiseGit 入门指南13:拣选
对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用 合并(merge)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 拣选(Cherry pick)。通俗的讲 拣选 直接把某一次 提交 (commit)拿过来,作为最新一次提交,就像是直接摘了一颗樱桃加在链表最前面,所以叫Cherry pick (拣选)。
2023-07-19 20:46:46 1770 1
原创 TortoiseGit 入门指南12:创建标签
标签 是一种 引用 ,用于标记特定提交点,代表了一个项目的特定版本或里程碑。还可以理解为标签就是某次提交的别名,标签的最重要应用是标记程序的版本。标签的作用包括:
2023-07-19 20:13:58 2150
原创 TortoiseGit 入门指南10:贮藏
有时,当你在项目的一部分上已经工作一段时间后,所有东西都进入了混乱的状态, 而这时你想要切换到另一个分支做一点别的事情。 问题是,你不想仅仅因为过会儿回到这一点而为做了一半的工作创建一次提交。 针对这个问题的答案是贮藏 命令。
2023-07-17 21:15:16 1059 1
原创 TortoiseGit 入门指南08:浏览引用以及在引用间切换
在上一节 创建分支 中,我们学会了在分支上开发新功能,那么随之而来的问题是:如何查看项目又多少分支?如何再切换到主分支?这节来解决这些问题。在回答之前,需要先了解一个 Git 术语:引用(Refs)。简而言之,引用是指 分支、标签等。要理解引用概念,需要了解一点 Git 的内部原理。
2023-07-16 20:12:34 669
原创 TortoiseGit 入门指南09:合并
上一节讲了 分支,提到一种常用的工作流:将默认分支(master)设置为主分支,保存最新的、随时可以发布的版本,所有的新特性、BUG都在另一个称为特性分支上增加或修改,然后在一个合适点,将特性分支内容 合并 到主分支。本节,讲述如何用 TortoiseGit 合并分支。
2023-07-16 19:18:58 4474
原创 TortoiseGit 入门指南07:创建分支
Git 的 `分支` 出了名的好用。其它的版本控制系统也提供分支,但在易用度上,只有两类版本控制系统:一种是 Git,一种是其它。
2023-07-16 10:48:41 1872
原创 TortoiseGit 入门指南06:解决冲突
上节讲到 `拉取` (pull),说到**拉取**不仅将数据下载到你的本地版本库,还会自动**合并**。在合并期间,将更新工作区文件以反映合并结果。如果合并的文件被**多方对同一区域进行更改**,就会产生冲突。Git 不能随机选择一方而丢弃另一方,所以会要求开发者手动解决冲突。每当报告冲突时,都需要解决它。
2023-07-14 08:31:45 2460
原创 TortoiseGit 入门指南05:推送和拉取
`远端版本库` 通常是放在托管平台上的版本库,通过这种方式,可以备份代码、随时随地获取代码、与其他人员协同工作等。常见的托管平台有 `Github`(国内访问速度受限)和 `gitee` (国内托管平台,访问速度快)。`本地版本库` 与 `远端版本库` 之间的交互主要涉及到 `克隆` 、`拉取` 、`抓取`、`推送` 这几个操作。
2023-07-12 12:27:37 3181
原创 TortoiseGit 入门指南04:查看提交日志
如果每次**提交**都按照规定格式书写提交信息,这样一来就可以使用**日志**功能来查看开发过程,找出所做的更改以及更改原因。在仓库中右击鼠标 - 选择 `TortoiseGit - Show log` 打开日志对话框
2023-07-11 08:41:41 3402
原创 TortoiseGit 入门指南03:将修改提交到版本库
你现在应该已经有了一个仓库,在工作过程中会对项目做一些修改,比如添加代码、修复错误等等,你将不定时的将这些更改 `提交`(commit)到代码仓库。
2023-07-10 13:16:24 1127
原创 TortoiseGit 入门指南02:创建和克隆仓库
本节讲解如何使用 TortoiseGit 创建和克隆仓库。但在此之前,我们先来看下 TortoiseGit 软件的一个特色:图标。TortoiseGit 会给 `工作区` 中的文件和文件夹叠加图标(`Icon Overlays`),图标反应的是这些文件和文件夹的当前状态。目前,共 9 种图标。
2023-07-09 21:30:04 1341
原创 TortoiseGit 入门指南01:环境搭建和软件设置
TortoiseGit 是版本控制系统 Git 的图形用户界面,是一个开源软件,用于 Windows 环境。本篇介绍环境搭建和软件设置
2023-07-09 19:31:16 1066
原创 随想012:断言
主流编程语言不约而同的在语言层面上提供了 `断言` 机制;编程专家们不约而同的提倡使用 `断言`;优秀的代码不约而同的已经使用了 `断言` 。即使是第一次听说断言,你也应该意识到,这个东西应该挺重要。那么接下来的问题是,什么是断言(**assert**)?
2023-06-29 11:06:27 312
原创 Keil 重定向 fputc 函数 以及 printf 函数的代码尺寸测试
本文的开发环境为 Keil + Cortex-M3 内核处理器。介绍重定向 fputc 函数的方法测试 printf 函数的代码尺寸
2023-06-21 16:18:24 1330 2
原创 lwIP更新记08:TCP 回调函数中调用 tcp_abort 终于安全了
从 lwIP-1.4.0 开始,从 tcp 回调函数中调用 `tcp_abort` 函数终于安全了。在此之前,如果从 tcp 回调函数中调用 `tcp_abort`,则会访问未分配的内存。
2023-05-26 08:11:35 1824 2
原创 随想011:关于编程
软件工程的最基本经验是:保持简洁。软件设计有两种方式:一种是设计得极为简洁,明显没有缺陷;另一种是设计得极为复杂,没有明显的缺陷。第一种方式要难得多。
2023-05-25 11:23:43 1106 1
原创 lwIP更新记07:TCP 控制块申请失败可以检测到了
从 lwIP-2.0.0 开始,TCP 控制块申请失败可以检测到了。这个更新应用在 TCP 服务器模式中,处于`监听`状态的 TCP_PCB ,如果收到客户端发送的 SYN 同步标志,表示一个客户端在请求建立连接了。lwIP 会为这个新连接申请一个 TCP_PCB ,这一过程在 `tcp_listen_input` 函数中完成的。然而 TCP_PCB 的个数是有限的,如果申请失败,对于失败的处理, lwIP-2.0.0 及以上版本与 lwIP-1.4.1不同。lwIP-1.4.1 失败的毫无声息,而
2023-05-24 11:11:52 907
原创 lwIP更新记06:申请 TCP 控制块(tcp_alloc)
从 lwIP-2.0.0 开始,申请 `tcp_pcb` 控制块的逻辑发生了变化。每个 tcp 连接都必须有一个 PCB 控制块 ,使用函数 `tcp_new()` 申请 PCB 控制块。
2023-05-23 14:40:55 1224
原创 lwIP更新记05:核心应用文件移动
从 lwIP-2.0.0 开始,lwIP 开发者将一些核心应用从 `contrib` 仓库移动到 `lwIP` 仓库的 `src/apps` 文件夹。对比版本 `lwIP-1.4.1` 和 `lwIP-2.1.2` 的 `src` 文件夹内容,可以发现 `lwIP 2.1.2` 版本多了一个 `apps` 文件夹。
2023-05-22 12:09:04 528
原创 lwIP更新记04:TCP 初始序列号生成算法可以自定义了
从 lwIP-2.0.0 开始,可以自定义 TCP 报文段的初始序列号。TCP 报文段首部有一个序列号字段,它是一个32位的计数器,从 0 到 4294967295,它的值为当前报文段中第一个数据的字节序号。TCP 在建立连接的时候需要初始序列号(Initial Sequence Number:ISN),lwIP 为每个新的 TCP 连接生成一个 TCP 初始序列号。tcp.c 中的函数 `tcp_next_iss` 用于这个目的。
2023-05-22 10:57:18 504
原创 lwIP更新记03:IPv6
从 lwIP-2.0.0 开始,lwIP 终于有可用的 IPv6 协议栈了!从这个版本开始,lwIP 支持 `双栈`(IPv4 和 IPv6 同时使用) 或 `IPv4/IPv6 二选一` 。lwIP-1.4.1 版本也有 IPv6,但那是实验性质的(见..\lwip-1.4.1\src\core\ipv6目录下的`README`文件),并不能在实际项目中使用的。
2023-05-21 16:50:48 1310
原创 lwIP更新记02:网络接口标志(一个标志只做一件事)
从lwIP 2.0.0 开始,修改网络接口 netif 的`up`标志为管理标志,`up`标志**不再具有**以前的 `IP4 地址有效` 含义。现在,如果一个网络接口 netif 没有设置`up`标志,则用户**不能**在这个网络接口上收发数据!即便是使用 DHCP,在启动 DHCP 客户端之前,也要将 netif 设置为`up`状态。这与lwIP 1.4.1版本不同。
2023-05-21 11:47:21 1223
原创 lwIP更新记01:全局互斥锁替代消息机制
从 lwIP-2.0.0 开始,在 `opt.h` 中多了一个宏开关 `LWIP_TCPIP_CORE_LOCKING`,默认使能。这个宏用于启用 `内核锁定` 功能,使用 `全局互斥锁` 实现。在之前,lwIP 使用 `消息机制` 解决 lwIP 内核线程安全问题。消息机制易于实现,因为实现简单,更容易做到高稳定性。但使用消息机制效率低下,所以 lwIP 从 V2.0.0 开始,正式支持(并默认使用)全局互斥锁,同时仍保留消息机制。全局互斥锁方案实现复杂,但效率非常高。本文探索全局互斥锁方案是怎么诞生并
2023-05-20 16:38:18 1233 1
原创 随想010:该在哪里花费时间
当一个复杂的软件产品刚开始的时候,它还没有吸引众多用户。这意味着开发人员不必考虑多许多人造成不便或者“破坏”使用该产品的程序,因此可以快速地对产品进行修改。的前 5 个主要版本(X1 ~ X103)在 2 年内发布,但自从1987 年 9 月 发布版本。这是软件设计的一个重要的长远原则,当你开发一个重要的产品而且希望它能持续很长一段时间时,至今几乎仍是 UNIX/Linux 所有 GUI 的基础。一个灵活的、深思熟虑的设计可以使产品的生命力持久。以来,经过了将近 36 年,这描述了一个有趣的现象。
2023-05-18 16:24:52 655
真正的《基于 S3C2440的触摸屏驱动程序实现》强新建、田泽、刘天时
2009-10-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人