自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (8)
  • 收藏
  • 关注

原创 出神入化的枚举结构体函数声明

瞻仰完大神改STM32中断向量表的代码,今天我们来看看“大神”写的枚举、结构、函数声明,还是一样的配方,一样的烧脑。少废话,先放代码。第一段是枚举,第二段是函数,第三段是对一个数组的初始化。//==============================================================================#define UTIL_EVENT_Define(T,X) #define UTIL_STATE_Define(T,X) UTIL_S

2020-05-26 16:00:18 375

原创 使用python操纵jlink

最近在做一个项目,功能都是分开几个人做的,每个人调试自己那部分功能的时候,都用串口打印log信息出来,每个人都调好之后,代码一合并,空间不够了,经过各种删减优化,终于是下进去了。但是这个时候,没有空间可以写log了,出了问题,也不知道是怎么回事,因为这个项目是要大批量一两百个设备运行起来才能看到效果的,我不可能每个设备都连着jlink在线调试啊。关键是空间不足,引脚也没有空出来的。机缘巧合之下...

2019-06-12 10:32:56 7945 2

原创 编译结果中代码与数据的存储的理解

最近在优化一个项目,想要尽可能地压缩代码,腾出空间写新的业务逻辑。看多了.map文件,有了一些新的理解。我用的编译器是IAR,可能编译出来的.map文件跟keil不一样,但是原理应该是一致的。先说一些基本的概念。程序编译后,主要分成三大部分。text,data,bss。text就是编译后的代码data就是变量,全局变量,局部的静态变量,而且还是有初始值的,亦即是是初始值不是0。至于...

2019-06-12 09:53:37 495

原创 改写STM32中断向量表的内容的大神代码

最近又接手另外一个项目,用的是STM32。听说这份代码是大神写的。我粗略看了一下,云里雾里,好多好多的神技。有太多的代码写得令我惊怒交加,惊的是居然还能这么写代码,怒的是这写的实在太艰深难懂看得我想骂人。看完实在有太多想说的,今天先放一点出来分享一下,瞻仰一下大神的骚操作。咱们就从一个中断服务函数开始,顺藤摸瓜来看看代码里怎么安排中断向量的。ISR(USART2_IRQn){ ui...

2018-12-17 15:40:48 3560 4

原创 一种串口软件架构的设想与实现

    串口(UART)是做嵌入式软件开发最常用到的外设。一般情况下,通过串口收发的数据,都是带有协议的。如何高效地组织数据,接收并解析数据,就成为软件开发首要考虑的事情。不同的协议,组包和解包的过程不同,但是如何安排串口数据收发,是能够影响到组包和解包程序的编写的。我这里想重点考虑怎么安排串口收数据的问题。   最直接的做法,简单粗暴,在RAM中开辟一个数组。一般串口都会设置中断接收,然后在...

2018-12-06 18:01:27 600

原创 EFM32之RTC

注:笔者用的MCU型号是EFM32TG210F32RTC模块的时钟来自LFACLK,即低速时钟树中的A分支。频率由LFACLK和分频值决定。值得注意的是,如果要使用低速设备,一定要记得开启LE看寄存器中的描述,似乎意味着,只要想用低功耗设备,一定要打开这个接口。假定LFACK的频率是32.768kHz,那么不同分频系数下,RTC一个计数值的时间如下你也许会想...

2018-12-03 10:59:02 909

原创 Flash存取数据的另一种思路

在嵌入式项目中,为了让设备在断电后某些关键参数不丢失,比如设备ID,网络配置,外设配置等。我们会将这些关键的参数存储到片内的Flash中。一般的做法都是在Flash划分一块空间做存储参数用,并且里面有一个空间存储一个标志,这个标志指示了Flash中是否存储了有效的参数。在第一次烧录程序时,Flash空间内没有存过参数,上电后这个标志读出来就是0XFF,此时程序就会将默认参数写入到Flash中,并且...

2018-11-30 14:40:14 904

原创 关于贝叶斯推理的理解

读《统计学关我什么事》有感本质:当你面对的问题需要你推理,从备选的几个结果中选一个的时候。你需要根据已有的信息判断这几个备选的结果各自的概率是多少,并选择概率最大的那一个。那贝叶斯推理是怎么推的呢。首先当没有辅助信息的时候,咱们对这几个备选的结果只有一个经验的概率值。然后加入一条辅助判断的信息时,对应每个备选结果都会有个概率值,即符合辅助判断信息的概率值。我们根据这个概率值,就能更...

2018-11-30 11:50:51 457 1

原创 TICK延时的有效方法

以往,如果要在程序里非堵塞式地延时一段时间,比如说我发了一包数据,然后要等待一段时间,如果时间到了还没收到回复,则认为超时,如果在等待时间内没有收到数据,我也不能停下来空等,而应该去做别的事。一般情况下,我们会设置一个定时器,让他周期中断,然后定一个全局变量,这个全局变量在这个定时器的中断里累加,程序中凡是需要延时的地方,可以通过读取这个全局变量,来知道时间流逝,这个全局变量一般取名叫tick。在...

2018-11-30 11:47:33 1111

原创 contiki之uip-ds6-route头文件

可能有点跳跃吧,但是不管了,能理解就写出来。这次看的源代码是关于路由表的一些数据结构还有操作函数,可以预见RPL协议将用到这个路由表。还是从头文件开始。详细的分析可以看这篇uip_ds6_route.h代码详解,这里主要讲主要的几个数据结构#define UIP_DS6_NOTIFICATION_DEFRT_ADD 0#define UIP_DS6_NOTIFICATION_DEFR

2017-08-31 16:43:13 870

原创 contiki之nbr_table.c

memb还是挺简单,可以看这篇博客:   内存分配之memb懂了list和memb终于可以开始研究nbr_table了,虽然已经有人写过分析nbr_table的博客,可是看了之后仍然比较懵。这里先贴几张图,说明一下nbr_table的一些数据结构联系,理解了之后再去看代码会比较容易理解。先来看一下nbr_table_t 结构体,这是这个模块的核心结构体。一个邻居列表就是一个结构体,既然是列

2017-08-25 17:17:04 408

原创 contiki之list(2)

有了list(1)的分析,list.c文件接下来的函数都好说了/*********************************list.c*******************************/值得注意的是,list.c里传入函数的参数里,都是list_t类型,也就是说是指向链表头指针的指针。void list_init(list_t list){*list = N

2017-08-24 17:20:46 340

原创 contiki之list(1)

/**************************************************list.c************************************/#define NULL 0struct list {struct list *next;};一上来就搞事情,定义一个结构类型叫struct list 里面只有一个成员,还是这个结构体类型的指

2017-08-24 16:23:11 672

原创 contiki之list头文件

contiki里有很多基础的数据结构和对应的操作函数,比如说内存管理memb,列表list 队列queuebuff等等。如果不把这些最基础的东西啃下的话,你去看上层的协议比如说ipv6 ,rpl等,那是寸步难行,根本不知道在干嘛。接下来打算把这些数据结构挨个过一遍。接下来翻list的源码吧。/***************************list.h******************

2017-08-24 14:32:24 411

原创 nbr_table源码之头文件

学完contiki的内核之后,想重点学一学路由协议RPL。奈何资料实在太少,网上大部分都讲只是讲个大概而已,很多具体细节都没有,我也是很苦恼。基本上都是靠《基于IP的物联网架构、技术与应用》还有这位博主http://cgbluesky.blog.163.com/里翻译的关于RPL的标准手册RFC6550。艰难学了个基本,接下来更多细节想从RPL的源码里一探究竟,没想到一打开完全懵逼,太复杂了,咱还

2017-08-24 09:22:53 551

原创 LWIP数据包管理学习

------------------pbuf.h-------------------struct pbuf{    struct pbuf* next;        //构成pbuf链表时指向下一个pbuf结构    void* payload;            //数据指针,指向该pbuf所记录的数据区域。    u16_t tot_len;    

2016-11-30 16:39:36 777

原创 一种通信接收缓冲区的操作想法

//////概述在通信中,比如UART。接收到的数据经常是一帧一帧而不是一个字节一个字节,上层应用在需要读取通信数据的时候通常希望读取到的就是一个完整的帧,这样比较方便解析。如果底层对上层提供的接口是Read(port,buff,len,timeout)这种形式的话,上层为了避免收到的buff不是完整的一帧,len经常定得比较大,这样子的话就可能出现一种情况。假设底层接收到两帧,都放到缓冲

2016-11-09 15:15:33 963

原创 Ubuntu虚拟机与Windows主机之间互传文件

首先ubuntu要安装配置SSH        Ubuntu 下安装 OpenSSH Server 是无比轻松的一件事情,需要的命令只有一条:  sudo apt-get install openssh-server        (查看返回的结果,如果没有出错,则用putty、SecureCRT、SSH Secure Shell Client等SSH 客户端软件,输入您服

2016-11-09 14:44:16 12457

原创 飞思卡尔单片机KEA128之ADC学习

这个ADC模块的操作模式其实也比较简单。首先就是配置,罗列一下该配置什么吧ADICLK     ADC模块的输入时钟选择。是总线时钟,总线时钟2分频还是外部的ADIV        对上面的时钟再分频后就可以给ADC的核心模块使用了。MODE        选择8/10/12位转换ADLSMP  短还是长时间采样。不设置的话默认是短ADLPC    高速还是低功耗,低功

2016-11-09 13:59:49 14350

印度电表标准文件

相当难找的标准,印度电表的标准文件IS-13779,精度等级1和2。。。。。。。。。。。。。。。。。。。。。。。。。。。。

2017-09-13

J1939协议源代码

这个J1939的协议是在PIC单片机上实现的,有需要的朋友尽管拿去参考吧

2016-09-13

J1939协议栈源代码

这个J1939的协议是在PIC单片机上实现的,有需要的朋友尽管拿去参考吧

2016-09-13

Altium Designer Summer 09 从入门到精通

关于AD09的非常好一本书

2016-09-12

爱上树莓派

彩色版

2016-08-22

空空如也

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

TA关注的人

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