嵌入式系统
文章平均质量分 64
嵌入式系统
Quan略略略
君子爱色取之有道
展开
-
【嵌入式】LIBSCLI - Simple Command Line Interface
【代码】【嵌入式】LIBSCLI - Simple Command Line Interface。原创 2023-03-04 11:01:47 · 557 阅读 · 1 评论 -
【嵌入式】wear-leveling design for flash-based NVRAM
【代码】【嵌入式】wear-leveling design for flash-based NVRAM。原创 2023-02-19 11:44:40 · 566 阅读 · 0 评论 -
【JustPlay】Brushless ESC calibration
【代码】【JustPlay】Brushless ESC calibration。原创 2023-02-11 14:20:43 · 417 阅读 · 0 评论 -
【嵌入式】MDK使用sct文件将代码段放入RAM中执行
当CPU主频为72Mhz的时候,为了弥补CPU和Flash之间的速度差异,需要在访问Flash的时候插入等待周期,否则Flash访问会有问题。为了提高代码运行速度,可以将代码装入RAM中,MCU的RAM速度和CPU速度没有差异(不像MPU,中间需要使用cache弥补CPU和RAM之间的速度差异),因此从RAM中执行代码可以提高运行速度。同时在进行Flash编程擦写的时候,Flash是无法读写的,这时候如果遇到中断的话,是无法进入中断处理函数的,但是如果代码放在RAM中,就没有影响了。原创 2023-02-03 18:44:27 · 3173 阅读 · 0 评论 -
【嵌入式】STM32F103 SPI主从收发实验
【代码】【嵌入式】STM32F103 SPI主从收发实验。原创 2022-12-23 14:39:55 · 1163 阅读 · 0 评论 -
【嵌入式】使用Linux自带的i2c-dev操作EEPROM(Userspace Driver)
Linux系统自带了I2C总线的子系统,没有了解这个I2C的子系统是如何工作的不过既然系统提供了这个功能就可以使用文件操作的方式直接使用I2C总线了。说到I2C总线第一个想到的还是EEPROM存储芯片,例如AT24C02这个芯片有256字节的存储空间,使用范围较广。AT24C02芯片采用I2C总线与主机通信,具体细节参见数据手册。Linux的I2C设备为/dev/i2c-0和/dev/i2c-原创 2016-11-15 14:12:12 · 6024 阅读 · 3 评论 -
【嵌入式】Cortex M4F DSP库
使用CM4内核自带的FPU需要在编译的时候添加编译选项:--cpu Cortex-M4.fp,以使能FPU指令集,否则使用的是普通Thumb2指令实现的DSP函数。同时还需添加宏定义:ARM_MATH_CM4,这在CMSIS DSP Library的arm_math.h里面用到。CMSIS DSP Library可以在ARM的官网找到:https://developer.arm.com/tools-and-software/embedded/cmsishttps://developer.arm.com/to原创 2022-06-19 11:24:12 · 1505 阅读 · 0 评论 -
【嵌入式】如何使用JLINK RTT打印log日志
没有串口的情况下可以使用JLINK的RTT即 Real Time Transfer功能。RTT的工作原理大致就是在内存里面创建一个RTT控制块RTT Control Block,即SEGGER_RTT_CB结构体。这个结构体里面存放了若干个上行通道和下行通道,每个通道都有一个数据buffer以及读写指针,构成了数据队列。向RTT控制块里面的任意一个上传通道写入log信息,然后JLINK能够通过读取RAM内容,获取到数据buffer和读写指针的内容。在JLINK的安装目录里面有RTT的代码:可以直原创 2022-05-28 11:12:24 · 3748 阅读 · 5 评论 -
【嵌入式】基于平头哥内核的W801 WIFI SoC的OTA方案设计
W801是平头哥内核的WIFI芯片。给到的SDK里面没有找到中断向量表重定向的函数,类似于STM32的NVIC_SetVectorTable,所以中断向量表只能给主程序用,那么BootLoader就没法弄了。干脆不用BootLoader了,直接划一个分区用来存放updater用于更新固件。分区表设计如下图:国产芯片就是资料不全,规格书里面写了Flash的寻址空间为0x0800 0000 ~ 0x0FFF FFFF,但是在SDK里面,链接脚本是从0x080d0400开始的,如果把起始地址改成0x0原创 2022-05-10 16:51:37 · 2999 阅读 · 0 评论 -
【嵌入式】计算机加密SSL/TLS协议基础
参考文章:https://www.internetsociety.org/deploy360/tls/basics/?gclid=Cj0KCQjwpcOTBhCZARIsAEAYLuXVTtaCVNbegx5XuY-WxZ7BwerSisLhr3GEhNiP-3VkXxGzPY5f6UMaAtAmEALw_wcBhttps://www.internetsociety.org/deploy360/tls/basics/?gclid=Cj0KCQjwpcOTBhCZARIsAEAYLuXVTtaCVNbegx5原创 2022-05-03 18:56:47 · 1266 阅读 · 0 评论 -
【嵌入式】IoT Security: Anti-Rollback
参考:https://www.silabs.com/security/anti-rollbackAdversaries may have knowledge of a security flaw found in an older firmware version and attempt to take advantage of it. The adversary attempts to load previously signed to re-open a closed security flaw.原创 2022-04-25 14:41:12 · 1700 阅读 · 0 评论 -
【计算机】32位和64位系统代码兼容
代码为了兼容32位MCU和64位PC机(例如PC上运行UI模拟器,PC上的UI代码需要可以在MCU上无修改直接编译运行),需要注意在64位的PC上,指针的长度是8个字节,计算机的字长可以使用:sizeof(long)或者sizeof(void *)来计算。如果需要分配一个指针的内存空间,不能直接分配4字节,而是分配字长的字节数。另外,进行指针的强制类型转换获取指针的值的时候,需要注意不要用 uint32_t 这样的32位类型进行强制装换指针,可能会丢失数据。 realloc(sizeof(test)原创 2021-12-02 11:23:16 · 961 阅读 · 0 评论 -
【嵌入式】使用链接脚本从零创建STM32代码工程
链接脚本文件,用于控制链接过程。以stm32在Linux环境下编译作为示例,项目链接git库地址:tangquan/test.ld_file.proghttps://gitee.com/tq797/test.ld_file.prog各种原因,参考教程的地址在文件startup_stm32f401xc.c里面。...原创 2021-10-24 14:55:56 · 2710 阅读 · 0 评论 -
【ARM】STM32内置DFU的使用
所有STM32系列芯片都自带ISP功能,进入ISP的方式就是BOOT0置1,然后上电或复位,这时候芯片从系统存储区启动,进入ISP功能,可以使用串口0进行软件烧写。STM32F2/3/4系列芯片不仅有传统的UART ISP功能,还有USB ISP功能(拥有USB功能的芯片),工作方式就是使用自带的USB外设,配置成一个USB HID设备,通过HID协议下载软件,速度和串口相比......。从系统存储区启动即可进入USB ISP,然后通过USB接上Windows,无需安装驱动,设备管理器里面出现一个HID原创 2021-08-19 22:41:38 · 12263 阅读 · 5 评论 -
【ARM】STM32在RAM中运行代码测试
#include <stm32f10x_conf.h>#include "sys.h"#include "delay.h"#include "usart.h"#include "string.h"__align(8) uint8_t value[1024] __attribute__((at(0x20000100)));void UartSendByte(USART_TypeDef* uart,u8 data);void test(void (*p)(USART_TypeD.原创 2021-08-15 17:53:25 · 1254 阅读 · 0 评论 -
【ARM】Thumb2指令集中函数的地址不对齐?
简介ARM指令集、Thumb指令集和Thumb2指令集:ARM指令集:编代码全部是 32bits 的,每条指令能承载更多的信息,因此使用最少的指令完成功能, 所以在相同频率下运行速度也是最快的, 但也因为每条指令是32bits 的而占用了最多的程序空间。Thumb指令集:编代码全部是 16bits 的,每条指令所能承载的信息少,因此它需要使用更多的指令才能完成功能, 因此运行速度慢, 但它也占用了最少的程序空间Thumb-2指令集:在前面两者之间取了一个平衡, 兼有二者的优势, 当一个原创 2021-08-15 17:05:31 · 1544 阅读 · 0 评论 -
【嵌入式】修改ELF文件中的符号表
RTOS系统应用经常需要导入三方库,但是RTOS系统有别于Linux系统,无法使用动态链接库,所以很多库都是重复的,这会导致链接过程中出现: symbol xxx multiply defined by xxx的错误。如果某个库重复了,例如常用的cJSON库,可以单独把cJSON库单独打包成库,而不用集成到整体的库中去,这样整个系统只需要包含一次cJSON.lib即可,节省了空间也防止了冲突。但是使用的三方库多了之后,有时候又会出现各自的库有重复定义函数符号的问题,比如A.lib定义了test函数,B.原创 2021-07-16 12:34:10 · 834 阅读 · 0 评论 -
【电子】Baseband Signal and Passband Signal
Baseband的参考文章:https://techterms.com/definition/baseband引用原文:Baseband refers to the original frequency range of a transmission signal before it is converted, or modulated, to a different frequency range. For example, an audio signal may have a baseband r.原创 2020-05-09 17:03:54 · 2534 阅读 · 0 评论 -
【机械自动化】BLDC驱动器ESC
《【抢头条】迄今最全的无刷电机工作及控制原理分享-绝对...!》中已经很详细的解释了无刷电机的工作原理,但是文章中没有介绍BLDC的驱动器。以ESC(Electric Speed Controller)为例,这是四轴飞行器上的无刷电机使用的一种无刷电机驱动器,也叫“电子调速器”,俗名“电调”,我使用过的电调以及配套的无刷电机长这样:电调的三个蓝色线接到BLDC的三相,右边的红黑线...原创 2019-12-13 13:35:12 · 2092 阅读 · 0 评论 -
【物联网】NB-IoT和LoRa技术简介
一、前言物联网必定是一个社会发展趋势,但是地球资源有限,资源的可重复利用不重视起来,再过几十年,就没有资源可用了......物联网是比较新兴的方向,我之前了解的最出名的、使用最多的就是ZigBee网络,好几年没有关注物联网行业了,也不知道什么时候出来了很多新技术,最突出的就是NB-IoT和Lora了,二、NB-IoT简介引用百度百科的专业介绍 -- “窄带物联网(Narrow Band...原创 2019-05-14 13:18:26 · 22078 阅读 · 0 评论 -
【机械自动化】步进电机和“伺服电机”
1、步进电机引用百度知道解释步进电机和伺服电机的区别:https://zhidao.baidu.com/question/493118373016625172.html。很多文章都有解释,而且其实两者的区别很明显,但是由于在淘宝上搜索伺服电机的时候,有很多标着伺服电机系统的链接卖的其实是闭环步进电机系统,对我的判断造成了困扰,例如下面这个产品(没有说产品不好的意思,只是概念上有区别):...原创 2019-03-04 15:20:52 · 1791 阅读 · 0 评论 -
常用温度传感器的采集和换算方法
1、前言我觉得温度传感器应该是用量最大的传感器了,我也接触了好几种温度传感器,电阻型(50Ω,100Ω)、电流型(4~20mA)、RS485总线型、单总线型,各有各的特点。因为温度传感器使用很频繁,有必要总结一下几种最常用的温度传感器的采集方式和数据换算方法。2、DS18B20学习单片机的时候就很早就学过DS18B20温度传感器,测量范围为 -55 ℃ ~+ 125 ℃ ; 在 -...原创 2018-08-16 10:40:38 · 24368 阅读 · 0 评论 -
Ubunt16.04下编译Linux遇到的问题
编译环境为64位Ubunt16.04,arm-linux-gcc版本为4.3.3,再make menuconfig玩之后进行make zImage的时候出现下面的错误:Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.我也不知道什么原创 2016-11-21 15:08:14 · 824 阅读 · 0 评论 -
【嵌入式】旋转编码器原理
参考文章:https://en.wikipedia.org/wiki/Rotary_encoder旋转编码器有两种:增量式编码器和绝对值编码器。1、增量式编码器所谓增量式,就是指编码器输出的信号是相对上一次的位置的一个变化量(德尔塔值),因此当前位置是由上一次位置的值加上本次读取到的值。增量式正交光电编码器外观:以Broadcom公司的HEDS-973x Series光学编码器...原创 2019-07-02 18:26:08 · 7059 阅读 · 1 评论 -
【抢头条】迄今最全的无刷电机工作及控制原理分享-绝对...!
转载地址:https://bbs.dji.com/thread-74728-1-1.html 转载请注明作者:少帅-Z 内容持续更新,目前更新到三相多绕组多极内转子部分,后面会有2212电机拆解绕线图,绕线分析、动力结构分析、换相控制等干货。 内容真的不难,耐心看可以看懂,希望大家可以一起学习进步。 先前在大疆社区分享过关于无刷电机的工作原...转载 2019-07-03 11:25:06 · 8009 阅读 · 3 评论 -
SAE J1939协议学习笔记
引用百度百科:SAE J1939(以下简称J1939)是美国汽车工程协会(SAE)的推荐标准,用于为中重型道路车辆上电子部件间的通讯提供标准的体系结构。它由“卡车与大型客车电气与电子委员会”(Track & Bus Electrical & Electronics Committee)下属的“卡车与大型客车控制和通讯网络附属委员会”(Track & Bus Contro...原创 2018-07-21 16:54:43 · 28097 阅读 · 4 评论 -
CAN总线的仲裁机制简述
Controller Area Network简称CAN总线是一个在汽车电子上用得非常广泛的一种协议,CAN总线有众多优点…… 好,说了那么多CAN的特点之后激起了我对CAN总线工作原理的兴趣。CAN总线的总线仲裁机制是我觉得设计的非常精妙的,下面总结几个CAN总线的特征点,这几个特征点对理解CAN的总裁机制非常重要。1、CAN总线在物理层上只有两根线CANH和CANL,根据两根线的的电位差原创 2018-01-22 11:09:19 · 17816 阅读 · 10 评论 -
tqOS的PendSV抢占式任务调度
参考文献为:1、Cortex-M3权威指南2、http://www.cnblogs.com/sky1991/p/stepbystep_stm32_os_3.html3、http://www.openedv.com/posts/list/64274.htm4、tqOS V1.2其实PendSV的原理就是软中断,将PendSV的中断优先级设置为最低,不可以打原创 2016-11-23 09:52:16 · 890 阅读 · 0 评论 -
关于ARM体系中栈的对齐问题
关于ARM体系中栈的对齐问题-汤权基于ARM架构的处理器的C语言程序设计遵循ATPCS(ARM-THUMB procedure call standard)和AAPCS(ARM Application Procedure Call Standard)。ATPCS规定数据栈为FD(满递减Full Decrease)类型,并且对数据栈的操作是8字节对齐的。在我自己的轻量级的嵌入式操作系统t原创 2016-11-23 09:55:59 · 3925 阅读 · 0 评论 -
JLINK固件修复方法
有时候jlink的使用不当会导致jlink“坏掉”,但是这个坏掉不是硬件烧了,而是jlink内部软件的问题,比如今天这个狗日的MDK5给我更新jlink的时候告诉我固件更新失败,我说失败就失败吧,无所谓。然后要命的是jlink尽然不能用了,估计是因为固件更新了一部分,所以导致不能使用了,或者是因为检测出我的jlink是盗版的,然后故意给我弄坏了,ma dan,正版80多一个你和我们血呢??坏了原创 2016-11-24 10:53:27 · 4882 阅读 · 0 评论 -
JLINK的SWD解法
下面是20针牛角接口的JTAG接口图和SWD接口图,使用JTAG是安装左边的接法,使用SWD调试时使用右边图片的接法,注意要在MDK的debug选项栏的settings中的port选择SWD。有一点很奇怪的是单片机的3.3V引脚必须接到1管脚而不能接到2管脚。我猜测是因为在JTAG模式中1脚和2脚都接到了VCC-3.3V但是在SWD模式下2管脚是不可用的,也就是reserved,所以必须接原创 2016-11-23 21:57:29 · 2715 阅读 · 0 评论 -
[原创] 删繁就简--1 bit的查找,看了白版主的0bit查找的感想
tqOS中使用了OsMapTable任务优先级映射表来查找最高有效位。这在8*8任务的系统中是可行的,需要的查找表有256个元素。但是如果进一步提升系统的最大可支持的任务数量,比如16*16最大支持256个任务的话,就需要查找表中有2^16=65535个元素,每个元素2个字节,也就是一共128KB......不可思议,所以如果扩展最大任务数量至16*16甚至是32*32,用查找表就不合适了。可以使原创 2016-11-22 18:36:32 · 648 阅读 · 0 评论 -
Image uImage与zImage的区别【转】
1,内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。那么uImage又是什么的?它是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImag转载 2016-11-21 15:32:14 · 491 阅读 · 0 评论 -
Linux下make menuconfig出错解决办法
64位Ubuntu16.04下使用menuconfig配置linux内核,但是刚安装的Ubuntu使用make menuconfig时出现下面的错误: *** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' requires the ncurses li原创 2016-11-21 14:51:38 · 910 阅读 · 0 评论 -
64位Ubuntu下使用arm-linux-gcc交叉编译器
arm-linux-gcc是用于交叉编译ARM平台上Linux程序的编译器,在32位的宿主Linux计算机上运行时是正常的,但是在我的64位Linux发行版Ubuntu系统上却无法运行,报错:/usr/local/arm/4.3.3/bin/arm-linux-gcc: 3: /usr/local/arm/4.3.3/bin/arm-linux-gcc: arm-none-linux-gnueab原创 2016-11-21 14:11:22 · 2492 阅读 · 0 评论 -
Linux下使用LCD5110显示中文(ASCII+GB2312字库)
关于如何在Linux下使用LCD5110参见另一篇blog:http://blog.csdn.net/tq384998430/article/details/53214273。在这篇博客的基础上需要添加屏幕绘点的函数:void LCD_DrawDot(int x,int y,int onoff){ int a = y / 8,b = y % 8; if(onoff) { LCD_B原创 2016-11-20 21:22:03 · 3972 阅读 · 0 评论 -
串转并芯片74HC595和74HC164的区别
串转并芯片一般用于对于速度要求不是非常严格并且IO资源有限的系统中,可以通过级联的方式轻松地扩展系统的可用输出IO口数量。同样的也可以使用并转串芯片扩展输入IO口的数量。 这里说一说串转并芯片74HC595和74HC164。 首先来看595芯片,如下图所示,74HC595具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器有相互独立的时钟。数据在SH_原创 2016-12-02 16:29:13 · 29011 阅读 · 0 评论 -
Linux下使用/dev/mem控制GPIO模拟SPI时序控制LCD5110
关于如何使用/dev/mem直接控制GPIO口参见我的另一篇博客:http://blog.csdn.net/tq384998430/article/details/53161192。这篇文章将使用GPIO的操作模拟出SPI时序来控制诺基亚LCD5110屏幕,关于该屏幕可以自行百度,网上资料很全。使用GPIO模拟SPI是单片机开发中常用的一种手段,GPIO还可以模拟IIC等总线的时序,可以用在没原创 2016-11-18 11:18:33 · 2821 阅读 · 0 评论 -
基于STM32处理器的USB HID模拟鼠标键盘(1) - USB HID基础
HID是Human Interface Device的缩写,HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。交换的数据存储在称为报表或报告(report)的结构内,设备的固件必须支持HID报表的格式。主机在控制与中断传输中传送与要求报表,来传送与接收数据。报表的格式非常有弹性,可以处理任何类别的数据。设备除了原创 2016-11-27 20:17:19 · 21411 阅读 · 2 评论 -
GPS模块数据格式
GPS模块数据格式GPRMC(建议使用最小GPS数据格式) $GPRMC,,,,,,,,,,,1) 标准定位时间(UTC time)格式:时时分分秒秒.秒秒秒(hhmmss.sss)。2) 定位状态,A =数据可用,V =数据不可用。 3) 纬度,格式:度度分分.分分分分(ddmm.mmmm)。4) 纬度区分,北半球(N)或南半球(S)。转载 2016-12-15 14:11:18 · 5926 阅读 · 0 评论