产品人卫朋
左手产品,右手技术。《硬件产品经理》作者,“人人都是产品经理”专栏作家,“阿里云”开发者社区专家博主
展开
-
【IoT】加密与安全:动态密码 OTP 算法详解
动态密码,亦称一次性密码(One Time Password, 简称 OTP),是一种高效简单又比较安全的密码生成算法,在我们的生活以及工作中随处可见。1、动态密码背景介绍动态密码是指随着某一事件(密码被使用、一定的时间流逝等)的发生而重新生成的密码,因为动态密码本身最大优点是防重复执行攻击(replay attack),它能很好地避免类似静态密码可能被暴力破解等的缺陷,现实运用中,一般采...原创 2019-05-24 15:02:01 · 8385 阅读 · 1 评论 -
【IoT】STM32 编译结果 map 之 code、RO-data、RW-data、ZI-data 字段解析
1、Code即代码域,它指的是编译器生成的机器指令,这些内容被存储到ROM区。2、RO-dataRead Only data,即只读数据域,它指程序中用到的只读数据,这些数据被存储在ROM区,因而程序不能修改其内容。例如:C语言中const关键字定义的变量就是典型的RO-data。3、RW-dataRead Write data,即可读写数据域,它指初始化为“非0值”的...原创 2019-03-19 19:06:22 · 1796 阅读 · 0 评论 -
【IoT】STM32 查看 FLASH 和 RAM 使用情况(RO-data、RW-data、ZI-data)
1、KEIL MDK 编译后的信息Code=86496 RO-data=9064 RW-data=1452 ZI-data=161161)Code 是代码占用的空间;2)RO-data 是 Read Only 只读常量的大小,如const型;3)RW-data 是(Read Write)初始化了的可读写变量的大小;4)ZI-data 是(Zero Initialize) 没有...原创 2019-03-20 09:24:41 · 4781 阅读 · 0 评论 -
【Tool】ELF 和 AXF 文件分析详解
ELF(Executable and Linking Format)是一个定义了目标文件内部信息如何组成和组织的文件格式。内核会根据这些信息加载可执行文件,内核根据这些信息可以知道从文件哪里获取代码,从哪里获取初始化数据,在哪里应该加载共享库等信息。栈的地址是向下生长,堆的地址是向上生长:1、ELF 文件类型ELF 文件有下面三种类型:1)目标文件$ gcc -c ...原创 2019-03-13 09:37:09 · 5868 阅读 · 0 评论 -
【IoT】STM32Fxxx 上移植 Huawei LiteOS
1、LiteOS 简介华为的 LiteOS 以轻量级(内核小于10k)、低功耗(1节5号电池最多可以工作5年),快速启动,互联互通,安全等关键能力,为开发者提供 "一站式" 完整软件平台,有效降低开发门槛、缩短开发周期。华为提出 1+2+1战略,即一个物联网操作系统,两种接入方式,一个平台,从而实现其使能万物智能的目标。示意图如下:操作系统特点及框架如下图所示:2、建立...原创 2019-03-26 09:49:03 · 2788 阅读 · 1 评论 -
【IoT】STM32 字节对齐 #pragma pack
1、对齐原则min(sizeof(word ), 4) = 2,因此是 2 字节对齐,而不是我们认为的 4 字节对齐。1)每个成员分别按自己的方式对齐,并能最小化长度;2)复杂类型(如结构)的默认对齐方式是它最长的成员的对齐方式,这样在成员是复杂类型时,可以最小化长度;3)对齐后的结构体整体长度必须是成员中最大的对齐参数的整数倍,这样在处理数组时可以保证每一项都边界对齐。对于数...原创 2019-03-29 19:14:51 · 1694 阅读 · 0 评论 -
【IoT】STM32 FLASH 掉电数据丢失处理策略以及备份机制
1、原因由于FLASH的擦除和写入的特性,如果在擦除中掉电或者写入时掉电,有可能会出现失败的情况,下次再上电读取就会出错。擦除的时候掉电,不能保证擦除完全,但是已经擦除的部分,肯定是0xff了。写的时候掉电,已经写入的就是正确的,电平掉到最低极限工作电压附近时,写入的就无法保证了,地址无法保证,写入的值也无法保证。没有写到的,肯定还是 0xFF。 2、解决方式2.1、硬件方式...原创 2019-03-23 17:43:10 · 13783 阅读 · 2 评论 -
【IoT】HUAWEI LiteOS 启动流程
1、liteos 目前支持多款平台具体支持的平台在目录:\LiteOS-master\targets,以 STM32F103RB_NUCLEO 为例。其入口函数在 \LiteOS-master\targets\STM32F103RB_NUCLEO\GCC\los_startup_gcc.s 中的 Reset_Handler入口函数:Reset_Handler: #设定栈指...转载 2019-03-26 19:26:15 · 2997 阅读 · 0 评论 -
【IoT】HUAWEI LiteOS 内存管理解析
1、liteos 内存管理源码以及架构分析对于操作系统来说主要有如下基础模块:1)内存管理,任务调度,任务之间的通信和互斥,这几个是一个操作系统最核心的模块;2)其次比较重要的就是文件系统,网络协议栈等一些比较重要的模块;3)再下来就是操作系统根据各种类型的设备定义的一些驱动的框架,比如字符设备,块设备,等各种类型的设备的管理框架;4)再具体下来就是具体的设备驱动程序这些是和具...转载 2019-03-26 19:28:58 · 2295 阅读 · 0 评论 -
嵌入式驱动源代码(4):STM32 分散加载文件 .sct 解析
1、STM32 启动文件与 .sct 文件分析1) 定义STACK段,{NOINIT,读写}:分配一段内存大小为0.5K;2) 定义HEAP段, {NOINIT,读写}:分配一段内存大小为1K;3) 定义RESET段,{DATA,只读}:DCD各种中断向量;4) 定义|.text|段,{CODE,只读}:Reset_Handler函数,函数中最后加载了__main;对剩余的中断...原创 2019-03-27 08:55:52 · 5152 阅读 · 2 评论 -
【IoT】STM32 启动代码 __main 与用户主程序 main() 的区别
1、__main 作用__main函数是C/C++运行时库的一个函数,嵌入式系统在进入应用主程序之前必须有一个初始化的过程,使用__main标号引导系统时必须将应用程序的入口定义为main()。 在初始化的过程中,__main函数的作用主要有两点:1) 完成对映像文件的初始化操作a、映像文件链接器把多个目标文件链接成一个映像文件。b、加载地址和执行地址映像文件可以...转载 2019-03-27 09:06:37 · 5069 阅读 · 0 评论 -
【IoT】STM32 启动代码汇编指令详解
● EQU伪指令EQU用来为一个数字常量或一个和内核寄存器相关的数值或一个和程序计数器相关的数值定义的一个符号名称,类似于C语言中的"#define"。语法格式:name EQU expr{ , type}注意:语法格式中的{ }不属于语法格式的部分,并且{ }中的内容是可选的;name:数值(expr)的符号名称;expr:一个与内核寄存器相关的地址,或一个绝对地址,或...原创 2019-03-27 09:24:25 · 2430 阅读 · 1 评论 -
【IoT】STM32 结构体对齐规则
1、对齐算法在相同的对齐方式下,结构体内部数据定义的顺序不同,结构体整体占据内存空间也不同。如下结构体定义:struct A {// a 的自身对齐值为 4,偏移地址为 0x00~0x03,a 的起始地址 0x00 满足 0x00%4=0int a;// b 的自身对齐值为 1,由于紧跟 a 之后的地址,即 0x04 满足 0x04%1=0,所以 b 存放在 0x04 地址空...原创 2019-04-01 09:18:40 · 2836 阅读 · 0 评论 -
【IoT】STM32 编译指令 #pragma pack 的配对使用
#pragma pack 可以用来指定数据结构的成员变量的内存对齐数值。可选值为:1、2、4、8、16。使用 pack 指令要配对使用,以避免意外影响项目中其他源文件的结构成员的内存对齐。如果影响了其他源文件的结构成员内存对齐,那么在你按照默认对齐来计算那些结构成员占用内存大小或者使用指针移动计算结构成员偏移位置的时候,就可能会出现意料之外的异常。主要可能的异常是内存定位错误...原创 2019-04-01 09:42:07 · 1147 阅读 · 0 评论 -
【IoT】STM32 启动代码分析详解
1、堆栈存储器堆栈存储区是在片上存储器中的SRAM(或RAM)中由用户自行开辟的一片数据存储区域,并且堆栈区的大小可根据用户的需要任意指定(只要不超过SRAM或RAM的大小),而堆栈区的位置由编译器指定分配。Cortex-M3/M4处理器的堆栈指针SP是“满递减,空递增”,呈现向下逆生长的特点。堆栈区数据的存储特点是“先进后出,后进先出”。这种特点是由堆栈指针的移动方式决定的,...原创 2019-03-28 08:53:52 · 1608 阅读 · 0 评论 -
【IoT】LiteOS 实时操作系统事件标志组 event 操作解析
信号量同步只能与单个的事件或任务进行同步,事件标志组与多个事件或任务进行同步事件位用来表明某个事件是否发生,事件组是一组事件位。1、基本概念事件是一种实现任务间通信的机制,可用于实现任务间的同步,但事件通信只能是事件类型的通信,无数据传输。一个任务可以等待多个事件的发生:1)可以是任意一个事件发生时唤醒任务进行事件处理;2)也可以是几个事件都发生后才唤醒任务进行事件处理。...原创 2019-04-03 18:28:51 · 1682 阅读 · 0 评论 -
嵌入式驱动源代码(5):STM32 文件系统 fatfs 移植笔记详解
1、内存和Flash介绍stm32 的 flash 地址起始于 0x0800 0000,结束地址是 0x0800 0000 加上芯片实际的 flash 大小,不同的芯片 flash 大小不同。RAM 起始地址是 0x2000 0000,结束地址是 0x2000 0000 加上芯片的 RAM 大小,不同的芯片RAM也不同。Flash 中的内容一般用来存储代码和一些定义为 const 的数...原创 2019-03-19 18:52:04 · 4398 阅读 · 1 评论 -
【IoT】FATFS 文件系统 SPI 方式移植
1、FATFS 简介FatFs Module是一种完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。完全用标准C语言编写,所以具有良好的硬件平台立性,只需要简单修改就可以移植到8051、PIC、AVR、SH、Z80、H8、ARM等系列嵌入式设备。支持FATl2、FATl6和FAT32,支持多个存储媒介、有独立的缓冲区,可以对多个文件进行读/写,并特别对8位单片机和16位单...转载 2019-03-04 15:18:32 · 1279 阅读 · 0 评论 -
【liteOS】小白进阶之 LiteOS 互斥锁解析
1、互斥锁基本概念互斥锁又称互斥型信号量,是一种特殊的二值性信号量,用于实现对共享资源的独占式处理。任意时刻互斥锁的状态只有两种,开锁或闭锁。当有任务持有时,互斥锁处于闭锁状态,这个任务获得该互斥锁的所有权。当该任务释放它时,该互斥锁被开锁,任务失去该互斥锁的所有权。当一个任务持有互斥锁时,其他任务将不能再对该互斥锁进行开锁或持有。多任务环境下往往存在多个任务竞争同一共享资源的应用...原创 2019-01-24 18:09:02 · 1591 阅读 · 0 评论 -
【LiteOS】小白进阶之如何获取 LiteOS 相关资源
Huawei LiteOS 官方学习资源LiteOS 是在 2015 华为网络大会上华为发布的敏捷网络 3.0 中的一个轻量级的物联网操作系统,LiteOS 体积只有 10KB 级。2015 年 5 月 20日,在 2015 华为网络大会上,华为发布了敏捷网络 3.0,主要包括轻量级的物联网操作系统 LiteOS、敏捷物联网关、敏捷控制器三部分。Huawei LiteOS 是华为 1+...原创 2019-01-21 16:27:51 · 1161 阅读 · 0 评论 -
【LiteOS】小白进阶之 LiteOS 基础详解
1、Huawei LiteOS 的内核浅析内核分为两个层次:第一层是基础内核,第二层是扩展内核。基础内核的源码是开源的,可以在 github 上看到 Huawei LiteOS 基础内核源码项目地址:Huawei LiteOS 基础内核源码:LiteOS 源码基础内核提供的能力包括:任务调度内存管理中断机制队列管理事件管理IPC 机制时间管理软定时器双...原创 2019-01-21 16:40:54 · 24933 阅读 · 4 评论 -
【LiteOS】小白进阶之系统移植配置解析
LiteOS 配置文件是操作系统移植的核心部分 - los_config.h。1、配置时钟系统时钟的配置,需要根据不同的 CPU 以及 CPU 初始化的时钟频率来修改:#define OS_SYS_CLOCK 16000000 2、地址配置extern char __data_end;...原创 2019-01-21 17:21:16 · 1844 阅读 · 0 评论 -
【LiteOS】小白进阶之如何创建 LiteOS 任务(三)
1、任务结构体typedef struct tagTskInitParam{ TSK_ENTRY_FUNC pfnTaskEntry; /**< Task entrance function */ UINT16 usTaskPrio; /**&l...原创 2019-01-21 18:03:37 · 1875 阅读 · 0 评论 -
【LiteOS】小白进阶之常用 LiteOS 任务接口与基础原理详解(一)
LiteOS 的任务是调度执行的最小单元,主要按照优先级抢占,辅以时间片轮转的方式进行调度。任务的操作和维护保护创建、删除、调用、挂起、恢复、切换、sleep 等。任务间的交互可以通过消息或事件进行,同时支持使用互斥锁 MUX 或信号量 semphore来 进行活动的互斥同步。任务可以分为不同的优先级,优先级用 0-31 表示,其中 0 为最高优先级。1、系统的启动从 ...原创 2019-01-21 18:05:53 · 3250 阅读 · 0 评论 -
【LiteOS】小白进阶之创建 LiteOS 任务错误码集锦(二)
1、LOS_ERRNO_TSK_NO_MEMORY 0x03000200内存空间不足,分配更大的内存分区。2、LOS_ERRNO_TSK_PTR_NULL 0x02000201任务参数为空,检查任务参数3、LOS_ERRNO_TSK_STKSZ_NOT_ALIGN 0x02000202任务栈大小未对齐,对齐任务栈4、LOS_ERRNO_TSK_PRIOR_ERROR 0x...原创 2019-01-22 09:28:56 · 1451 阅读 · 0 评论 -
【LiteOS】小白进阶之 LiteOS 时间管理解析
1、基本概念时间管理以系统时钟为基础,时间管理提供给应用程序所有和时间有关的服务。系统时钟是由定时/计数器产生的输出脉冲触发中断而产生的,一般定义为整数或长整数。输出脉冲的周期叫做一个“时钟滴答”。系统时钟也称为时标或者 Tick,一个 Tick 的时长可以静态配置。用户是以秒、毫秒为单位计时,而芯片 CPU 的计时是以 Tick 为单位的,当用户需要对系统操作时,例如任务挂起...转载 2019-01-22 09:54:29 · 2581 阅读 · 0 评论 -
【LiteOS】小白进阶之 LiteOS event 事件标志组解析
1、event 事件基本概念事件是一种实现任务间通信的机制,可用于实现任务间的同步,但事件通信只能是事件类型的通信,无数据传输。一个任务可以等待多个事件的发生:可以是任意一个事件发生时唤醒任务进行事件处理,也可以是几个事件都发生后才唤醒任务进行事件处理。事件集合用 32 位无符号整型变量来表示,每一位代表一个事件。多任务环境下,任务之间往往需要同步操作,一个等待即是一个同步。...转载 2019-01-22 10:11:26 · 1677 阅读 · 0 评论 -
【LiteOS】小白进阶之 LiteOS 消息队列解析
1、消息队列基本概念队列又称消息队列,是一种常用于任务间通信的数据结构,实现了接收来自任务或中断的不固定长度的消息,并根据不同的接口选择传递消息是否存放在自己空间。任务能够从队列里面读取消息,当队列中的消息是空时,挂起读取任务;当队列中有新消息时,挂起的读取任务被唤醒并处理新消息。用户在处理业务时,消息队列提供了异步处理机制,允许将一个消息放入队列,但并不立即处理它,同时队列还能起到缓...转载 2019-01-22 10:32:20 · 2311 阅读 · 0 评论 -
【liteOS】小白进阶之移植 LiteOS 到 STM32
1、LiteOS 简介Huawei LiteOS 是华为轻量级物联网操作系统,其体系架构如下图所示:Huawei LiteOS由Huawei LiteOS kernel、互联互通中间件、开放API以及安全组成:1)Huawei LiteOS Kernel为Huawei LiteOS基础内核,属于最精简RTOS。包括任务管理、内存管理、时间管理、通信机制、中断管理、队列管理、事件...原创 2019-01-22 11:01:56 · 10290 阅读 · 2 评论 -
【LiteOS】小白进阶之 LiteOS 队列、任务、定时器综合实验
1、功能说明创建一个打印队列和 3 个任务,其中两个 Task 负责写入数据 1/2,另外一个用于输出字符串。同时还在 Tick 任务每触发 200 次,向打印队列(首部)写入数据 3。2、代码讲解1)创建队列、定时器、任务UINT32 Example15_Entry(VOID) { UINT32 uwRet = LOS_OK; TSK_INIT_PARAM_...转载 2019-01-30 16:38:26 · 2052 阅读 · 0 评论 -
【LiteOS】HUAWEI LiteOS 详解
1、功能介绍Huawei LiteOS 是华为面向 IoT 领域,构建的轻量级物联网操作系统,遵循 BSD-3 开源许可协议,可广泛应用于智能家居、个人穿戴、车联网、城市公共服务、制造业等领域,大幅降低设备布置及维护成本,有效降低开发门槛、缩短开发周期。2、硬件支持LiteOS 目前已经适配了 30 多种开发板,其中包括 ST、NXP、GD、MIDMOTION、SILICON、AT...原创 2019-02-12 16:03:46 · 12875 阅读 · 0 评论 -
【IoT】Huawei LiteOS 支持 FatFs 的移植
1、FsFs(File system文件系统)是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。2、FatFsFatFs是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)文件系统模块,它完全免费开源,具有以下特...转载 2019-03-04 10:21:06 · 1737 阅读 · 0 评论 -
【IoT】SPIFFS 文件系统解析
1、SPIFFSSPIFFSSPIFFS的设计灵感来源于YAFFS。YAFFS文件系统是专门为NAND闪存而设计的,需要耗费更多的RAM,SPIFFS文件系统很多方法是从YAFFS借鉴的。SPIFFS文件系统不假设目标系统具有Heap堆内存的能力,SPIFFS只需要一定的工作RAM缓冲区即可,这让它可以适用于更多的地方。2、使用 NOR 技术的 SPI 闪存设备以下是SPI...转载 2019-03-04 14:24:25 · 5713 阅读 · 0 评论 -
【liteOS】小白进阶之 LiteOS 信号量解析
1、信号量概念信号量(Semaphore)是一种实现任务间通信的机制,实现任务之间同步或临界资源的互斥访问。常用于协助一组相互竞争的任务来访问临界资源。在多任务系统中,各任务之间需要同步或互斥实现临界资源的保护,信号量功能可以为用户提供这方面的支持。通常一个信号量的计数值用于对应有效的资源数,表示剩下的可被占用的互斥资源数。其值的含义分两种情况:1) 0,表示没有积累下来的...原创 2019-01-24 18:03:43 · 1773 阅读 · 0 评论