![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式编程基础
文章平均质量分 83
yeasang
这个作者很懒,什么都没留下…
展开
-
STM32三种BOOT启动模式详解
STM32转载 2022-09-20 16:30:39 · 8303 阅读 · 0 评论 -
进程资源和进程状态 TASK_RUNNING TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE
摘要:本文主要介绍进程资源和进程状态.进程资源由两部分组成:内核空间进程资源以及用户空间进程资源.进程状态,就绪/执行状态、等待状态(能够被中断打断)、等待状态(不能够被中断打断)、停止状态和僵死状态.1.进程资源进程是Linux系统下资源管理的基本单位。每一个进程都有自己的独立的执行空间.为了更好的管理Linux所訪问的资源。系统引入了进程控制(PCB)的概念。PCB结构体.进程资源由两部分组成:内核空间进程资源以及用户空间进程资源.内核空间进程资源:指的就是PCB相关信息.包含进程控制块本身、打转载 2020-06-03 10:30:13 · 1183 阅读 · 0 评论 -
用户栈和内核栈
操作系统中,每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈。(通过中断或系统调用进入内核态)内核栈是内存中属于操作系统空间的一块区域,其主要用途为:1)保存中断现场,对于嵌套中断,被中断程序的现场信息依次压入系统栈,中断返回时逆序弹出;2)保存操作系统子程序间相互调用的参数、返回值、返回点以及子程..原创 2020-06-01 12:12:04 · 1374 阅读 · 2 评论 -
多核多线程自旋锁spinlock 与互斥量mutex性能分析
多核多线程 自旋锁(spinlock )与 互斥量(mutex)mutex方式:(sleep-wait)从实现原理上来讲,Mutex属于sleep-waiting类型的锁。例如在一个双核的机器上有两个线程(线程A和线程B),它们分别运行在Core0和Core1上。假设线程A想要通过pthread_mutex_lock操作去得到一个1653临界区的锁,而此时这个锁正被线版程B所持有,那么线程A就会被阻塞(blocking),Core0 会在此时进行上下文切换(Context Switch)将线程A置于等待转载 2020-05-31 09:51:03 · 2996 阅读 · 0 评论 -
死锁面试题(什么是死锁,产生死锁的原因及必要条件)
什么是死锁?所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。 因此我们举个例子来描述,如果此时有一个线程A,按照先锁a再获得锁b的的顺序获得锁,而在此同时又有另外一个线程B,按照先锁b再锁a的顺序获得锁。如下图所示:产生死锁的原因?可归结为如下两点:a. 竞争资源系统中的资源可以分为两类:可剥夺资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺,CPU和主存均属于可剥夺性资源;另一类资源是不可剥夺资转载 2020-05-30 14:27:45 · 864 阅读 · 0 评论 -
Linux的中断可以嵌套吗?
问答问:Linux的中断可以嵌套吗?答:以前是可以嵌套的,现在不可以!历史早前的Linux内核版本,中断分为两种:快中断,申请的时候带IRQF_DISABLED标记,在IRQ HANDLER里面不允许新的中断进来;慢中断,申请的时候不带IRQF_DISABLED标记,在IRQ HANDLER里面允许新的其他中断嵌套进来。老的Linux内核中,如果一个中断服务程序不想被别的中断打断,我们能看到这样的代码:request_irq(FLOPPY_IRQ, floppy_interrupt,\转载 2020-05-29 13:21:08 · 630 阅读 · 0 评论 -
在SRAM、FLASH中调试代码的配置方法(附详细步骤)
链接: https://www.cnblogs.com/zhengnian/p/11715696.html原创 2020-04-13 23:04:36 · 191 阅读 · 0 评论 -
什么是STM32的ISP?
上一篇笔记分享了STM32的串口IAP实例:STM32串口IAP分享。其中,下载IAP程序时用ISP的方式进行下载。这里的ISP又是什么呢?ISP方式下载程序原理ISP:In System Programing,在系统中编程在STM32F10xxx里有三种启动方式:以ISP方式下载程序时需要把STM32的BOOT0引脚置1、BOOT1引脚置0,即从系统存储区(System Memory)...转载 2020-04-13 22:46:17 · 1970 阅读 · 2 评论 -
看完就清楚了STM32的ISP升级是怎么回事
小弟此番头一回写博客,心里还是小小激动的~其实使用CSDN有一年样子了,每每看到大家发布的高水平博文都不禁心生敬佩!现在小弟也加入CSDN博客的大家庭,水平有限,望各位看官海涵呐! 好啦,不说闲话进入正题......我是分割线哦*最近在做一个给STM32用ISP升级的项目,接触到STM32厂家烧录的Bootloader工作流程,具体官方文档稍后上传供大家参考,也可去ST官网下载文档。接下...转载 2020-04-13 12:37:03 · 557 阅读 · 0 评论 -
STM32_IAP详解(有代码,有上位机)
Iap,全名为in applacation programming,即在应用编程,与之相对应的叫做isp,in system programming,在系统编程,两者的不同是isp需要依靠烧写器在单片机复位离线的情况下编程,需要人工的干预,而iap则是用户自己的程序在运行过程中对User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级...转载 2020-04-13 12:27:49 · 10196 阅读 · 4 评论 -
STM32从Flash地址0x08000000的启动重映射
在初写STM32程序时,遇到一个困惑,STM32的Flash在MDK里被设置为起始地址0x0800 0000,而CM3手册规定芯片复位时要从0x0000 0000地址开始取出中断向量 ,那STM32怎么样执行代码呢?地址重映射?或者在0x0000 0000里有对应有实际存储器?仔细阅读手册,发现这件事是因为STM32设计的Flash起始地址是在0x0800 0000位置开始的。全部代码都只能从这...转载 2020-04-13 12:07:18 · 2015 阅读 · 0 评论 -
关于存储器映射、存储器重映射、内存映射、地址映射、地址转换等计算机专业名词详解
计算机技术源于西方,而西方乃至当今世界最通用的语言是英语,所以很多专业名词也都是英语词汇,而中国人想要跟上时代学习计算机、使用计算机就势必要向西方人学习、学习英语、学习英语技术资料、翻译英语技术资料,可是经过学习、翻译后的结果就是很多英文专业名词被翻译成不同的中文意思在不同的资料、教材上出现(如Memory Map,被翻译成存储器映射、内存映射、地址映射等等),造成大家在看这些资料、教材的时候不知...转载 2020-04-13 01:27:21 · 2758 阅读 · 0 评论 -
【Git】rebase 用法小结
rebase在git中是一个非常有魅力的命令,使用得当会极大提高自己的工作效率;相反,如果乱用,会给团队中其他人带来麻烦。它的作用简要概括为:可以对某一段线性提交历史进行编辑、删除、复制、粘贴;因此,合理使用rebase命令可以使我们的提交历史干净、简洁!前提:不要通过rebase对任何已经提交到公共仓库中的commit进行修改(你自己一个人玩的分支除外)1.合并多个commit为一个完整com...转载 2019-10-12 23:40:34 · 307 阅读 · 1 评论 -
汇编指令-MRS(读)和MSR(写)指令操作CPSR寄存器和SPSR寄存器使用(1)
1.MSR和MRS指令介绍MRS 指令: 对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以获得当前处理器的工作状态。读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有SPSR寄存器)。MSR指令: 对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FI...转载 2019-05-04 23:47:22 · 1282 阅读 · 0 评论 -
汇编指令-位置无关码(BL)与绝对位置码(LDR)(2)
位置无关码即该段代码无论放在内存的哪个地址,都能正确运行。究其原因,是因为代码里没有使用绝对地址,都是相对地址。位置相关码即它的地址与代码处于的位置相关,是绝对地址BL :带链接分支跳转指令,也是位置无关码(相对位置),用于调用函数用的。B:分支跳转指令,指目标不能太远,一般用于同一个文件下的目标地址跳转。LDR:通常都是作加载指令的,但是它也可以作伪指令,通常有两种不同的表示:1)...转载 2019-05-05 00:24:18 · 2729 阅读 · 0 评论 -
运行地址、链接地址、加载地址、存储地址
首先上一张图:转自 http://blog.csdn.net/ouyang_linux007/article/details/7448505程序从片内地址0开始,但为什么链接地址又设0x30000000,那不就从0x30000000开始了,反汇编可以看到不是从0开始的?韦老大回答:裸板程序烧在FLASH上 一上电,肯定从0地址运行但是,0地址要么对应NOR FLASH,要么对应只有4K...转载 2019-05-11 20:28:27 · 2236 阅读 · 0 评论 -
SPI通信协议
1、什么是SPI?SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。2、SPI优点支持全双工通信通信简单数据传输速率块3、缺点没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。4、特点1):高速、同...原创 2019-05-26 10:22:43 · 754 阅读 · 0 评论 -
同步通信和异步通信
一、同步通信和异步通信串行通信可以分为两种类型,一种叫同步通信,另一种叫异步通信。同步通信方式(比如SPI),是把许多字符组成一个信息组,这样,字符可以一个接一个地传输,但是,在每组信息(通常称为信息帧)的开始要加上同步字符,在没有信息要传输时,要填上空字符,因为同步传输不允许有间隙。同步方式下,发送方除了发送数据,还要传输同步时钟信号,信息传输的双方用同一个时钟信号确定传输过程中每1位的位置...原创 2019-05-30 16:48:06 · 19160 阅读 · 1 评论 -
同步和异步
老实说,玩电脑也玩了好几年了;印象中看到"同步和异步"关键字的次数已经记不清了,总感觉自己知道点什么,但却又说不出来什么东西,这是为啥?—— 因为没有深入理解,没有总结;也应了那句古话:纸上学来终觉浅,绝知此事要躬行。 不卖关子了,开始进入正题。”同步“就好比:你去外地上学(人生地不熟),突然生活费不够了;此时你决定打电话回家,通知家里转生活费过来,可是当你拨出电话时,对方一直处于待接听状态(...转载 2019-05-30 16:59:03 · 131 阅读 · 0 评论 -
局部变量,全局变量,static局部变量,static全局变量,extern全局变量, volatile, const
There are many topics in the C language that often confuse developers but the use of the static keyword seems to be one of the more common. One of the points of confusion is how static affects variabl...原创 2019-06-12 14:28:36 · 495 阅读 · 0 评论 -
浅说OSI,TCP/UDP面向连接,面向无连接的区别
TCP是面向连接的UDP是面向无连接的就是这种关系了TCP(Transmission Control Protocol,传输控制协议)UDP(User Datagram Protocol,用户数据包协议)当IP包通过路由将数据传输到目的地时,会根据TCP或UDP包头中的源端口和目的端口信息,请求和获取不同的应用。也就是说,不管TCP还是UDP,都含有网络服务必须的源端口和目的端口信息,以...原创 2019-06-18 09:50:04 · 913 阅读 · 0 评论 -
总结内存(RAM或ROM)和FLASH存储的真正区别
本文主要向大家介绍了内存(RAM或ROM)和FLASH存储的真正区别,通过具体的分析,让大家能够了解它们,希望对大家学习内存(RAM或ROM)和FLASH存储有所帮助。1.什么是内存什么是内存呢?在计算机的组成结构中,有一个很重要的部分,就是存储器。存储器是用来存储程序和数据的部件,对于计算机来说,有了存储器,才有记忆功能,才能保证正常工作。存储器的种类很多,按其用途可分为主存储器和辅助存储器...转载 2019-07-04 11:31:41 · 18455 阅读 · 0 评论 -
ROM与RAM 单片机上电后是如何一步步执行的
ROM:(Read Only Memory)程序存储器在单片机中用来存储程序数据及常量数据或变量数据,凡是c文件及h文件中所有代码、全局变量、局部变量、’const’限定符定义的常量数据、startup.asm文件中的代码(类似ARM中的bootloader或者X86中的BIOS,一些低端的单片机是没有这个的)通通都存储在ROM中。RAM:(Random Access Memory)随机访问存...转载 2019-07-04 11:49:31 · 1780 阅读 · 0 评论 -
arm-linux-gcc选项
1.可执行文件生成过程:pre-processing, compilation, assembly, linking;2.预处理pre-processing:使用arm-linux-cpp工具将要include的头文件插入原文件,宏定义展开,根据条件编译指令选择要使用的代码,最后生成一个“.i”文件;3.编译compilation:使用cc1(不是arm-linux-cc1)将“.i”文件...原创 2019-05-04 18:31:44 · 274 阅读 · 0 评论