自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

鱼藏剑

思考记录共享

原创 Mutex 的简单实现(在单机非EmbOS背景下的简单使用)

《xx.h》 typedef int (*P_GetMutex)(int, int); typedef int (*P_FreeMutex)(int, int); typedef struct _MUTEX_S { int Mutex; // 0/1 且 不支持嵌套 int Owne...

2020-05-20 11:39:57 47 0

原创 ARM :强符号与弱符号 强引用和弱引用

弱引用 和 弱定义 在Link阶段将会体现出不同。

2020-03-09 13:36:54 54 0

原创 ARM:ELF bin Hex axf

前言: PC平台流行的可执行文件格式(Executable File Format),主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable and Linking Format,可执行和链接格式)。他们都是COFF(Common Obj...

2020-03-09 13:25:06 51 0

原创 2020 02 10 艰难开工

今天是2020年 迎着疫情开工的第一天。 上一次遇到这样的事情还是中学时代,印象里只记得假期一直再延长,天气都暖和了。 那时候什么也不懂,无知无畏。现在开始变得惜命了,有好多事没做,有好多人或物都还没来得及见,总担心 中间有任何的意外打断。 庚子年真多事之秋。往大了国家崛起 民族复兴的千秋...

2020-02-10 12:52:12 70 0

原创 ARM:MPU & MMU & SMMU

1、MPU (Memory Protection Unit); 2、MMU(Memory Management Unit)。 MMU是比MPU提供了功能更强大的内存保护机制,MPU只提供了内存区域保护,而MMU是在此基础上提供了虚拟地址映射技术,而且在操作上,MMU要比MPU负责。 3、SM...

2020-01-22 19:09:31 410 0

原创 ARM:用户级 特权级 AND 线程模式 Handler模式

在特权级模式下,用户可以访问和配置系统控制寄存器,比如NVIC中断控制器。然而,如果是在非特权级模式下,系统控制寄存器是不允许访问的,一旦访问将导致硬件异常。 Unprivileged: 非特权级,起到保护用户任务的作用,防止用户可以在任意任务中访问和修改系统寄存器,操作不当会造成系统崩溃...

2020-01-16 17:21:35 194 0

原创 ARM : APCS规则

ATPCS (ARM-Thumb Procedure Call Standard) 规定了一些子程序间调用的基本规则,这些规则包括子程序调用过程中寄存器的使用规则,数据栈的使用规则,参数的传递规则。有了这些规则之后,单独编译的C语言程序就可以和汇编程序相互调用。 AAPCS (ARM Archt...

2020-01-15 20:06:25 460 0

原创 ARM:NVIC & VIC & GIC & SCB

ARM体系结构支持以下操作模式: 用户 模式 : 在执行完CPU启动代码文件Startup.s后正常的程序执行状态。 系统 模式 : 运行一些操作系统核。 IRQ (中断) 模式 : 通用的中断处理模式。 FIQ (快速中断) 模式 : 快速中断,处理一些特殊的...

2020-01-15 20:01:54 249 0

原创 ARM : ELF文件

ELF 文件标准里把系统中采用ELF 格式的文件归类为四种: 可重定位文件,Relocatable File ,这类文件包含代码和数据,可用来连接成可执行文件或共享目标文件,静态链接库归为此类,对应于Linux 中的.o ;Windows 的 .obj. 可执行文件,Executabl...

2020-01-15 19:51:32 52 0

原创 MDK 使用 malloc free

(1)栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈。 (2)堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于数据结构中的链表。 (3)全局区(静态区)(static):全局变量...

2020-01-13 20:47:04 66 0

原创 MDK printf 、scanf 实现

在MDK中使用printf,需要同时重定义fputc函数和避免使用semihosting(半主机模式),标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数。所以需要将printf需要调用的fputc里面的输出指向串口(重定向)。 方法1-...

2020-01-13 20:26:58 137 0

原创 数据结构与算法对嵌入式的影响与使用:Studying Route

未来软件的发展趋势来讲,数据结构与算法会越来越普适: 程序=数据结构+ 算法 一方面是因为硬件的不断升级,使得很多嵌入式系统现在已经与桌面系统的区别越来越小,可以跑更多的软件平台,使得数据结构与算法可以有更宽阔的应用场景。 另一方面,即使是嵌入式设备,其软件功能需求也在不断的升级,很多嵌入式...

2020-01-13 15:20:46 44 0

原创 中断:上半部与下半部

cpu在执行程序时,如果有外部中断触发时,如定时器中断、串行总线中断等,cpu停止当前任务从而转去响应中断处理。对于中断函数的处理,原则是尽快处理完事务并退出中断,这一点也比较好理解,尽快处理中断并返回,保证正常任务的执行,并且能否响应其他事务的中断,保证实时性和并发性。   其实,在单片机逻辑...

2020-01-13 15:12:04 33 0

原创 线程 、进程间的通信方式

一、进程间的通信方式 1.1、传统的进程间通信方式 # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用[ 管道也是文件.管道大小4096字节. 管道满时,写阻塞.空时,读阻塞.]。进程的亲缘关系通常是指父子进程关系。 管道是半双...

2020-01-13 15:05:47 22 0

原创 Linux之普通进程 后台进程 守护进程

普通进程 即前台进程:是在终端中运行的命令,那么该终端就为进程的控制终端,一旦这个终端关闭,这个进程也随之消失。 后台进程 后台程序并未完全脱离终端(在终端未关闭前还是会往终端输出结果)---[ 守护进程已经完全脱离终端控制台]。 后台运行只是终端进行了一次fork,让程序在后台执行,...

2020-01-13 15:01:59 53 0

原创 C语言实现的函数重载

重载简单来说就是一个函数名可以实现不同的功能,要么输入参数不同或者参数个数不同,要么返回类型不同。 众所周知,c++允许重载函数(而C不允许)。这通常是通过“篡改”函数名来实现的,从而在符号定义中包含函数参数的类型。然后,重载函数的每个变体将获得入口点的不同符号名。因此,通过调用或跳转到正确的...

2020-01-13 14:58:54 94 0

原创 C : 程序(进程)内存布局

程序布局(进程的物理实体) https://www.cnblogs.com/grandyang/p/4968604.html https://www.cnblogs.com/fengyv/p/3789252.html 一个程序本质上都是由 BSS 段、data段、text段三个组成的。 B...

2019-09-06 16:53:54 36 0

原创 SoC:通信总线

REF:https://blog.csdn.net/linton1/article/details/79649249 https://blog.csdn.net/ivy_reny/article/details/56274412 AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设...

2019-09-06 16:52:40 165 0

原创 C:静态编译 运行时库

REF : http://www.cnblogs.com/haore147/p/3646962.html (编译预处理和条件编译执行过程) C 之 运行时库大致包含以下功能( C run-time library): 启动和退出:包括函数入口以及入口函数所依赖的其他函数等 标...

2019-09-06 16:50:32 36 0

原创 C :位域实现与对齐

C/C++中以一定区域内的位(bit)为单位来表示的数据成为位域,位域必须指明具体的数目。位域的作用主要是节省内存资源,使数据结构更紧凑。 REF: https://www.cnblogs.com/pure/archive/2013/04/22/3034818.html 位数组 :https:...

2019-09-06 16:49:23 66 0

原创 C:变量与初始化

内存中供用户使用的存储空间分为三部分:程序区、静态存储区、动态存储区。 C语言中每个变量有两个属性:第一数据类型;第二存储属性。 .....................................................................................

2019-09-06 16:48:38 169 0

原创 C:volatile 和 内存屏障(dmb)

C语言中 volatile 关键字用于告诉编译器,严禁将此处的汇编语句与其它的语句重组合优化。volatile只能保证编译器不会做乱序执行优化. 另外,全局变量虽然可以全局访问,但是不会自带“volatile”属性的!还是要人工添加!!! 1. 不对*p操作生成乱序指令(通常如此,具体请看后...

2019-09-06 16:47:11 146 0

原创 C:深入 char 、char * 、char ** 、char a[ ] 、char *a[]

REF :https://blog.csdn.net/daiyutage/article/details/8604720 二级指针保存的是一级指针的地址,它的类型是指针变量,而一级指针保存的是指向数据所在的内存单元的地址,虽然都是地址,但是类型是不一样的。 char ch=‘a’; /...

2019-09-06 16:46:33 161 0

原创 枚举(enum)、宏定义(#define)、结构体(struct)的拾遗

1、宏定义 1.1、不带参数的宏定义 #define 标识符 字符串 例如:#define PI 3.1415926 说明: (1)宏名一般习惯用大写字母表示,但并非规定,也可以用小写 (2)使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量 (3)宏定...

2019-09-06 16:45:12 78 0

原创 C:函数指针与指针函数

函数指针:函数名本身代表着函数的地址,因此给函数指针赋值使可以不用加&符号 “加也可以!!!”。 用作函数别名 用指向函数的指针作为函数参数 void func(int);//定义一个函数 void (*pf)(int);//定义一个函数指针 pf=func;//给...

2019-07-31 09:50:24 127 0

原创 C++:引用和指针的区别

每一种编程语言都使用指针。不止C/C++使用指针。 每一种编程语言都使用指针。C++将指针暴露给了用户(程序员),而Java和C#等语言则将指针隐藏起来了。 使用指针的优点和必要性: 指针能够有效的表示数据结构; 能动态分配内存,实现内存的自由管理; 能较方便的使...

2019-07-31 09:48:38 180 0

原创 (ChibiOS )嵌入式操作系统 与 (OSAL)操作系统抽象层

这里主要分享的问题主要是在通讯芯片的设计中遇到的一些 ChibiOS 是一款支持可抢占调度的多任务RTOS。 支持 Mutex 互斥锁、Semaphore 信号量、Mailbox 邮箱、Virtual Timer 定时器、Message 消息(事件机制)。 实现了基于单链表的Heap内存管理...

2019-07-31 09:45:17 326 0

原创 SoC:初步介绍

SoC:将原本不同功能的 IC,整合在一颗芯片中。藉由这个方法,不单可以缩小体积,还可以缩小不同 IC 间的距离,提升芯片的计算速度。SOC称为系统级芯片,也有称片上系统,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。同时它又是一种技术,用以实现从确定系统功...

2019-07-31 09:44:26 1079 0

原创 自容互容的异同比较

触摸屏主要有 电容式、电阻式、红外线式、超声波式,本文主要涉及电容式。电容式的触摸屏不管是划线效果还是触控精度方面都是这几类触摸屏中的最优选择,尤其是手持终端方面的设备,用户体验是目前最好的。 ---------------------------以下针对gonz工作中遇到的问题的总结-...

2019-07-26 11:24:01 1368 0

原创 C:可重入函数 & 线程安全函数

线程安全:简单来说线程安全就是多个线程并发同一段代码时,不会出现不同的结果,我们就可以说该线程是安全的。 线程安全产生的原因:大多是因为对全局变量和静态变量的操作。 常见的线程不安全的函数: (1)不保护共享变量的函数; (2)函数状态随着被调用,状态发生变化的函数; (3)返回指向静态...

2019-07-26 11:10:04 143 0

原创 算法:AI算法的梳理

人工智能(AI)、机器学习(ML)、深度学习(DL)之间的关系 人工智能是什么: 就是类似电影中终结者,像阿尔法狗这类的具有一定的和人类智慧同样本质的一类智能的物体。 人工智能和机器学习的关系: 机器学习是实现人工智能的方法。 机器学习和深度学习的关系: 深度学习是机器学习算法...

2019-07-26 11:04:51 683 0

翻译 ICP IAP ISP 与 JTAG SWD

ISP:In System Programing,在系统编程 ICP:In Circuit Programing,在电路编程 IAP:In applicating Programing,在应用编程 -----------------------------------------------...

2019-07-26 10:57:37 55 0

原创 C语言中 const static extern

1、全局变量、局部变量 局部变量:定义在函数内部的变量,作用域为函数内部。 全局变量:只能定义一次,多次引用。作用域为整个文件。 若同一个源文件,全局变量和局部变量重名是,在局部变量的作用域,全部变量不起作用。 关键词: 全局变量:函数外定义+全局可见+存放在内存的全局数据区+未初始...

2019-07-26 10:54:12 59 0

翻译 Mutex 互斥锁

对于lock,其实它是一种同步机制的统称,即锁机制。通过锁机制实现线程之间的同步,但是锁机制的实现是有很多种。除了“信号量、临界区、互斥锁”等几种外,还有其他比如条件变量等。在其他语言中也有其他锁的机制,比如.net中的monitor,其实monitor是lock的一种实现。 不同语言上对于锁机...

2019-07-26 10:43:21 34 0

翻译 Semaphore 信号量

semaphore(信号量)范围比较广,semaphore可能会有多个属性值。比如常见的生产者和消费者问题,就是多元信号量的一种。生产者可以生产多个元素,消费者可以消费的元素必须小于生产者的生产元素个数。从此也可以看出,semaphore是允许多个线程进入,访问互斥资源。除了多元信号量之外,还存在...

2019-07-26 10:42:21 36 0

翻译 spin_lock 自旋锁

自旋锁 Spin lock的实现是为了保护一段短小的临界区操作代码,保证这个临界区的操作是原子的,从而避免并发的竞争冒险。在Linux内核中,自旋锁通常用于包含内核数据结构的操作,你可以看到在许多内核数据结构中都嵌入有spinlock,这些大部分就是用于保证它自身被操作的原子性,在操作这样的结构体...

2019-07-26 10:41:30 164 0

翻译 边缘计算和云计算的关系

边缘计算实际上属于一种分布式计算,利用靠近数据源的边缘地带来完成的运算程序,而不需要将大量数据上传到云端。边缘计算的运算既可以在大型运算设备内完成,也可以在中小型运算设备、本地端网络内完成。用于边缘运算的设备可以是智能手机这样的移动设备、PC、智能家居等家用终端,也可以是ATM机、摄像头等终端。 ...

2019-07-26 10:38:57 746 0

翻译 初识云计算

客户端将运算任务交给服务器(云端),服务器运算完毕以后再将运算结果交还给客户端,这整个过程便叫做云计算。( 和网络技术发展融合的产物。云计算、物联网、移动互联网被称作未来IT产业的三大趋势。) 云计算(Cloud Computing)是分布式计算(Distributed Computing)、并...

2019-07-26 10:35:09 34 0

翻译 Arm : armlink

Arm的链接工具 Linker Guide PDF 一、链接器概述 Armlinkの功能 链接ARM代码和Thumb®代码。 生成 interworking veneers,以便在需要时在ARM代码和Thumb®代码之间切换。 根据需要生成range extensio...

2019-06-06 18:22:07 335 0

原创 SoC:存储硬件

存储硬件:RAM、ROM、SRAM、DRAM、SSRAM、SDRAM、FLASH、EEPROM、MTP、OTP

2019-05-29 09:27:34 105 0

提示
确定要删除当前文章?
取消 删除