嵌入式
文章平均质量分 78
痞子IT
开源,共享,谋发展!
展开
-
ARM-MPU内存保护单元详解
ARM-MPU内存保护单元详解转载 2023-03-08 16:02:31 · 1936 阅读 · 0 评论 -
FreeRTOS软件定时器
FreeRTOS软件定时器转载 2023-03-07 17:32:02 · 312 阅读 · 0 评论 -
gcc编译优化(O0、O1、O2、O3、Os)
gcc 编译优化原创 2023-02-22 13:56:30 · 10236 阅读 · 0 评论 -
I-Cache 和 D-Cache
I-Cache 和 D-Cache原创 2023-02-22 13:52:11 · 4359 阅读 · 0 评论 -
内存碎片产生原因及解决办法
内存碎片产生原因及解决办法翻译 2023-02-21 14:20:24 · 3934 阅读 · 0 评论 -
notepad++正则表达式
notepad++查找的办法转载 2023-02-20 10:44:40 · 4363 阅读 · 0 评论 -
repo的manifest.xml文件全解
repo转载 2022-10-10 11:59:05 · 1593 阅读 · 0 评论 -
CoreMark
本文将介绍使用CoreMark测试程序对我们小组自研芯片进行性能的测试,记录了CoreMarK工具的使用以及对其测试结果进行分析测试环境:PC OS: Ubuntu20.04 LTSCPU: 自研CPU(ARCH=riscv64,ISA=rv64imafdc)Kernel: CPU使用的内核为Linux4.15CoreMark: CoreMark v1.01GNU: riscv64-unknown-linux-gnu1、CoreMark简介 CoreMark是由EEMBC(Embed.原创 2022-04-25 10:13:41 · 2543 阅读 · 0 评论 -
ld链接文件分析及一次bug解决过程
问题描述原子板的代码中含有一个关于使用外部SRAM的功能,由于本人的开发板的SRAM只有512K,因此稍微修改了一下代码,同时使用GCC进行编译,但是这里却报错了,源码如下://内存池(4字节对齐)__align(4) u8 mem1base[MEM1_MAX_SIZE];__align(4) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0x68000000))); //外部SRAM内存池__align(4) u8 mem3base[MEM3_M转载 2022-04-14 10:03:24 · 4231 阅读 · 5 评论 -
Repo介绍
1. 概要repo是Android为了方便管理多个git库而开发的Python脚本。repo的出现,并非为了取代git,而是为了让Android开发者更为有效的利用git。Android源码包含数百个git库,仅仅是下载这么多git库就是一项繁重的任务,所以在下载源码时,Android就引入了repo。 Android官方推荐下载repo的方法是通过Linux curl命令,下载完后,为repo脚本添加可执行权限: $ curl https://storage.googleapis.c转载 2022-04-08 20:55:24 · 3789 阅读 · 0 评论 -
BFD: libncurses.so.5: cannot open shared object file: No such file or directory
1.sudo apt install apt-file2.sudo apt-file update3.sudo apt-file find libncurses.so.54.sudo apt install libncurses5原创 2022-04-08 17:48:58 · 2198 阅读 · 0 评论 -
pip安装总是失败怎么办? 3个方法帮你解决
想必刚接触Python的小伙伴一定被安装库折磨惨啦… …都说pip install XX要安装啥就安装啥,为啥到我这就不行了呢??难道Python在搞我?!?!不不不,消消气,其实不赖Python,也不赖pip,主要赖网速。因为下载的服务器在国外,所以网速特别慢,一不注意就报错了…那怎么办呢?这里我教大家3种方法,以后遇上报错就不怕了。镜像安装既然国外的服务器网速不好,那国内有没有可以下载的服务器呢?当然有!清华大学就有个镜像地址:https://pypi.t转载 2022-04-07 20:22:35 · 11139 阅读 · 2 评论 -
Git常用命令及方法大全
Git常用命令及方法大全下面是我整理的常用 Git 命令清单。几个专用名词的译名如下。Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库本地分支关联远程git branch --set-upstream-to=origin/分支名分支名代码库修改密码后push不上去怎么办? // 重新输入密码 git config --system --unset cred.转载 2022-03-12 17:18:26 · 263 阅读 · 0 评论 -
rt_thread 虚拟文件系统
虚拟文件系统在早期的嵌入式系统中,需要存储的数据比较少,数据类型也比较单一,往往使用直接在存储设备中的指定地址写入数据的方法来存储数据。然而随着嵌入式设备功能的发展,需要存储的数据越来越多,也越来越复杂,这时仍使用旧方法来存储并管理数据就变得非常繁琐困难。因此我们需要新的数据管理方式来简化存储数据的组织形式,这种方式就是我们接下来要介绍的文件系统。文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型 (Abstract data type),是一种用于向用户提供底层数据访问的机制转载 2021-05-17 09:47:40 · 2502 阅读 · 0 评论 -
sct文件编写与使用
sct文件的编写与使用参考资源1. 分散加载文件浅释.pdf。(周立功工程技术笔记)1. DUI0377G_02_mdk_armlink_user_guide.pdf(在keil的帮助文档中可以找到)我们都知道,编译器在生成可执行文件时,先将每个.c文件编译成.o文件(此过程叫编译),然后将很多个.o文件链接成可执行文件(此过程叫链接)。在链接的过程中,会用到一个描述文件,用来指定链接时的行为。这个描述文件叫做链接文件,如linux下的.ld文件,keil中的分散加载文件(.sct文件)。这篇转载 2021-05-15 17:11:29 · 5481 阅读 · 0 评论 -
运行RT-Thread动态模块
RT-Thread 动态模块组件dlmodule提供了动态加载程序模块的机制。dlmodule 组件更多的是一个 ELF 格式加载器,把单独编译的一个 elf 文件的代码段,数据段加载到内存中,并对其中的符号进行解析,绑定到内核导出的 API 地址上。动态模块 elf 文件主要放置于 RT-Thread 下的文件系统上。RT-Thread 的动态模块组件目前支持两种格式:.mo 则是编译出来时以 .mo 做为后缀名的可执行动态模块。它可以被加载,并且系统中会自动创建一个主线程执行这个动态模块中的 .转载 2021-05-11 10:46:18 · 3800 阅读 · 0 评论 -
RT-thread内核之IO设备管理系统
RT-Thread系统的IO设备管理模块为上层应用提供了一个对设备进行访问的通用抽象接口,而对于下层设备来说则提供了底层设备驱动框架,并通过定义的数据结构对设备信息和底层设备驱动进行管理。从系统整体位置来说I/O设备管理模块相当于底层设备驱动和上层应用之间的一个中间层。 I/O管理模块实现了对设备驱动程序的封装:设备驱动程序的实现与I/O管理模块独立,提高了模块的可移植性。应用程序通过I/O管理模块提供的标准接口访问底层设备,设备驱动程序的升级不会对上层应用产生影响。这种方式使得与设备的硬件操...转载 2021-05-06 17:37:34 · 377 阅读 · 0 评论 -
FreeType移植到 STM32 单片机以支持矢量字体
目录一、准备工作二、复制文件三、添加C文件到Keil中四、修改接口五、调用六、优化七、效果一、准备工作下载Freetype源码 ----- 下载FreeType以移植到Keil 的STM32工程为例移植前的软件环境:1,实现了内存分配函数2,实现了文件系统3,使用了TR-Theard操作系统4,实现了GUI界面,并支持点阵字体的显示5,实现了Unicode,GBK,UTF8字符编码的相互转换二、复制文件解压源码压缩包得到如下文件复制以下文件到单片机工程下转载 2021-04-27 10:58:24 · 3390 阅读 · 5 评论 -
Keil使用 fromelf 生成bin文件
一、语法格式如下:fromelf [options] input_file[options] 选项如下,可以组合使用,两者之间用空格隔开:二、在Keil中的使用过程1、配置Output,生成可执行文件aa即为可执行文件名,后缀为axf。即编译后会生成一个叫aa.axf的文件,然后再由这个文件生成bin文件。2、配置User,生成bin文件Keil的“User”中可以设置运行命令,这里设置在编译完成后执行fromelf 命令,下面为解释:C:\Keil\ARM...转载 2021-04-16 18:29:06 · 1643 阅读 · 0 评论 -
__attribute__((section(x))) 使用详解
无论是GNU还是ARM的编译器,都支持__attribute__所指定的编译属性,这里着重讲解一下在KEIL环境下__attribute__中的section的使用方法。section关键字可以将变量定义到指定的输入段中,下面以具体的例子来讲解section的使用方法.#define SECTION(level) __attribute__((used,__section__(".fn_cmd."level)))#define CMD_START_EXPORT(func,func_s) ...转载 2021-04-09 18:59:08 · 2403 阅读 · 1 评论 -
MDK内的KEEP关键字以及$$Base $$Limit
使用mdk编程,假如有一个有用的函数你定义了但是没有显式的调用,mdk在默认方式下,将会把这个函数从整个程序总删除掉,以节省ROM.比如,你在ROM的0x00002000处定位了一个函数,假设为void test(void),然后使用函数指针来调用它:void (*UserProgram)(); //函数指针UserProgram = (void (*)()) (0x00002000);//定位到指定的入口地址0x00002000(*UserProgram)();//调用t...转载 2021-04-09 18:46:13 · 1567 阅读 · 0 评论 -
SCons 构建工具
SCons 简介SCons 是一套由 Python 语言编写的开源构建系统,类似于 GNU Make。它采用不同于通常 Makefile 文件的方式,而是使用 SConstruct 和 SConscript 文件来替代。这些文件也是 Python 脚本,能够使用标准的 Python 语法来编写。所以在 SConstruct、SConscript 文件中可以调用 Python 标准库进行各类复杂的处理,而不局限于 Makefile 设定的规则。在SCons的网站上可以找到详细的 SCons 用户手..转载 2021-01-08 15:45:07 · 7894 阅读 · 1 评论 -
Quicklz压缩算法
以前对压缩算法一无所知,只是知道哈弗曼编码能做这种事情,但是感觉这样的方法奇慢无比。昨天下午看了下号称世界上最快的压缩算法Quicklz,对压缩的基本思路有了一定的了解。一般的压缩程序的要求读入文件之后以便压缩一边输出,而不是去先分析整个文件中的情况之后才做决定采取哪种算法。Quicklz也不例外也是争取利用文件中重复出现的字节来进行压缩,管理结构如下:在压缩的过程中不断地读入3个字节,然后根据这3个字节得到一个hash值,根据这个hash值就可以找到offset,这个offset就是上次这个hash值转载 2020-09-30 20:28:01 · 983 阅读 · 0 评论 -
scons用户指南 第八章:自动将命令行选项赋值给Construction变量
1、将选项合并到环境中:MergeFlags函数SCons的construction环境有一个MergeFlags方法,此方法将一个值的字典合并到construction环境中。MergeFlags将字典中的每个值看做一个选项列表。如果一个选项已经在construction环境变量中存在了,MergeFlags将不会重复设置这个选项。当合并选项到任何一个名字在PATH中的变量的时候,MergeFlags保持选项在最左端出现,应为目录路径列表中,第一个出现占主要地位。当合并选项到任何其他变量名的时候,转载 2020-06-02 18:01:58 · 722 阅读 · 0 评论 -
scons用户指南 第五章:节点对象
1、编译方法返回目标节点列表所有编译方法会返回一个节点对象列表,这些节点对象标识了那些将要被编译的目标文件。这些返回出来的节点可以作为参数传递给其他的编译方法。例如,假设我们想编译两个目标文件,这两个目标有不同的编译选项,并且最终组成一个完整的程序。这意味着对每一个目标文件调用Object编译方法,如下所示:Object('hello.c', CCFLAGS='-DHELLO')Object('goodbye.c', CCFLAGS='-DGOODBYE')Program(['hello.o',.转载 2020-06-02 18:00:03 · 304 阅读 · 0 评论 -
scons用户指南 第三章:编译相关的一些事情
1、指定目标文件的名字当你调用Program编译方法的的时候,它编译出来的程序名字是和源文件名是一样的。下面的从hello.c源文件编译一个可执行程序的调用将会在POSIX系统里编译出一个名为hello的可执行程序,在windows系统里会编译出一个名为hello.exe的可执行程序。Program('hello.c')如果你想编译出来的程序的名字与源文件名字不一样,你只需要在源文件名的左边声明一个目标文件的名字就可以了:Program('new_hello','hello.c')现在在POSI.转载 2020-06-02 17:59:00 · 352 阅读 · 0 评论 -
scons用户指南 第二章:简单编译
1、编译简单的C/C++程序这是一个用C语言编写的著名的"Hello,World!"程序:int main(){ printf("Hello, World!\n");}用SCons编译它,需要在一个名为SConstruct的文件中输入如下命令:Program('hello.c')这个短小的配置文件给了SCons两条信息:你想编译什么(一个可执行程序),你编译的输入文件(hello.c)。Program是一个编译器方法(builder_method),一个Python调用告诉SC...转载 2020-06-02 17:58:30 · 1034 阅读 · 0 评论 -
scons用户指南 第一章:编译和安装SCons
1、安装Python因为SCons是用Python编写的,所以你必须在使用SCons之前安装好Python。你在安装Python之前,应该注意查看Python是否在你的系统里已经可用了(在系统的命令行中运行python -V或python --version)。$python -VPython 2.5.1在一个Windows系统里,C:\>python -VPython 2.5.1如果Python没有安装,你会看到一条错误消息比如“command not found”(在U转载 2020-06-02 17:57:52 · 2942 阅读 · 0 评论 -
LCD显示异常分析——撕裂(tear effect)
概述我们一起分析了开机花屏的问题,在这一篇中,我将对LCD撕裂(tear effect)问题进行详细分析,以及给出这类问题的常用解决方法。本文适用范围:对象:LCD驱动调试人员 硬件:带GRAM的LCD (如SPI/MCU/DSI CMD屏) 软件:所有嵌入式操作系统现象首先贴一张动态图,让大家能直观的感受撕裂形成的过程:分析从上面的动态图我们可以看到,在第二帧出现了新旧画面各显示一部分的现象,该现象即为撕裂,英文又叫tear effect。tear effect的根.转载 2020-06-02 09:19:28 · 5407 阅读 · 4 评论 -
LCD显示异常分析——开机闪现花屏
概述最近在工作中,有同事遇到LCD开机瞬间会闪现雪花屏的问题,而这类问题都有个共同点,那就是都发生在带GRAM的屏上,同样的问题,在休眠唤醒时也会出现。其实这类问题的原理分析并不难,只是在给别人解释的时候不太好描述,因此,我特地写了这篇文章,好让大家能够更容易、更直观的理解这类花屏问题的原因,也希望能够帮助那些遇到同样问题的朋友。环境软件:Android硬件:带GRAM的LCD(如SPI屏,DSI CMD屏)现象分析从上面的动态图可以看出,出现瞬间花屏的问题,主要有两个原因:背转载 2020-06-01 17:58:19 · 4601 阅读 · 0 评论 -
OLED显示屏驱动:8080并口,IIC,SPI三种驱动方式
本文介绍了对OLED的几种驱动方式,8080并口,IIC,SPI三种驱动方式,采用的单片机是STM32F407.文章目录一.OLED驱动原理介绍二.8080并口驱动方式三.IIC驱动方式四.SPI驱动方式一.OLED驱动原理介绍OLED模块的驱动芯片为SSD1306,其显存大小总共为 12864bit 大小,SSD1306 将这些显存分为了 8 页.可以看出,SSD1306 的每页包含了 128 个字节,总共 8 页,这样刚好是 12864 的点阵大小。因为每次写入都是按字节写入的,这就存转载 2020-06-01 17:37:12 · 6965 阅读 · 1 评论 -
GUI_Type.h和GUI.h
GUI_Type.h和GUI.h定义了多个结构体,基于这些结构体,实现了各种字体的框架。 结构体GUI_FONT定义了整个字体的信息以及接口函数指针,如字体高度、宽度、显示该字体的接口函数、计算该字体字符串长度宽度的函数、判断某个字符是否属于该字体等等。当YDist>YSize时,相当于上下行字符之间插入间隔。 struct GUI_FONT{ ...转载 2020-04-29 16:47:20 · 1420 阅读 · 0 评论 -
送给女生的 程序员特征的 生日礼物
先上个图吧!再贴个源代码:<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title>3D相册</title> <style type="text/css">html{ background:linear-grad...原创 2020-04-24 18:06:02 · 2295 阅读 · 0 评论 -
压力测试原理 方法之一
压力测试原理 图1上图中768,779, 825表示个人心跳之间的间隙时间.间隙时间的变化越大,表示压力越小间隙时间的变化越小,表示压力越大压力值分布:0-25:表示休息中26-50:表示低度压力51-75:中度压力...原创 2020-04-12 16:32:44 · 3661 阅读 · 0 评论 -
Git 恢复 某个已修改的文件
checkout :这个命令估计大家都经常使用的了作用:恢复某个已修改的文件(撤销未提交的修改):使用格式: git checkout file-namerevert :还原已提交的修改(已经提交过的修改,可以反悔~)还原最近一次提交的修改:git revert HEAD还原指定版本的修改:git revert commit-idreset:撤销当...原创 2020-04-12 15:24:22 · 9777 阅读 · 0 评论 -
PPG测量心率和血氧的方法——原理版
光电容积脉搏波描记法PPG光学心率传感器,如果带过上述那些智能手表或者智能手环的朋友来说也不算稀奇的事情。就拿AppleWatch来说,测量心率时底部的表盘会发出绿色的灯光,并且测量的时候手腕最好保持不动否侧会影响测量结果。接下来将详细介绍光学心率测量的原理。如下两张图是光学心率传感器。图a是LED没有发光的时候中间是一个光敏二极管,图b是传感器的LED发光的时候。图A ...转载 2020-03-22 11:34:03 · 25891 阅读 · 1 评论 -
UI架构设计六 — 外部Flash资源地址Load
首先先贴个代码吧!#include <stdio.h>#include <string.h>#include <stdint.h>#define EXT_FLASH_RES_ADDR (0) //假设在外部Flash从0地址开始存放资源#define RES_VERSION (1)#define RES_MAGIC "NRES"...原创 2020-03-14 21:55:32 · 340 阅读 · 0 评论 -
UI架构设计五 — DTA文件使用脚本自动生成
上一篇文章讲到,我们可以使用BmpCvST.exe软件手动把png文件生成对应的DTA文件。如果是简单的生成几张图片,倒也无所谓,但是当你开发项目的时候,可能一个项目下来,会有几百张图片需要生成,所以在这个时候必须使用脚本来解放你的生产力,不然没有耕不坏的田,只有累死的牛!好了,下面我贴下 自动生成脚本代码,名字为get_dta.sh:all_files=`find $1 -name...原创 2020-03-14 21:17:28 · 573 阅读 · 0 评论 -
UI架构设计四 — res.txt文件的原理和制作
上篇文章提到,执行: ./image2bin res.txt 就会产生 output_res.bin资源文件了那么res.txtshi怎么制作出来的,又有什么前提条件。归根结底,就是执行了这句话: find . -name *.dta | sort > res.txt这句就是查找所以文件(以dta结尾的),包含的相对文件路径 写到 res.txt文件里面去上面包含...原创 2020-03-14 21:01:06 · 499 阅读 · 0 评论 -
UI架构设计三— 资源的制作代码
先贴个代码先:#include <stdio.h>#include <sys/types.h>#include <errno.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>#include <string.h>#inclu...原创 2020-03-12 13:35:03 · 225 阅读 · 0 评论