虚拟地址会通过硬件 MMU(内存管理单元)映射到实际的物理地址空间中,建立虚拟地址到物理地址的映射关系后,对虚拟地址的读写操作实际上就是对物理地址的读写操作,MMU 会将物理地址“翻译”为对应的物理地址...Linux 系统下,应用程序运行在一个虚拟地址空间中,所以程序中读写的内存地址对应也是虚拟地址,并不是真正的物理地址,譬如应用程序中读写 0x80800000 这个地址,实际上并不对应于硬件的 0x80800000...针对以上的一些问题,就引入了虚拟地址机制。程序访问存储器所使用的逻辑地址就是虚拟地址,通过逻辑地址映射到真正的物理内存上。...所有应用程序运行在自己的虚拟地址空间中,使得进程的虚拟地址空间和物理地址空间隔离开来,这样做带来了很多的优点: ⚫ 进程与进程、进程与内核相互隔离。...因为每个进程都有自己的映射表,可以让不同进程的虚拟地址空间映射到相同的物理地址空间中。通常,共享内存可用于实现进程间通信。 ⚫ 便于实现内存保护机制。
实际的物理内存程序员是不能直接管理的,在最早期的x86体系结构中。由于实模式,对内存不进行保护,致使病毒蠕虫横飞。出现保护模式以后,提供虚拟地址空间对实际物理内存抽象虚拟,形成一一映射的关系。
要使用python中的串口,可以下载pywin32-224-cp36-cp36m-win_amd64.whl去安装或者pip install去安装。...调试下来,有一点很不爽,读取read()数据的timeout时间最小单位是秒,这对应很频繁的读取使用,很浪费时间。如果不设置这个时间我在有些串口设备上调试发现read一定读满给定的字节数才能返回。...贴一段简单的写读操作,作为一个记录。
上一节内容的学习我们知道了CPU是如何访问内存的,CPU拿到内存后就可以向其它人(kernel的其它模块、内核线程、用户空间进程、等等)提供服务,主要包括: 以虚拟地址(VA)的形式,为应用程序提供远大于物理内存的虚拟地址空间...Linux内核空间虚拟地址分布 ? 在 Kernel Image 下面有 16M 的内核空间用于 DMA 操作。...Linux用户空间虚拟地址分布 ? 用户进程的代码区一般从虚拟地址空间的 0x08048000 开始,这是为了便于检查空指针。...Linux物理地址和虚拟地址的关系 ? Linux 将 4G 的线性地址空间分为2部分,0~3G 为 user space,3G~4G 为 kernel space。...虽然这样存在效率的问题,但是内核毕竟可以正常的访问所有的物理地址空间了。 到这里我们应该知道了 Linux 是如何用虚拟地址来映射物理地址的,最后我们用一张图来总结一下: ?
以往都是在嵌入式设备中经常操作串口,或者使用QT的串口类。在Win32中处理串口也是有办法的,操作文件的打开和读写进行串口的操作。使用ReadFile、WriteFile函数。...串口数据读取过程 串口读取事件分为两个阶段: 第一个阶段:串口执行到ReadFile()函数时,串口还没有开始传输数据,所以串口缓冲区的第一个字节是没有装数据的,这时候总超时起作用,如果在总超时时间内没有进行串口数据的传输...它由所有由malloc,new等人返回的地址组成。每个进程都有自己的虚拟地址空间。虚拟地址的使用在理论上受到程序地址大小的限制:32位程序具有4GB的地址空间; 64位程序有更多。...虚拟内存子系统将您的程序使用的虚拟地址映射到CPU发送到RAM芯片的物理地址。 在任何特定时刻,大部分分配的虚拟地址都是未映射的;因此物理内存使用低于虚拟内存使用。...如果访问已分配但未映射的虚拟地址,操作系统会无形地分配物理内存并将其映射。 如果不访问虚拟地址,操作系统可能会取消映射物理内存。
最近导师给了个GSM模块,需要通过RS232串口发送AT指令来对模块进行控制,于是看了看python的GUI设计和串口部分的资料,自己编写了一个串口发送的小程序,虽然有不少的bug,但是总体上还是能用的...感觉python确实是一个很容易上手的语言,因为我事先都没看过pythonGUI设计和串口的资料,也就只用了一天就完成了这个小程序,感觉主要是python的语句确实很简洁,比方说在串口上,几句话就能实现串口发送和接收了...2) if __name__ == '__main__': print "Main start" app = MyApp() #使用从wx.App继承的子类
查看Linux本机串口: 1、查看串口是否可用 如果需要查看这个串口设备输出: cat ttyUSB0 如果需要对这个设备输入: echo yaoxu > ttyUSB0 常用的调试工具有: minicom...2、查看串口名称使用 ls -l /dev/ttyS* 一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS*,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然的...; 3、查看串口驱动 cat/proc/tty/drivers/serial 4、查看串口设备 dmesg | grep tty* 5、查一下板子上的串口有没有设备 grep tty/proc/devices...PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC; 串口权限问题 临时调试解决 在使用串口进行通信时,经常需要使用指令来赋予用户读写的权限 $ sudo chmod 777 /dev.../ttyUSB0 但这样的权限是一次性的 每次重启或者关闭计算机,插拔USB串口都无效了,炸裂!
大家好,又见面了,我是你们的朋友全栈君。 本人在近期的开发工作中遇到向串口发送设备控制指令的需求,遂对串口编程进行了略微深入的钻研,在此对自己的一些心得和经验进行总结,以供大家参考与交流。...当然如果自己的设备上有串口的话也可以不用创建虚拟串口,只需要将一个串口的数据发送引脚(引脚3,如图 2所示)和另一个串口的数据接收引脚(引脚2)使用一根铜线链接即可实现数据的收发。...如果设备上只有一个串口,要实现串口数据的收发,可以将串口的引脚2和引脚3使用铜线相连接,这样从本串口发送的数据就会通过本串口接收到。...SerialPort类同样代表本地串口,不过其代表的是打开的串口,可以通过该类的实例方法close关闭已经打开的串口,也可以通过该类的实例方法获取串口的输入输出流,实现往串口数据的读写操作。 ...,当有数据到达串口的时候就会触发事件,在事件的响应方法中读取串口接收到的数据。
Linux可执行文件与进程的虚拟地址空间 一个可执行文件被执行的同时也伴随着一个新的进程的创建。...Linux会为这个进程创建一个新的虚拟地址空间,然后会读取可执行文件的文件头,建立虚拟地址空间与可执行文件的映射关系,然后将CPU的指令指针寄存器设置成可执行文件的入口地址,然后CPU就会从这里取指令执行...代码段中存放的是可执行的二进制指令,数据段存放初始化过的变量,BSS段存放未初始化的变量,从装载的角度,把这些段称为segment。 32位的虚拟地址空间 ? 64位的虚拟地址空间 ?...Linux将进程虚拟地址空间中的一个段叫做虚拟内存区域(VMA)。在/proc目录下,可以查看一个进程的虚拟地址空间,通过命令 cat /proc/pid/maps ?...segment映射到进程虚拟地址空间中的一个VMA中。
移植最小系统要做的几件事 串口相关 打印(只是打印调试信息) 串口驱动(可发可收,APP执行printf时可以从串口打印,所以需要驱动) MMU(Memory Management Unit,内存管理单元...)的设置:虚拟地址与物理地址 完善中断子系统 提供系统tick时钟 为串口驱动实现基于中断的读取字符函数 实现存储设备驱动程序 在存储设备上烧录文件系统 3.1 串口相关 与Linux的串口驱动相比...,鸿蒙的串口驱动极大简化了。...对于输入:使用中断,我们只需要提供底层硬件相关的代码。 要注意:使用的是虚拟地址。...示例如下 3.2.2 地址映射 使能MMU后,CPU发出的地址被称为"虚拟地址",它不是直接发送给硬件,而是发给MMU MMU根据页表 进行权限判定 转换为物理地址,发给外设 运行app1时
随着科技的发展,计算机的运用有很大意义上的普及,但是如果计算机出了什么问题,一般人是不清楚的。但是在没有特别严重的问题时,是可以通过计算机自己检测的。...例如串口调试,就是通过计算机的自动检测,来查看计算机的串行端口进行调试设备。那么串口调试助手是做什么的?...image.png 一、串口调试助手的作用 主要作用是搜索串口,对计算机中的端口检测,然后列举出来;也可以设置或者提高波特率;可以设置串口的输出路线的信号,还可以读取串口的输出路线的信号,大概是四个输出路线...二、串口调试助手如何下载 可以去相关的软件网站搜索,可以询问周围对计算机很精通的人,让其推荐一下,然后再直接搜索调试助手的官方网站,进行下载。...串口调试助手可以方便对串口的相关检查和应用。自己操作起来会比较麻烦,建议下载一个调试助手软件,会非常的方便,并且下载也不需要付费,只需要占一点内存,下载之后的使用也很简单,并且正规途径下载,安全放心。
)的设置:虚拟地址与物理地址 完善中断子系统 提供系统tick时钟 为串口驱动实现基于中断的读取字符函数 实现存储设备驱动程序 在存储设备上烧录文件系统 3.1 串口相关 与Linux...的串口驱动相比,鸿蒙的串口驱动极大简化了。...对于输入:使用中断,我们只需要提供底层硬件相关的代码。 要注意:使用的是虚拟地址。...3.2.2 地址映射 使能MMU后,CPU发出的地址被称为"虚拟地址",它不是直接发送给硬件,而是发给MMU MMU根据页表 进行权限判定 转换为物理地址,发给外设 运行app1时,CPU发出的...3.3.2 串口接收数据的中断 使用串口接收数据时,如果使用"查询"方式,低效并且费电。 一般都使用中断方式。
开工第一天,就让自己动手学起来吧,小猿带你一步一步成长为一名合格的嵌入式开发人员,在嵌入式开发过程中,尤其是在硬件平台没有就位的时候,我们需要仿真我们的软件功能,而串口绝对是一个在嵌入式开发中经常会用到的外设...,所以对串口的仿真就显得尤为重要,辣么你会不会呢,速来围观吧 我们以IAR为例来仿真串口通信,在新版IAR的欢迎界面可以看到 ?...在Product explorer里面有许多内容,点击进去就可以找到对串口和定时器的仿真例程,和非常详细的说明文档。在AdvancedDebugging 中有串口仿真的例子和定时器仿真的例子。...点击打开仿真串口,同时可以打开连接文档参考建立自己的仿真工程。 ? 说明文档 ? 工程如下: ? 可以看到通过Terminal I/O串口输出串口的仿真结果。...稍加修改就可以在自己的项目中实现串口仿真。 ? 亲测,非常好用和实用,是您开发的好帮手。更多详细的功能需要你自己去挖掘,这里不在赘述。
一般我们不需要从用户态得到进程虚拟地址对应的物理地址,因为一般来说用户进程是完全不关心物理地址的。 少数应用场景下,用户可能会关心,比如在用户态做DMA的场景(如DPDK之类的)。...还有一些场景,比如想调试剖析每一页的内存占用情况,是否swap出去了等。 从用户态得到虚拟地址对应的物理地址,我们不可能去walk进程的page table,也没有权限。...在/proc/pid/下面有个文件叫pagemap,它会每个page,生成了一个64bit的描述符,来描述虚拟地址这一页对应的物理页帧号或者SWAP里面的便宜,详见文档: linux/Documentation...不同的体系架构的MMU不同,页表格式也不同,但是pagemap这个接口与具体页表的格式无关,可以说都被抽象化了。...下面我们忽略swap的影响(假设关闭了swap或者page一直是pin的状态),从DPDK抄一段虚拟地址转换为物理地址的代码: #define phys_addr_t uint64_t #define
之前学过单片机 对于串口通信比较了解 最近在学习MATLAB 发现它还可以控制串口 于是通过MATLAB 的GUI创建了一个串口通信的小软件 效果如下 如果没有单片机或者其他硬件的话 我们可以直接用软件模拟串口...本人选择了Configure Virtual Serial Port Driver 这个软件 软件网上就有 下一个使用几天就行了 选择两个没有被占用的串口 点击Add pair 会发现左边多出了一对串口...这对串口现在已经连接在了一起 我的是COM1和COM2 现在如果往 COM1发信息 那么COM2就会接收到 之后我通过MATLAB的 uicontrol 函数搭建了 UI界面...并逐步实现了 串口通信 布局代码如下 打开串口以及接收数据 以及动态显示的代码如下 function openserial(h1,h2,h3,h4,h5,h6,h7) global s...发送数据 在 MATLAB中打开相应串口并使能接收 就看到数据的显示了 如果在串口中一直发送数据 同时在MATLAB中点击使能绘图 在Axes框中就会出现 每一时刻接收的 数据的图
在基础实验成功的基础上,对串口的调试方法进行实践。硬件代码顺利完成之后,对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中。...} RCC中打开相应串口 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE); GPIO里面设定相应串口管脚模式 //串口1的管脚初始化 ...3、 NVIC串口中断的应用 a) 目的:利用前面调通的硬件基础,和几个函数的代码,进行串口的中断输入练习。...因为在实际应用中,不使用中断进行的输入是效率非常低的,这种用法很少见,大部分串口的输入都离不开中断。...RCC、GPIO里面打开串口相应的基本时钟、管脚设置 iii.
串口驱动框架的设计思考 1.本文概述 2.简易串口协议设计 3.基于固定缓冲区的设计 4.基于报文的处理解析 5.循环缓冲区的使用 6.基于帧处理的串口框架 7.总结 1.本文概述 串口驱动不简单,在实际工作中...,往往串口驱动框架的设计都是需要考虑的非常清楚的,特别是实际的项目中。...2.简易串口协议设计 简单的串口的使用就是收发数据,当串口数据到来后,通过中断通知,拷贝到一个内存固定数组中,下次协议需要处理的时候,直接从该数组中去取数据。 ?...前面一种是基于串口的帧数据模型,而缓冲区考虑的是串口的字节模型。...7.总结 对于串口框架的设计,是需要好好思考的,设计串口驱动程序时,不要认为串口驱动简单,在做协议时,也不能太过于数据传输的理想化,应该综合考虑连包、断帧、超时、干扰等等因素,这样设计的驱动才会更加的稳定
文章目录 一、Linux 内核中对 " 虚拟地址空间 " 的描述 二、task_struct 结构体源码 一、Linux 内核中对 " 虚拟地址空间 " 的描述 ---- 进程 的 " 虚拟地址空间 "...由 mm_struct 和 vm_area_struct 两个数据结构描述 ; mm_struct 是 “最高层次 " 上描述 ” 整个虚拟地址空间 “ 的结构体 ; 该结构是对 ” 整个 “ ” 用户空间..." 进行描述 ; vm_area_struct 是 " 较高层次 " 上的描述 " 虚拟地址空间 " 的区间 的 ; 每个进程只有 1 个 mm_struct 结构体数据 , 用于描述 整个 "...虚拟地址空间 " ; 则 对应的 " 进程描述符 task_struct " 中 , 有 1 个指针指向 mm_struct 结构体 ; task_struct -> mm_struct -> vm_area_struct...linux-4.12\include\linux\sched.h#483 位置 ; task_struct 中的 mm active_mm 是 描述 " 整个虚拟空间 " mm_struct 类型的结构体
实现效果: Python端运行的时候打开COM3,然后准备从键盘获取数据,并发送,同时接收串口调试助手COM1发送过来的数据 Python端: ? 串口调试助手: ?...串口调试助手使用COM1,能显示Python端发过来的数据,当点击发送的时候,Python端暂时不会显示,因为Python端的读取键盘那个方法是堵塞的,当Python端发送的时候才同时把数据显示出来(如果想一发送就显示...1、安装pyserial(类似于java的库,用于调串口函数) 2、安装VSPD(因为没有硬件,用这个虚拟串口) 1、由于我用的是win7 64位,无法安装pyserial-2.7.win32.exe...,然后左边会显示出来,要删除的话选中COM,点右边下面那个删除(一般是这个串口被卡住了才这么干)。..." #串口 baudRate=9600 #波特率 ser=serial.Serial(serialPort,baudRate,timeout=0.5) print "参数设置:串口=
领取专属 10元无门槛券
手把手带您无忧上云