朱工的专栏

专注/深入/分享

排序:
默认
按更新时间
按访问量

历史上的重大软件BUG启示录第9篇---微软的硬件尝试

(图片来源于网络) 2001年苹果公司发布第一代iPod,它的推出在当时引起了轰动,它拥有大容量存储空间和全新的操作方式,并且还非常漂亮(在当时看来),因此在市场上大受欢迎,苹果公司也因此赚的盆满钵满。 微软公司看到了个人播放器的前景,也想从这个市场分一杯羹,因此微软公司在2006年推出了第一代类...

2017-07-30 12:07:16

阅读数:2957

评论数:16

历史上的重大软件BUG启示录第8篇---不可忽视的看门狗

(图片来源于网络)        你可能不知道上面的图片是什么狗,或者连“二哈”是什么也不知道,没关系。但是作为嵌入式工程师,你不能不知道“看门狗”是什么!       1994年1月25日,弹道导弹防御组织和 美国宇航局(NASA)共同发射了一颗新型月球探测器,命名为克莱门汀号(Clem...

2017-02-21 21:20:31

阅读数:3303

评论数:4

详解RS-485上下拉电阻的选择

注:本文转载于致远电子。 前言:RS-485总线广泛应用于通信、工业自动化等领域,在实际应中,通常会遇到是否需要加上下拉电阻以及加多大的电阻合适的问题,下面我们将对这些问题进行详细的分析。一、为什么需要加上下拉电阻? 根据RS-485标准,当485总线差分电压大于+200mV时,485收发器输出高...

2017-01-17 10:24:18

阅读数:12700

评论数:0

LwIP BUG之TCP连接丢失

注:本文转自老衲五木的博客! LwIP所有版本包括最新的2.0版本具有以下缺陷,当用户使用raw编程并在err或poll回调函数中操作了内核全局tcp_active_pcbs链表(最典型的,比如进行了重连操作),将有可能导致链表异常,严重情况下,链表中的很多tcp_pcb会丢失,从而导致部分连接没...

2017-01-05 09:19:06

阅读数:4125

评论数:0

历史上的重大软件BUG启示录第7篇---美国商务航空公司的烦恼

(图片来源于网络)         2004年12月25日,美国商务航空公司(Comair)由于计算机系统瘫痪,不得不启动“有限”飞行计划,取消圣诞节期间飞往119个城市的1100个航班,给3万名乘客带来麻烦。         虽然航空公司没有透露具体损失数额,但据专家估计,美国商务航空公司这次发...

2016-12-24 08:56:25

阅读数:2267

评论数:0

CAN设计与应用指南

0.前言 这是我为公司写的一个关于CAN总线的入门文章,对全面理解CAN总线特性很有帮助,拿出来分享给大家。1. 简介 CAN总线由德国BOSCH公司开发,最高速率可达到1Mbps。CAN的容错能力特别强,CAN控制器内建了强大的检错和处理机制。另外不同于传统的网络(比如USB或者以太网),CAN...

2016-11-25 14:28:00

阅读数:5014

评论数:0

历史上的重大软件BUG启示录 第6篇---蠕虫“冲击波”

(图片来源于网络)         RPC(远程过程调用)是一种进程间通讯机制,最初由 Sun 公司提出,目前为 IETF 标准协议。RPC 协议允许一台计算机上的程序执行另一台远程系统上的代码。Windows的RPC服务也是以RPC为基础开发的。         2003年某个时候,LSD研究小...

2016-11-24 14:46:50

阅读数:2406

评论数:1

FatFs路径名称规则、字符集和卷管理

本文基于V0.12b版本1.路径名称格式         FatFs模块路径名格式与DOS/Windos文件名规格类似,如下所示:                                     [驱动器:] [/]目录/文件         FatFs模块支持长文件名(LFN)和8.3格...

2016-11-24 08:25:32

阅读数:4203

评论数:1

FatFs模块功能配置选项

Fatfs模块的功能可以裁剪,通过配置宏定义实现,宏定义位于文件ffconf.h中。1.功能配置1.1 _FS_READONLY 使能或禁用与写相关函数。 当设置为只读(1)时,API函数f_write、f_sync、f_unlink、f_mkdir、f_chmod、f_rename、f_trun...

2016-10-24 13:18:10

阅读数:5484

评论数:0

FatFs模块系统应用指南

本文使用的FatFs版本:V0.12b(2016年9月4发布)1.如何移植1.1首要考虑 FatFs模块移植基于以下假设条件:ANSI C编译器应遵循ANSI C。FatFs模块是以ANSI C(C89标准)语言编写的中间件软件,它不依赖任何硬件平台,只要相应的编译器支持ANSI C。整形类型大小...

2016-10-22 17:24:14

阅读数:5474

评论数:3

控制IRQ和FIQ中断的编译器内部函数 - 基于Keil MDK

编译器内部函数__disable_irq、__enable_irq、__disable_fiq和__enable_fiq用于控制IRQ和FIQ中断。 只有当处理器处于特权模式才可以使用这些内部函数,因为这些函数要改变寄存器CPSR和SPSR(ARM7、ARM9等)或者PRIMASK和FAULTMA...

2016-10-14 14:14:25

阅读数:3242

评论数:0

串口服务器设计指南

图0:串口服务器 - 系统信息0. 前言 串口服务器是一种将串口数据转换为网口数据的设备,它在工业方面使用较多。这类设备需要非常高的稳定性,但是稳定性跟设计人员的硬件水平、软件水平以及测试等关系密切,这个范围太大,这里只是谈串口服务器软件如何设计。1. 核心数据结构设计1.1 串口数据结构串口参数...

2016-10-13 14:33:42

阅读数:3263

评论数:5

历史上的重大软件BUG启示录 第5篇---AT&T长途电话网瘫痪事件

(图片来源于网络) 时间:1990年1月15日,星期一,下午2点25分; 地点:新泽西州,贝德明斯特,AT&T电话网络运营中心。 和往常一样,长途电话运行监控室的职员们悠闲的做着手头上的工作。AT&T长途电话网络,在当时已经占据了这个国家70%的长途通讯量、路由超过11.5亿次电话...

2016-09-05 21:07:59

阅读数:3311

评论数:0

历史上的重大软件BUG启示录 第4篇---Google的疏忽

(图片来源于网络) 很多的软件Bug源自于输入错误,即便像Google这样的国际大公司。 在Google上搜索的时候,有些结果列表项中带有一条警告,表明Google认为它带有恶意代码。 如果你在2009年1月31日一大早使用Google搜索的话,你就会看到,在那天早晨55分钟的时间内,Google...

2016-09-04 11:49:11

阅读数:2668

评论数:0

历史上的重大软件BUG启示录 第3篇---价值5亿美元的简单复用

(图片来源于网络)       1996年6月4日,Ariane 5火箭第一次航行,一个软件错误便产生了灾难性后果。发射后仅仅37秒,火箭偏离了它的飞行路径,随后解体并且爆炸。火箭上载有价值5亿美元的卫星。       Ariane5是欧洲航天局推出的新一代重型航天运载火箭,它的上一代运载火箭Ar...

2016-09-03 17:02:55

阅读数:2416

评论数:0

历史上的重大软件BUG启示录 第2篇---心脏滴血

(图片来源于网络) OpenSSL"心脏滴血"漏洞于2014年4月7号被曝光,“黑客只要对存在这一漏洞的网站发起攻击,每次读取服务器内存中64K数据,不断的迭代获取,就能获取程序源码、用户http原始请求、用户cookie甚至明文帐号密码等敏感信息”。全球三分之一的以"...

2016-09-02 21:42:05

阅读数:2527

评论数:0

历史上的重大软件BUG启示录 第1篇---"瞳"的陨落

(图片来源于网络)      2016年2月17日,日本成功发射了一颗卫星,他们给这颗卫星起了个好听的名字:“瞳”。“瞳”卫星的造价为2.86亿美元,约合人民币18.6亿元。卫星上携带的X射线检测仪器,有望揭开黑洞等宇宙的未解之谜,被寄予厚望,代表了“新一代X射线天文学”的未来。      然而时...

2016-09-02 21:27:28

阅读数:2843

评论数:0

FreeRTOS高级篇11---空闲任务分析

当RTOS调度器开始工作后,为了保证至少有一个任务在运行,空闲任务被自动创建,占用最低优先级(0优先级)。 xReturn = xTaskCreate( prvIdleTask, "IDLE",configMINIMAL_S...

2016-07-29 08:37:58

阅读数:11094

评论数:16

FreeRTOS高级篇10---系统节拍时钟分析

         操作系统的运行是由系统节拍时钟驱动的。         在FreeRTOS中,我们知道系统延时和阻塞时间都是以系统节拍时钟周期为单位。在配置文件FreeRTOSConfig.h,改变宏configTICK_RATE_HZ的值,可以改变系统节拍时钟的中断频率,也间接的改变了系统节拍...

2016-07-28 09:33:01

阅读数:11479

评论数:10

FreeRTOS高级篇9---FreeRTOS系统延时分析

FreeRTOS提供了两个系统延时函数:相对延时函数vTaskDelay()和绝对延时函数vTaskDelayUntil()。相对延时是指每次延时都是从任务执行函数vTaskDelay()开始,延时指定的时间结束;绝对延时是指每隔指定的时间,执行一次调用vTaskDelayUntil()函数的任务...

2016-06-18 11:21:43

阅读数:18053

评论数:3

FreeRTOS高级篇8---FreeRTOS任务通知分析

在FreeRTOS版本V8.2.0中推出了全新的功能:任务通知。在大多数情况下,任务通知可以替代二进制信号量、计数信号量、事件组,可以替代数长度为1的队列(可以保存一个32位整数或指针值),并且任务通知速度更快、使用的RAM更少!我在《 FreeRTOS系列第14篇---FreeRTOS任务通知》...

2016-06-10 22:38:07

阅读数:10500

评论数:0

FreeRTOS高级篇7---FreeRTOS内存管理分析

内存管理对应用程序和操作系统来说都非常重要。现在很多的程序漏洞和运行崩溃都和内存分配使用错误有关。        FreeRTOS操作系统将内核与内存管理分开实现,操作系统内核仅规定了必要的内存管理函数原型,而不关心这些内存管理函数是如何实现的。这样做大有好处,可以增加系统的灵活性:不同的应用场合...

2016-06-07 19:38:57

阅读数:21127

评论数:4

FreeRTOS高级篇6---FreeRTOS信号量分析

FreeRTOS的信号量包括二进制信号量、计数信号量、互斥信号量(以后简称互斥量)和递归互斥信号量(以后简称递归互斥量)。关于它们的区别可以参考《 FreeRTOS系列第19篇---FreeRTOS信号量》一文。         信号量API函数实际上都是宏,它使用现有的队列机制。这些宏定义在se...

2016-05-30 13:42:42

阅读数:14494

评论数:12

FreeRTOS历史版本更新记录

前言:本文会不定期更新,一方面FreeRTOS发布新版本时会第一时间跟进;另一方面,会慢慢补上V8.0之后的版本更新内容。FreeRTOSV9.0.0与FreeRTOS V9.0.0rc2更新记录:        FreeRTOSV9.0.0发行于2016.05.25,推荐官方网站下载。考虑到官方...

2016-05-28 16:57:41

阅读数:13537

评论数:6

FreeRTOS高级篇5---FreeRTOS队列分析

FreeRTOS提供了多种任务间通讯方式,包括:任务通知(版本V8.2以及以上版本)队列二进制信号量计数信号量互斥量递归互斥量      其中,二进制信号量、计数信号量、互斥量和递归互斥量都是使用队列来实现的,因此掌握队列的运行机制,是很有必要的。      队列是FreeRTOS主要的任务间通讯...

2016-05-26 20:58:19

阅读数:19828

评论数:12

FreeRTOS高级篇4---FreeRTOS任务切换分析

FreeRTOS任务相关的代码大约占总代码的一半左右,这些代码都在为一件事情而努力,即找到优先级最高的就绪任务,并使之获得CPU运行权。任务切换是这一过程的直接实施者,为了更快的找到优先级最高的就绪任务,任务切换的代码通常都是精心设计的,甚至会用到汇编指令或者与硬件相关的特性,比如Cortex-M...

2016-05-15 19:31:41

阅读数:22384

评论数:11

FreeRTOS高级篇3---FreeRTOS调度器启动过程分析

使用FreeRTOS,一个最基本的程序架构如下所示:int main(void) { 必要的初始化工作; 创建任务1; 创建任务2; ... vTaskStartScheduler(); /*启动调度器*/ while(1); }     ...

2016-05-06 14:57:32

阅读数:15149

评论数:7

FreeRTOS高级篇2---FreeRTOS任务创建分析

在FreeRTOS基础系列《FreeRTOS系列第10篇---FreeRTOS任务创建和删除》中介绍了任务创建API函数xTaskCreate(),我们这里先回顾一下这个函数的声明: BaseType_t xTaskCreate( ...

2016-05-03 13:31:08

阅读数:18810

评论数:10

RS-485接口电路指南(TI:SLLA036D)

摘要:本设计指南讨论如何设计RS-485接口电路。文中讨论了平衡传输线标准的必要性,并给出了一个过程控制设计例子。文中还分标题讨论了线路负载、信号衰减、失效保护和电流隔离。1. 为什么需要平衡传输线标准       本文的重点在于工业最广泛使用的平衡传输线标准:ANSI/TIA/EIA-485-A...

2016-04-26 11:20:38

阅读数:7883

评论数:0

FreeRTOS高级篇1---FreeRTOS列表和列表项

FreeRTOS内核调度大量使用了列表(list)这一数据结构。我们如果想一探FreeRTOS背后的运行机制,首先遇到的拦路虎就是列表。对于FreeRTOS内核来说,列表就是它最基础的部分。我们在这一章集中讲解列表和列表项的结构以及操作函数,在下一章讲解任务创建时,会用到本章的知识点。      ...

2016-04-19 14:34:13

阅读数:14769

评论数:16

FreeRTOS系列第20篇---FreeRTOS信号量API函数

FreeRTOS的信号量包括二进制信号量、计数信号量、互斥信号量(以后简称互斥量)和递归互斥信号量(以后简称递归互斥量)。我们可以把互斥量和递归互斥量看成特殊的信号量。      信号量API函数实际上都是宏,它使用现有的队列机制。这些宏定义在semphr.h文件中。如果使用信号量或者互斥量,需要...

2016-03-18 10:07:40

阅读数:17024

评论数:12

FreeRTOS系列第19篇---FreeRTOS信号量

1.信号量简介      FreeRTOS的信号量包括二进制信号量、计数信号量、互斥信号量(以后简称互斥量)和递归互斥信号量(以后简称递归互斥量)。      我们可以把互斥量和递归互斥量看成特殊的信号量。互斥量和信号量在用法上不同:信号量用于同步,任务间或者任务和中断间同步;互斥量用于互锁,用于...

2016-03-09 15:21:36

阅读数:15795

评论数:4

FreeRTOS系列第18篇---FreeRTOS队列API函数

FreeRTOS为操作队列提供了非常丰富的API函数,包括队列的创建、删除,灵活的入队方式和出队、带中断保护的入队和出队等等。下面就来详细讲述这些API函数。1.获取队列入队信息数目1.1函数描述      UBaseType_t uxQueueMessagesWaiting( QueueHand...

2016-03-04 11:00:34

阅读数:19631

评论数:5

FreeRTOS系列第17篇---FreeRTOS队列

1.FreeRTOS队列      队列是主要的任务间通讯方式。可以在任务与任务间、中断和任务间传送信息。大多数情况下,队列用于具有线程保护的FIFO(先进先出)缓冲区:新数据放在队列的后面。当然,数据也可以放在队列的前面,在下一篇讲队列API函数时,会涉及到数据的存放位置。图1-1:读写队列  ...

2016-02-25 11:05:22

阅读数:13857

评论数:0

FreeRTOS系列第16篇---可视化追踪调试

使用RTOS编程,为每个任务分配多大的堆栈空间就成了一项技术活:分配多了浪费系统资源,分配少了又恐怕会发生堆栈溢出。由于中断和抢占式调度器的存在,我们要估算出一个任务需要多少堆栈是非常困难的,今天我们就介绍一种方法,来获取每个任务的剩余堆栈空间。本文以NXP LPC177x_8x系列微控制器为例。...

2016-02-22 16:25:50

阅读数:17079

评论数:2

FreeRTOS系列第15篇---使用任务通知实现命令行解释器

虽然这是介绍FreeRTOS系列的文章,但这篇文章偏重于命令行解释器的实现。这一方面是因为任务通知使用起来非常简单,另一方面也因为对于嵌入式程序来说,使用命令行解释器来辅助程序调试是非常有用的。程序调试是一门技术,基本上我们需要两种调试手段,一种是可以单步仿真的硬件调试器,另外一种是可以长期监视程...

2016-02-12 09:27:02

阅读数:11577

评论数:14

FreeRTOS系列第14篇---FreeRTOS任务通知

每个RTOS任务都有一个32位的通知值,任务创建时,这个值被初始化为0。RTOS任务通知相当于直接向任务发送一个事件,接收到通知的任务可以解除阻塞状态,前提是这个阻塞事件是因等待通知而引起的。发送通知的同时,也可以可选的改变接收任务的通知值。      可以通过下列方法向接收任务更新通知:不覆盖接...

2016-01-25 11:08:54

阅读数:21447

评论数:2

FreeRTOS系列第13篇---FreeRTOS内核控制

内核控制的一些功能需要移植层提供,为了方便移植,这些API函数用宏来实现,比如上下文切换、进入和退出临界区、禁止和使能可屏蔽中断。内核控制函数还包括启动和停止调度器、挂起和恢复调度器以及用于低功耗模式的调整系统节拍函数。1.强制上下文切换宏      taskYIELD:用于强制上下文切换的宏。在...

2016-01-21 10:00:44

阅读数:12623

评论数:1

FreeRTOS系列第12篇---FreeRTOS任务应用函数

任务应用函数是一组辅助类函数,一般用于调试信息输出、获取任务句柄、获取任务状态、操作任务标签值等等。1.获取任务系统状态1.1函数描述 UBaseType_t uxTaskGetSystemState( TaskStatus_t * c...

2016-01-11 17:15:59

阅读数:21759

评论数:6

FreeRTOS系列第11篇---FreeRTOS任务控制

FreeRTOS任务控制API函数主要实现任务延时、任务挂起、解除任务挂起、任务优先级获取和设置等功能。1.相对延时1.1函数描述      void vTaskDelay( portTickTypexTicksToDelay )      调用vTaskDelay()函数后,任务会进入阻塞状态,...

2016-01-04 10:53:42

阅读数:25188

评论数:4

FreeRTOS系列第10篇---FreeRTOS任务创建和删除

在FreeRTOS移植到Cortex-M3硬件平台的文章中,我们已经见过任务创建API,但那篇文章的重点在于如何移植FreeRTOS,本文将重点放在任务的创建和删除API函数上面。      任务创建和删除API函数位于文件task.c中,需要包含task.h头文件。1.任务创建1.1函数描述 ...

2015-12-21 14:43:04

阅读数:22972

评论数:14

FreeRTOS系列第9篇---FreeRTOS任务概述

1. 任务和协程(Co-routines)      应用程序可以使用任务也可以使用协程,或者两者混合使用,但是任务和协程使用不同的API函数,因此在任务和协程之间不能使用同一个队列或信号量传递数据。      通常情况下,协程仅用在资源非常少的微处理器中,特别是RAM非常稀缺的情况下。目前协程很...

2015-12-15 11:25:34

阅读数:17580

评论数:0

FreeRTOS系列第8篇---FreeRTOS内存管理

FreeRTOS提供了几个内存堆管理方案,有复杂的也有简单的。其中最简单的管理策略也能满足很多应用的要求,比如对安全要求高的应用,这些应用根本不允许动态内存分配的。      FreeRTOS也允许你自己实现内存堆管理,甚至允许你同时使用两种内存堆管理方案。同时实现两种内存堆允许任务堆栈和其它RT...

2015-12-10 13:41:24

阅读数:22571

评论数:2

FreeRTOS系列第7篇---Cortex-M内核使用FreeRTOS特别注意事项

在阅读本文之前,有两个定义在FreeRTOSConfig.h中的宏,你必须先明白它们是什么意思,《FreeRTOS内核配置说明》一文中,讲解了这两个宏: configKERNEL_INTERRUPT_PRIORITYconfigMAX_SYSCALL_INTERRUPT_PRIORITY  ...

2015-12-02 08:38:28

阅读数:18312

评论数:15

FreeRTOS系列第6篇---FreeRTOS内核配置说明

       FreeRTOS内核是高度可定制的,使用配置文件FreeRTOSConfig.h进行定制。每个FreeRTOS应用都必须包含这个头文件,用户根据实际应用来裁剪定制FreeRTOS内核。这个配置文件是针对用户程序的,而非内核,因此配置文件一般放在应用程序目录下,不要放在RTOS内核源码...

2015-12-01 21:14:21

阅读数:34464

评论数:21

FreeRTOS系列第5篇---FreeRTOS在Cortex-M3上的移植

1. FreeRTOS下载包的文件结构       在FreeRTOS官方网站可以下载到最新版的FreeRTOS包,我这里使用的是V8.2.3版本。       下载包内的总文件数量多的令人生畏,但文件结构却很简洁。《FreeRTOS入门指南》一文的第3节详细描述了下载包文件结构,我们这里只是简单...

2015-11-27 16:38:46

阅读数:30685

评论数:30

FreeRTOS系列第4篇---FreeRTOS编码标准及风格指南

1.编码标准       FreeRTOS的核心源代码遵从MISRA编码标准指南。这个标准篇幅稍长,你可以在MISRA官方网站花少量钱买到,这里不再复制任何标准。       FreeRTOS源代码不符合MISRA标准的项目如下所示: 有两个API函数有多个返回点。MISRA编码标准强制规定:...

2015-11-26 16:38:26

阅读数:19532

评论数:1

FreeRTOS系列第3篇---FreeRTOS移植指南

FreeRTOS下载包中已经包含很多演示例程- 每一个例程都是针对于: 特定的微控制器;特定的开发工具(编译器、调试器等等);特定的硬件平台(样机或评估板)。       可以在官方网站首页左侧的树形菜单 'Supported Devices' 中找到这些例程介绍。        可惜的是...

2015-11-21 08:51:29

阅读数:25378

评论数:5

FreeRTOS系列第2篇---FreeRTOS入门指南

FreeRTOS可以被移植到很多不同架构的处理器和编译器。每一个RTOS移植都附带一个已经配置好的演示例程,可以方便快速启动开发。更好的是,每个演示例程都附带一个说明网页,提供如何定位RTOS演示工程源代码、如何编译演示例程、如何配置硬件平台的全部信息。       演示例程说明网页还提供基本的R...

2015-11-13 16:06:02

阅读数:43060

评论数:5

FreeRTOS系列第1篇---为什么选择FreeRTOS?

1.为什么学习RTOS?          作为基于ARM7、Cortex-M3硬件开发的嵌入式工程师,我一直反对使用RTOS。不仅因为不恰当的使用RTOS会给项目带来额外的稳定性风险,更重要的是我认为绝大多数基于ARM7、Cortex-M3硬件的项目,还没复杂到使用RTOS的地步,使用状态机就...

2015-11-13 15:55:38

阅读数:86621

评论数:32

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