
嵌入式
fang_chuan
打打杂啦
展开
-
Cortex-M3的存储器映射
Cortex-M3不同于其他ARM系列的处理器,它的存储器映射表已经在内核设计时固定好,不能由芯片厂商更改。 Cortex‐M3预先定义好了“粗线条的”存储器映射。通过把片上外设的寄存器映射到外设区,就可以简单地以访问内存的方式来访问这些外设的寄存器,从而控制外设的工作。结果,片上外设可以使用C语言来操作。这种预定义的映射关系,也使得对访问速度可以做高度的优化,而且对于片上系统的设原创 2015-09-10 10:48:37 · 3673 阅读 · 0 评论 -
uC/OS-II任务机制理解
半年前接触的uC/OS,看了两个月之后又因为其他的事把他放下了。现在因为项目需要又把它重拾起来。 uC/OS----Micro Controller OS微控制器操作系统,美国人Jean Labrosse于1192年完成,1998年出现uC/OS--II,2000年NASA许可可用于飞行器中(无人机中有木有啊!但是很少有极客把他用到飞控中,APM的操作系统是一个裁剪的Linux-原创 2015-09-05 09:19:43 · 1325 阅读 · 0 评论 -
uC/OS--II的时间管理
上一次我们谈到了任务管理,今天来讲一下uC/OS的时间管理。 大家初学单片机的时候都跑过流水灯这个例程吧,流水灯程序里一定有延时函数delay吧,想想那时候delay是怎么写的:让CPU空转!空转啊同学们,多么令人心疼的事,8051核这么经典的设计让你们用来空转啊(咳咳,当然了51跑多任务还是比较吃力的)。 那么说回来,uC/OS是如何处理眼是这个问题的呢?μ原创 2015-09-07 21:45:22 · 857 阅读 · 0 评论 -
Thumb-2指令集
Thumb‐2是一个突破性的指令集。它强大,它易用,它轻佻,它高效。Thumb‐2是16位Thumb指令集的一个超集,在Thumb‐2中,16位指令首次与32位指令并存,结果在Thumb状态下可以做的事情一下子丰富了许多,同样工作需要的指令周期数也明显下降。 图1.4 Thumb-2指令集与Thumb指令集的关系 从图中可见,Cortex‐M3勇敢地拒原创 2015-09-10 10:09:14 · 26903 阅读 · 3 评论 -
uC/OS--II在STM32F103ZET6上的移植
本文是在参考野火移植uC/OS教程的基础上写的一点心得,如有误请指正。 第一件事就是去下载uC/OS的源码啦,要用什么版本的你自己定,我用的是v2.86,v2.90也可以。http://micrium.com/,要自己注册账户哦,免费下载。 解压后有几个重要的文件,AppNotes/ANxx_ST_XX,这个是uC/OS作者在stm32上移植时的写的移植笔记,很有借鉴价原创 2015-09-12 10:58:55 · 1959 阅读 · 0 评论 -
uboot中的内存映射
今天在给路由器刷openwrt时,看着那些刷机教程的指令,突然觉得不对,小路由器板子上只有32M内存,4MFLASH,哪来0x80000000那么大的内存地址,想了一会,对了,uboot程序中好像是对MMU单元做了初始化,所以是可以使用虚拟内存的。转载 2016-11-28 18:05:51 · 2780 阅读 · 0 评论 -
Linux内核链表的一点随笔
今天在看linux的内核链表这一章时,看到了很有意思的一个东西,几下来分享下,同时写一点我的看法。谈到内核链表,在linux源码里我们会看到铺天盖地的链表,内核里有那么多的结构体,那么内核源码是怎么样将这些链表高效的操作的呢。我觉得内核源码力度额第一个亮点就是这个双向链表struct list_head的设计#define list_entry(ptr,type,member) ((t原创 2016-11-23 14:43:44 · 427 阅读 · 0 评论 -
WIFI快连---SmartConfig技术
呼,好久没有写博客了,最近忙着产品升级,各种乱七八糟的事。我们产品线要做一个物联网模块,综合比较了WIFI、蓝牙、GPRS各种模块后,我还是决定选用GPRS,没办法目标受众不一样。在调研WIFI 模块时我就很好奇这个WIFI SSD密码自动配置的功能,当时我还推测是采用了Android里的WIFI直连功能,呵呵有点跑偏。查阅相关资料后才知道这是SmartConfig技术,TI早在2009年就攻克...转载 2018-01-31 18:00:14 · 1346 阅读 · 0 评论 -
WIFI快连协议层原理
承上一篇WIFI快连的介绍,本文详细解答关于快连技术的的一些实现原理,不一定是TI的SmartConfig或微信的Airkiss的实现原理,仅供参考。另附上物联网微信硬件平台的解决方案.WIFI物联网解决方案中,通常我们需要对设备进行绑定,需要通过某种方法先对设备进行发现,比如微信硬件采用广播的方式,定时向外发送上线消息或者采用一问一答的方式进行发现,Bonjour是由苹果公司实现的一转载 2018-01-31 19:18:16 · 2031 阅读 · 0 评论 -
蓝牙4.0BLE模块的传输速率问题
新产品方案确定使用蓝牙4.0模块,就是淘宝上烂大街的BLE4.0模块,以前也用过,没去细究,但是这次需要蓝牙有足够快的传输速率,所以研究了一下这个方案。本文只讨论BLE模式下的数据包格式和传输速率问题,关于BlueTooth4.0协议见下一章。 下文转自嵌入式企鹅圈。 蓝牙BLE的最大特点就是低功耗,而低速率和简单的交互协议是降低功耗的重要组成部分。因此BLE一般应用于低速率的...转载 2018-02-12 15:27:14 · 13593 阅读 · 1 评论 -
蓝牙4.0BLE协议浅析
上一篇大致分析了下BLE的传输速率,今天给大家贴上BLE协议的详解。 原文地址 http://blog.youkuaiyun.com/zzfenglin/article/details/51706290 有兴趣的可以深入研究蓝牙协议: https://crifan.com/files/doc/docbook/bluetooth_intro/release/html/bluetoot...转载 2018-02-28 00:03:41 · 3775 阅读 · 0 评论 -
Cortex-M3的咬尾中断技术
Cortex—M3在中断控制系统上的设计可谓是煞费心机,这也不奇怪,要支持操作系统,必须要有优越性能的中断系统。 今天在看《Cortex—M3权威指南》时(这是一本很好的书,Cortex系列的精品!想学习ARM的童鞋不能错过),看到了他的中断咬尾技术,觉得好熟悉,才想起在学习TI的M4系列开发板时听过这个东西,当时根本不懂,糊里糊涂就把单片机用起来了。今天仔细看了这个所谓高大上的原创 2015-09-16 17:21:20 · 4335 阅读 · 2 评论 -
uCGUI学习笔记之显示文本
ZlgGUI适合于低端处理器;uCGUI应用最广泛,易于移植,被大部分中低端处理器采用;openGUI的源码为汇编编写,适用于通用PC机,可在各种操作系统移植、Microwindows兼容windows。 uCGUI对CPU要求不限,底层为ANSI C编写。带有图库算法,不需要浮点算法,速度快。支持各种LCD驱动。视窗显示和管理工作。原创 2015-09-28 15:22:53 · 2669 阅读 · 0 评论 -
ucGUI学习笔记之对话框
在emWin模板上学习了两个关于对话框的设计,已经接触到了对话框设计基本要用到的几种控件,现在献上我的拙见,如有误请指正!原创 2015-10-03 09:31:35 · 3149 阅读 · 0 评论 -
ARM处理器的MMU单元
MMU(存储器管理单元)在ARM7、ARM9、ARM10、ARM11、Xscale、Cortex-A系列都有,它能把系统中不同类型的存储器(Flash,SRAM,SDRAM,U盘等)进行统一管理,通过地址映射,是需要运行在连续地址空间的软件运行在不连续的物理存储器中,使需要较大运行内存的软件运行在容量较小的物理存储器中,这就是所谓的虚拟存储技术。 (1)虚拟地址到物理地址的映射原创 2015-09-11 00:09:47 · 1174 阅读 · 0 评论 -
STM32的启动文件解读
用stm32开发的人都添加过启动文件吧,一般是keil mdk给我们默认添加的,但是如果要升级换代,还是要手工添加或者修改下,这时候就必须要弄明白它的启动文件里到底是什么鬼了,不然不明不白的就去修改它,肯定会出问题的啦。 在一大堆注释后,它首先对栈和堆的大小进行定义,并在代码区的起始处建立中断向量表,从__Vectors 开始到__Vectors_end结束。 其第一个原创 2015-09-12 16:52:46 · 757 阅读 · 0 评论 -
STM32经keil mdk编译产生的.map文件分析
昨天遇到堆大小不足的问题,扩大Heap的size觉得有必要去分析下整个程序的内存占用的详细情况,仅仅从生成的Code + RO + RW +ZI提示太笼统,无法清楚的看见我写的每一个函数,定义的每一个全局变量、静态变量的具体位置、大小等等,经各路大神的提示,我去仔细研究了下.map文件,上网查阅了相关的资料,本文主要受博主 " 非著名码农" 的启示,原文地址 http://blog.csd原创 2016-01-05 10:44:28 · 17681 阅读 · 0 评论 -
STM32堆栈和大小端问题
栈增长和大端/小端问题是和CPU相关的两个问题.1,首先来看:栈(STACK)的问题.函数的局部变量,都是存放在"栈"里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以战舰stm32开发板为例,在startup_stm32f10x_hd.s里面,开头就有:Stack_Size EQU 0x00000800表示转载 2015-12-24 16:19:40 · 930 阅读 · 0 评论 -
STM32F40X启动过程
做毕设接触到STM32F407,看了两天数据手册,感觉跟F10X系列并没有多少区别,无非是多了个DCMI外设、时钟频率提高到168M、FLASH增大了、SRAM增大了。然而,非也!CM4内核引进的FPU单元和DSP库极大了促进了算法工程师们的开发能力!关于DSP库有时间再聊,今天先聊一下F4的启动文件。 我们先来看一下,启动文件前面的介绍 (固件库版本:V1.0.2) ****原创 2016-02-29 23:04:27 · 2363 阅读 · 0 评论 -
FATFS函数库详解
[编辑]实验要求在SD驱动移植实验的基础上,加上FatFs文件系统,实现SD卡中文件的读写及其它操作[编辑]实验 目的了解FatFs文件系统的原理掌握FatFs文件系统的移植方法实现SD卡中文件的读写及其它操作[编辑]FatFsFatFS是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)文件系统模块。FatFs 的编转载 2015-12-10 11:43:54 · 4661 阅读 · 0 评论 -
嵌入式C编程经典面试题
上个星期,去深圳一家搞ARM开发的公司面试,HR叫我做了一份卷子,里面都是C编程,心中暗喜,因为这些题基本上都在程序员面试宝典里见过。后来回到学校,在网上搜索,原来这些题都是嵌入式工程师的经典面试题目,很多网站上都可以找得到。现把他贴出来,附上网上的答案,跟大家分享,因为这些题实在太经典了。预处理器(Preprocessor)1 . 用预处理指令#define 声明一个常数,用以表转载 2015-11-30 11:40:10 · 983 阅读 · 0 评论 -
keilMDK生成代码的内存分配
一、 解惑Code, RO-data,RW-data,ZI-dataCode为程序代码部分RO-data 表示 程序定义的常量const temp;RW-data 表示 已初始化的全局变量ZI-data 表示 未初始化的全局变量Program Size: Code="18248" RO-data=320 RW-data=260 ZI-data=3952C转载 2015-11-16 11:40:17 · 3201 阅读 · 0 评论 -
STM32的USB外设初窥
这几天在考虑项目是用USB还是用以太网,但是我们用的平台STM32F103ZET6好像没有Enternet这个外设,所以就先考虑USB吧。USB外设的一大特点就是即插即用,之所以能够这样是因为USB协议规定在主机启动或是USB外设插入系统的时候都要对外设进行配置。这里所说的配置,就是按照USB协议在USB主机和USB设备之间进行一系列的问答过程。这一问答过程是通过主机与USB设备的端点0进原创 2015-10-12 11:04:43 · 2687 阅读 · 0 评论 -
Arduino的Serial.print(F(""))问题
好久之前在编写项目产品的Arduino库代码时发现内存(SRAM)占用偏高,想了想我也没在类内定义多少成员变量啊,也没啥大的数组啥的,后来关闭DEBUG_PRINT功能后,内存占用一下子下来了,才一拍脑袋是调试打印的字符串占用了大量的SRAM,于是就探究了一下Arduino可执行文件的内存分布问题。 和普通程序一样,Arduino的代码编译完成后也是分为code段、data段、bss...原创 2018-04-21 15:39:09 · 10379 阅读 · 2 评论