位域概述
位域是为了将所需的存储量减少到最小而设计的,有些数据在存储时并不需要占用一个完整的字节,只需占用一个或多个 bit 位。基于这种考虑,将相同的存储位置划分为“位字段”,而不是每个位字段指定专用的位置。
摘自维基百科:
位段(或称“位域”,Bit field)为一种数据结构,可以把数据以位的形式紧凑的储存,并允许程序员对此结构的位进行操作。这种数据结构的好处:
可以使数据单元节省储存空间,当程序需要成千上万个数据单元时,这种方法就显得尤为重要。
位段可以很方便的访问一个整数值的部分内容从而可以简化程序源代码。
位域的运用
先来看个 Demo:
123456typedef struct demo{ unsigned char a:4; unsigned char b:3; unsigned char c:1;} demo_t;
在结构体中声明位域要使用 : 运算符,后边的数字用于限定结构体成员变量所占用的位数。
上边的例子将创建三个宽度为 4、3 和 1 位的无符号字符。位字段的作用基本上是屏蔽按位操作以访问其字段的值。它们实际上是具 ...
2022-04-12:更新 蓝牙开发之 IOS AMS,有兴趣的可以点击链接进入~
2022-04-08:更新接收推送效果
上图演示了,接收微信通知和 QQ 通知的展示,短信来电等我就不一一展示了。
什么是 ANCS
ANCS 介绍(Introduction)
ANCS 全称 Apple Notification Center Service(苹果通知中心服务),是提供给 BLE 设备的一种获取 IOS 设备通知的方法。ANCS围绕三个原则进行设计:简单,高效和可扩展性。
以下引用自 ANCS 规范
The purpose of the Apple Notification Center Service (ANCS) is to give Bluetooth accessories (that connect to iOS devices through a Bluetooth low-energy link) a simple and convenient way to access many kinds of notifications that are generated ...
什么是看门狗
看门狗是一种防止故障和崩溃的机制,其本质是一种电子计时器,开始计时器后,必须要定期重置计时以防止超时,当程序跑飞或者发生故障时,因为不能定期重置计时导致计时器超时,这时看门狗会重新启动芯片。
看门狗可以用软件或者硬件来实现。两者都是通过定时器实现,定时时间内没有喂狗,就会复位芯片。软件看门狗优点在于可以通过程序改变时间,并且可以随时禁用看门狗。缺点是如果在初始化看门狗前程序就已经跑飞或者禁用看门狗后程序跑飞,这样看门狗就没有起到系统恢复的作用。硬件看门狗则是一种更强大的解决方案,一旦开启,看门狗计数器就需要由程序定期发送信号重置计时,任何系统崩溃(无论是硬件还是软件)都会导致看门狗计数器超时,这时硬件看门狗会通过向 CPU 发送复位信号来将崩溃或故障的 CPU 重启。
在裸机系统(没有操作系统)上使用看门狗相对简单,初始化启动看门狗后,实现一个功能即可重置看门狗计数器。在任何系统崩溃的故障中,计数器都不会被重置,所以看门狗也会重置系统。
上面说了裸机系统,那么在多任务的系统中使用看门狗的有效方法是什么呢?
多任务系统中的看门狗实现必须能够保证操作系统和每个应用任务的正确执 ...
python
未读
一个好的程序员应该是那种过单行线都要往两边看的人。
前言
Hello,距上次更新居然过了一个多星期。😂可不能怪我懒,我家里工作的笔记本要拿去给家人用,所以最近一直在找替换机,最后在狗东买了联想的拯救者 R7000,工作原因还是笔记本方便,不然组装台台式机也是个不错的选择,下单后隔天傍晚就收到了速度好评👍,验完机后要把我过时的旧笔记本的资料迁移到新机上,平时上班也没空临近过年反而更忙了😩,只有晚上回去才有空折腾。又要装软件,搭建一些开发环境,所以一直没有时间更新。
再坚挺到 6 号我就放假了!~~多半更加没时间更新了。~~公司放假 14 天,😏不知道各位是不是早早就放假舒舒服服过年去了。
回到正题,因为换了电脑,所以需要重新安装一些开发环境,刚好整理一下一些开发环境的安装流程!
下载 python
首先,进入 python 官网,
找到 Downloads 选择要安装的平台,我的系统是 win10 的,所以选择 Windows 平台,点击进入下载页,这里我选择稳定版 python 3.8.7,然后根据自己操作系统的位数选择 32 位或 64 位来下载,这里我是 64 位的 ...
python
未读
Beautiful is better than ugly.
前言
继续上一篇使用 python 制作串口工具(一),完成要实现的串口工具代码逻辑!
实现
最终效果:
获取接入的 com 口
首先,我们先实现获取电脑当前所接入的串口,实现效果为:每次点击 Combo Box,就把当前电脑接入的串口号信息读取出来。所以我们需要对 Combo Box 这个控件进行重写,这里新建个 my_combobox.py,代码如下:
my_combobox.py
123456789101112131415161718192021222324252627282930313233import serialimport serial.tools.list_portsfrom PyQt5.QtWidgets import QComboBoxclass My_ComBoBox(QComboBox): def __init__(self, parent = None): super(My_ComBoBox,self).__init__(parent) # 重写showPopup函 ...
python
未读
Life is short, you need Python. —— Bruce Eckel
前言
工作中偶尔会用到 python 来制作一些小工具,所以针对这些小工具,做了些简化,移除了一些比较复杂的功能,拿来分享。
UI 界面
在实现具体逻辑之前,我们要先设计好串口工具的 UI 界面,这里我直接使用的 Qt Designer 来设计串口界面的布局。
最终效果布置好布局后是这样的:
实际预览效果:
实现
打开 Qt Designer,点击新建 Main Window 窗体,
进入项目界面后,我们需要往里面拖入我们需要的控件,先添加两个 QGroupBox 控件并且设置文本为串口接收设置和串口发送设置, 一个作为我们的接收区,一个作为我们的发送区。
上面操作完成后,我们先来布置我们的接收区,先添加 Label 控件,分别设置文本为串口选择、波特率、停止位、数据位、校验位的五个 Label 控件。
然后,我们要增加组合框,方便后面选择串口的参数,同样从左边拖出五个 Combo Box 控件,然后双击控件,这里我只拿波特率的组合框来描述,其他的例如停止位数据位还有校验位的操 ...
不要站着调试程序,那会使得你的耐心减半,你需要的是全神贯注。—— Dave Storer
前言
记录工作中学习到的知识,在这里做些笔记,方便自己后面经常温习。
正文
为什么要获取结构体成员变量的偏移
我在做嵌入式工作时,在已知要获取信息的 flash 地址时,需要取出相对应的信息元素,这个时候时常需要知道结构体相对于已知地址的偏移,方便快捷的从 flash 中取出信息元素,所以时常使用这个方式。
方法
我们先用普通的方法获取结构体偏移,代码如下:
1234567891011121314151617181920212223242526#include <stdio.h>typedef struct { int a; int b; int c;}x_t;void test(void){ x_t p; printf("p_addr=%d\r\n", (int)&p); printf("p.a_addr=%d\r\n", (int)&p.a); p ...
代码写的越急,程序跑得越慢。—— Roy Carlson
前言
Nor Flash 和 Nand Flash 在各种嵌入式系统中都扮演着不可或缺的角色,所以在这里整理下。
历史
以下摘自维基百科
闪存(无论是 NOR 型或 NAND 型)是舛冈富士雄博士 1980 年申请了一个叫做 simultaneously erasable EEPROM 的专利。然而,东芝公司的论资排辈却让这项划时代的发明石沉大海,直到4年之后。“我终于被提拔了,可以不用批准就去工厂,让工人们帮忙做出样品了”,富士雄说。 据东芝表示闪存之所以命名为 “Flash” 是由舛冈博士的同事有泉正二建议,因为这种存储器的抹除流程让他想起了相机的闪光灯。舛冈博士在 1984 年的加州旧金山 IEEE 国际电子组件会议 (International Electron Devices Meeting, IEDM) 上发表了这项发明。Intel 看到了这项发明的巨大潜力,并于 1988 年推出第一款商业性的 NOR Flash 芯片。
NOR Flash 需要很长的时间进行抹写,但是它提供完整的寻址与资料总线,并允许随机 ...
前言
针对 PADS9.5 软件的安装和破解。
下载
安装软件之前,先把相应的安装包和补丁下载了。
PADS9.5 安装包和补丁 密码: uc55
安装
打开下载好的安装包路径,将 “PADS_9-5.part1.rar” 和 “PADS Logic PADS9.5Win10补丁.zip” 解压到当前目录。
注:
PADS_9-5.part1.rar 和 PADS_9-5.part2.rar 是分卷压缩包,我们只要解压 part1 就可以了。
解压完毕后,进入PADS_9-5文件夹,找到 ‘PADS9.5_mib’,右键属性,在兼容性中勾选以管理员身份运行此程序.
设置好后,双击运行 ‘PADS9.5_mib’,进行安装,点击 ‘next’,然后点击 ‘skip’,再点击 ‘Agree’
接下来,我们先配置下需要安装的东西,点击 ‘Modify’,然后选择 ‘Product Selection’,全部勾选,除了最后的 ‘Server Services’ 不勾选,
然后,我们选择 ‘Target Path’,选择要安装的目录,这里我按默认的安装在 C 盘,最后的一个选 ...
别在注释里陷得太深——注释很可能会误导你,你要调试的只是代码。
前言
记录工作中学习到的知识,在这里做些笔记,方便自己后面温习。
bin、hex、axf
bin、hex、axf 之间的关系
bin
hex
axf
数据
数据
数据
地址
地址
调试信息
所以同一工程中 bin、hex、axf 的文件大小为 .bin < .hex < .axf
假设 bin 文件是一个三无产品,那么hex就是一个带有信息的产品,而 axf 文件则是带有信息并且附了一张使用说明的产品。(我也不知道这样举例合不合理,意思到位就行)
因为 bin 文件没有地址信息,而 hex 文件带了地址信息,所以实际上我们使用烧录软件 (J-Flash.exe) 是这样的:
导入 .bin 时,因为没有地址信息,所以我们需要为它指定烧写的起始地址
导入 .hex 时,因为包含了地址信息,所以我们不需要指定起始地址,烧录工具会自动读取要烧录的地址
bin 文件
上面已经说了 bin 文件起始不包含地址信息,所以 bin 文件只是单纯的二进制文件,是没有格式的 ...