自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

鱼藏剑

思考记录共享

  • 博客(80)
  • 收藏
  • 关注

原创 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 Owner; //因为是在非EmbOS 中使用,这里的Owner代指调用Mutex的函数。 P_GetMutex GetMutex; P_FreeMutex FreeMutex;} MU...

2020-05-20 11:39:57 126

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

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

2020-03-09 13:36:54 213

原创 ARM:ELF bin Hex axf

前言:PC平台流行的可执行文件格式(Executable File Format),主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable and Linking Format,可执行和链接格式)。他们都是COFF(Common Object File Format)的变种。ARM架构采用的也是ELF文件格式。COFF是在Un...

2020-03-09 13:25:06 247

原创 2020 02 10 艰难开工

今天是2020年 迎着疫情开工的第一天。上一次遇到这样的事情还是中学时代,印象里只记得假期一直再延长,天气都暖和了。那时候什么也不懂,无知无畏。现在开始变得惜命了,有好多事没做,有好多人或物都还没来得及见,总担心中间有任何的意外打断。庚子年真多事之秋。往大了国家崛起 民族复兴的千秋大业遇到了波折;往小了说,涉及到个人以及背后的家庭,都被裹挟进了莫名的恐惧和不安中。但愿春暖花...

2020-02-10 12:52:12 140 1

原创 ARM:MPU & MMU & SMMU

1、MPU (Memory Protection Unit);2、MMU(Memory Management Unit)。MMU是比MPU提供了功能更强大的内存保护机制,MPU只提供了内存区域保护,而MMU是在此基础上提供了虚拟地址映射技术,而且在操作上,MMU要比MPU负责。3、SMMU本质上就是一个MMU设备,它的内存转换逻辑与CPU的MMU采用相同的逻辑,都允许将物理上非连续的页...

2020-01-22 19:09:31 2752

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

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

2020-01-16 17:21:35 1317

原创 ARM : APCS规则

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

2020-01-15 20:06:25 701

原创 ARM:NVIC & VIC & GIC & SCB

ARM体系结构支持以下操作模式: 用户 模式 : 在执行完CPU启动代码文件Startup.s后正常的程序执行状态。 系统 模式 : 运行一些操作系统核。 IRQ (中断) 模式 : 通用的中断处理模式。 FIQ (快速中断) 模式 : 快速中断,处理一些特殊的中断源。 管理 模式 : 进入保护状态的执行;通常在复位或使用SWI指令时进入此模式。 ...

2020-01-15 20:01:54 1348

原创 ARM : ELF文件

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

2020-01-15 19:51:32 136

原创 MDK 使用 malloc free

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

2020-01-13 20:47:04 290

原创 MDK printf 、scanf 实现

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

2020-01-13 20:26:58 533

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

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

2020-01-13 15:20:46 122

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

cpu在执行程序时,如果有外部中断触发时,如定时器中断、串行总线中断等,cpu停止当前任务从而转去响应中断处理。对于中断函数的处理,原则是尽快处理完事务并退出中断,这一点也比较好理解,尽快处理中断并返回,保证正常任务的执行,并且能否响应其他事务的中断,保证实时性和并发性。  其实,在单片机逻辑编程中已经使用过Linux中断“上下部分”的思维,或者说,Linux中断“上下半部”设计者灵感即源自...

2020-01-13 15:12:04 226

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

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

2020-01-13 15:05:47 81

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

普通进程即前台进程:是在终端中运行的命令,那么该终端就为进程的控制终端,一旦这个终端关闭,这个进程也随之消失。后台进程后台程序并未完全脱离终端(在终端未关闭前还是会往终端输出结果)---[ 守护进程已经完全脱离终端控制台]。后台运行只是终端进行了一次fork,让程序在后台执行,其会话组和当前目录,文件描述符都没改变。后台程序会随用户退出而停止,需要在以nohup co...

2020-01-13 15:01:59 99

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

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

2020-01-13 14:58:54 666

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

程序布局(进程的物理实体)https://www.cnblogs.com/grandyang/p/4968604.htmlhttps://www.cnblogs.com/fengyv/p/3789252.html一个程序本质上都是由 BSS 段、data段、text段三个组成的。BSS段:在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的...

2019-09-06 16:53:54 75

原创 SoC:通信总线

REF:https://blog.csdn.net/linton1/article/details/79649249 https://blog.csdn.net/ivy_reny/article/details/56274412AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定: AHB (Advanced High-performance...

2019-09-06 16:52:40 894

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

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

2019-09-06 16:50:32 86

原创 C :位域实现与对齐

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

2019-09-06 16:49:23 231

原创 C:变量与初始化

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

2019-09-06 16:48:38 410

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

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

2019-09-06 16:47:11 897

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

REF :https://blog.csdn.net/daiyutage/article/details/8604720二级指针保存的是一级指针的地址,它的类型是指针变量,而一级指针保存的是指向数据所在的内存单元的地址,虽然都是地址,但是类型是不一样的。char ch=‘a’; //定义一个字符变量-单引号,变量名为ch,并进行初始化。char str[]=“abc...

2019-09-06 16:46:33 432

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

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

2019-09-06 16:45:12 662

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

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

2019-07-31 09:50:24 154

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

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

2019-07-31 09:48:38 237

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

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

2019-07-31 09:45:17 948

原创 SoC:初步介绍

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

2019-07-31 09:44:26 3903

原创 自容互容的异同比较

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

2019-07-26 11:24:01 5810

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

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

2019-07-26 11:10:04 645 1

原创 算法:AI算法的梳理

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

2019-07-26 11:04:51 887

翻译 ICP IAP ISP 与 JTAG SWD

ISP:In System Programing,在系统编程ICP:In Circuit Programing,在电路编程IAP:In applicating Programing,在应用编程-----------------------------------------------------------------------ISP与IAP:ISP的实现相对要简单一些...

2019-07-26 10:57:37 125

原创 C语言中 const static extern

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

2019-07-26 10:54:12 240

翻译 Mutex 互斥锁

对于lock,其实它是一种同步机制的统称,即锁机制。通过锁机制实现线程之间的同步,但是锁机制的实现是有很多种。除了“信号量、临界区、互斥锁”等几种外,还有其他比如条件变量等。在其他语言中也有其他锁的机制,比如.net中的monitor,其实monitor是lock的一种实现。不同语言上对于锁机制的实现就可能有些许差别。虽然有时候说的是一种锁,但是其底层的具体实现机制就有可能是临界区或者信号量机...

2019-07-26 10:43:21 74

翻译 Semaphore 信号量

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

2019-07-26 10:42:21 78

翻译 spin_lock 自旋锁

自旋锁 Spin lock的实现是为了保护一段短小的临界区操作代码,保证这个临界区的操作是原子的,从而避免并发的竞争冒险。在Linux内核中,自旋锁通常用于包含内核数据结构的操作,你可以看到在许多内核数据结构中都嵌入有spinlock,这些大部分就是用于保证它自身被操作的原子性,在操作这样的结构体时都经历这样的过程:上锁->操作->解锁。如果内核控制路径发现自旋锁“开着”(可以获...

2019-07-26 10:41:30 358

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

边缘计算实际上属于一种分布式计算,利用靠近数据源的边缘地带来完成的运算程序,而不需要将大量数据上传到云端。边缘计算的运算既可以在大型运算设备内完成,也可以在中小型运算设备、本地端网络内完成。用于边缘运算的设备可以是智能手机这样的移动设备、PC、智能家居等家用终端,也可以是ATM机、摄像头等终端。关于边缘计算的应用现状和场景在Microsoft Build 2017开发者大会上,微软首席执行...

2019-07-26 10:38:57 2968

翻译 初识云计算

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

2019-07-26 10:35:09 134

翻译 Arm : armlink

Arm的链接工具Linker Guide PDF一、链接器概述Armlinkの功能 链接ARM代码和Thumb®代码。 生成 interworking veneers,以便在需要时在ARM代码和Thumb®代码之间切换。 根据需要生成range extension veneers,以扩展分支指令的范围。 根据所链接对象的构建属性,自动选择要链接的适当标...

2019-06-06 18:22:07 1058

原创 SoC:存储硬件

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

2019-05-29 09:27:34 233

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

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