免费的简历制作神器
https://codecv.top/
各种插件连接器图示介绍网站
https://connectorbook.com/
收集字体
前言这里主要收集一些免费字体网站
免费字体识别、字体转换、字体下载
https://fontmeme.com/zh/
ASCII码字体生成器
http://www.figlet.org/
google font
https://fonts.google.com/
DCDC的Layout终极奥义
前言很多DCDC芯片的手册都有对应的PCB Layout设计要求,有些还会提供一些Layout示意图,都是大同小异的。
比如我随便列几点buck的设计要点:
输入电容器和二极管在与IC相同的面,尽可能在IC最近处。
电感靠近芯片的SW,输出电容靠近电感放置。
反馈回路远离电感,SW和二极管等噪声源。
那你知道这些要点都是怎么来的吗?
如果拿到一个具体的芯片,因为芯片管脚分布的问题, 可能这些条件不能同时满足,那什么办?到底孰轻孰重?
举个Buck的例子
比如下面这个buck,它的管脚分布就不好。
SW在IN和GND之间,如果按照要点,直接将输入滤波电容放到IN和GND旁边,那么SW的信号就出不来,而电感也要求放在芯片旁边,这就矛盾了。
那我们看看这个芯片手册推荐的Layout
芯片手册推荐的layout倒是都就近放置了,但是它的方法是SW在输入滤波电容底下走线, 这是逗我吗?这在现实中能做到?
我们不能采用芯片手册推荐的这种方式,但事实是这种管脚分布的芯片多得是, 那我们的Layout如何布局布线呢?
这个问题先不回答,我给大家说一个最根本的方法:
DCDC的Layout终极奥 ...
一些通用的 Makefile 文件模板
前言对于Windows下开发,很多IDE都集成了编译器,如Visual Studio,提供了“一键编译”,编码完成后只需一个操作即可完成编译、链接、生成目标文件。
Linux开发与Windows不同,Linux下一般用的的gcc/g++编译器,如果是开发ARM下的Linux程序,还需用到arm-linux-gcc/arm-linux-g++交叉编译器。
Linux下也可以实现“一键编译”功能,此时需要一个编译脚本“Makefile”,Makefile可以手动编写,也可以借助自动化构建工具(如scons、CMake)生成。手动编写Makefile是Linux和Windows程序员的区别之一,一般地一个通用的Makefile能够适合大部分Linux项目程序。
这里提供了三个 Makefile 模板
编译可执行文件Makefile12345678910111213141516171819202122232425VERSION =1.00CC =gccDEBUG =-DUSE_DEBUGCFLAGS =-WallSOURCES =$(wildcard ./s ...
AT command 解析与处理
AT command 解析小组件AT command 在处理MCU端非常难处理,笔者接触到很好的框架如下:
rt thread 代码下的小组件功能, 解析AT指令思路很巧
在源码目录下: rt-thread/components/net/at/src
https://github.com/RT-Thread/rt-thread
AT Command 代码库,将 AT 命令解析做了成了一个库的形式,可以借鉴参考
https://gitee.com/tutubinary/AT-Command
如何简介而有有效的描述一个缺陷 Bug
前言在日常工作中,软件和硬件工程师(Bug修复者)经常会碰到各种Bug,但很多时候我们的精力都浪费在了和测试人员(Bug提交者)反复沟通上,因为我们搞不懂测试人员想要表达啥?
当你的软件或硬件出现不符合预期的问题时,我们希望它能够尽快修复,而不希望时间浪费在无效沟通上。
作为软件或硬件开发者,我们以工作为荣,但就像开发的任何方面一样,沟通至关重要。描述出了什么问题可能有些困难,但如果你能在一开始提供一个详尽的问题描述,这会加快问题的解决。
行业内对于如何描述Bug有各种思考,本文的三句话法是其中一种。下面的Bug模板用三句话来描述一个Bug:
复现 Bug 的步骤
步骤1
步骤2
…
2.期望的结果
3.实际的结果
复现步骤说明你是如何遇到错误或问题的,即使对你来说似乎很明显(对别人不明显)。
为什么提供重现错误的步骤很重要?
重现错误通常比实际进行修复的代码更耗时;大约80%的工作是找出最初出了什么问题!清晰地重现步骤,意味着我们可以大大缩短这段时间。
对发生了什么问题有一个清晰的描述,也给我的测试人员后续验证Bug是否修复提供了步骤,利人利己!
如何提供 ...
数字签名,加密方案
什么是数字签名和数字证书正文如果你能非常清晰的回答出以下问题,可以不用看这篇文章了:
非对称加密中公私钥都可以加密,那么什么时候用公钥加密,什么时候用私钥“加密” ?
什么是数字签名,数字签名的作用是什么?
为什么要对数据的摘要进行签名,而不是直接计算原始数据的数字签名?
什么是数字证书,数字证书解决了什么问题?
这篇文章,主要围绕 数字签名 和 数字证书 的原理以及它们的作用展开。
争取做到让不具备任何密码学基础知识的同学都能听懂,所以在这里需要先对齐一些加密相关的概念 。
什么是加密加密就是 对明文数据按某种特殊算法进行处理,使其成为不可读的一段代码,通常称为“密文“ , 密文通过”密钥“解密后还原出原来的明文,通过这样的途径可以达到保护数据不被非法人窃取、阅读的目的。
定义简单吧?那来看个题,考虑以下哪些属于加密方法:
AES
RSA
MD5
BASE64
SM4
这几种都是日常开发中常用的数据编码技术,但是只有 AES、RSA、SM4 才能算是加密方法。
为什么呢? 一个区分的简单方法就是看编码后的数据是否还能还原,能还原的是加密。
MD5 实际上是对数据进行有损压缩, ...
f1c100s linux 启动编译
F1C100S linux 启动编译流程 (tf / spi flash)前言最近项目上再次使用FC100s跑linux,顺带详细记录一下编译整个linux的步骤,以作记录备份。
由于TF卡和SPI FLASH启动在某些方面不一样,在有区别的时候会进行特殊说明
整体思路:
安装工具链
编译 uboot
编译 kernel
编译 buildroot
制作镜像
安装工具链工具链下载地址
http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/
工具链
gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar
安装工具链
解压 tar 文件 : tar -xvf xxxxx.tar
修改环境变量,指定交叉工具链的位置: vim /etc/profile
使环境变量生效: source /etc/profile
测试交叉编译工具: arm-linux-gnue ...
固件加密
固件加密流程前言通常所说的MCU加密是指将用户的程序固件保护起来,防止别人通过外部调试接口或者其他方法读取烧写在Flash中的程序。保护自家方案不轻易被别家抄袭,从硬件上保护自己的知识产权。MCU加密还指防止自家程序被恶意读取破解。
整体思路:
使用公钥加密算法,生成公私钥数据 (例如: ECDSA256), 私钥保存好,对每一台出厂设备都使用相同的私钥进行加密
加密: 读UID -> sha256计算摘要 -> 私钥加密摘要生成签名
数据保存: 将签名和公钥保存到设备
解密: 读UID -> sha256计算摘要1, 公钥解密签名还原摘要2, 比较摘要1是否等于摘要2?
保密流程:
公钥私钥是对称加密算法, 私钥加密的数据只能使用公钥解密
sha256是不可逆算法,可以隐藏被加密的数据
设备上只有公钥和签名数据,很安全,不会被反向破解