每日一练(二十三)

12.16 进程有关的选择题

以下说法正确的是()

A. 多个进程操作同一个文件时,应该要考虑到文件的一致性问题

B. 可通过文件在不同进程间进行数据传递和共享

C. 可以通过全局变量在不同进程间传递数据

D. 一个进程可以访问到所有物理内存空间

答案:AB

分析:这里考察到进程间通信机制,有管道、信号量、共享内存、消息队列、信号、socket套接字等。进程的空间一般是4G,前3GB是虚拟映射的用户空间,是每个进程独有的,还有1GB内核空间,内核访问的用户空间都是虚拟内存。

12.17 IIC、SPI、UART比较

image-20201217075014591

6:UART是通用异步收发传输器

  • 工作原理:UART是一种串行、异步、全双工的通信协议;是将每个二进制位串行传输,异步通信以一个字符作为传输单位,字符中相邻比特位的时间间隔是固定的,但是两个字符之间的时间间隔是不确定的。也就是说两个UART设备通信的时候不需要时钟线(异步通信!!!)
  • 总线:Tx、Rx
  • 数据格式:数据包中包含了:起始位(一个逻辑0低电平)、主体数据(8位或者9位)、校验位、停止位(可由0.5、1、1.5、2个逻辑1表示)、空闲位(空闲是逻辑1),低位在前先传输,高位最后传输
  • 配置参数:波特率、字长、停止位、校验位、模式、硬件流控制
  • 工作流程:数据发送的时候,MCU先将数据放在输出数据缓冲器(SBUF)中,然后数据会通过串行输出移位寄存器逐位发送;接收数据的时候,会把串行输入移位寄存器的流放到输入数据缓冲器(SBUF)中,然后MCU从中读取。
  • SBUF:MCS-51串行口有两个在物理上独立的串行数据缓冲寄存器SBUF, 这两个缓冲寄存器共用一个地址99H,(它们都是字节寻址的寄存器,字节地址均为99H。)这个重叠的地址靠读/写指令加以区别.

7:SPI是串行外设接口,是一种全双工、同步通信、高速的通信接口,特点就是快!!! 可以由一个主设备和多个从设备组成。参考博客:SPI详解

  • 总线:MISO、MOSI、SCK、CS(从使能信号);CS决定了唯一与主机通信的从设备

  • 数据格式:SPI协议层规定了传输过程中的起始信号和停止信号、数据有效性、时钟同步、通讯模式

  • 通讯模式:SPI由四种通讯模式,通过空闲时刻的SCK状态和数据采样的时刻来区分。涉及到时钟极性CPOL和始终相位CPHA,如下:

在这里插入图片描述

  • 工作流程:SCK提供时钟同步信号,根据通信模式的不同,在对应时钟的有效时候MISO、MOSI的高低电平就代表了传输的逻辑1或者0。发送的时候,先将数据写入发送缓冲区,然后通过移位寄存器发送;接收的时候,从移位寄存器读入数据,读到接收缓冲区,然后去读取接收缓冲区中的数据得到接收的数据。

  • 配置参数:单双向模式、主/从机端模式、数据帧长度、时钟极性、时钟相位、分频因子、高位先行/低位先行

8:IIC是一种两线式串行总线,特点是简单和有效,SPI是半双工通信 参考:IIC工作原理-百度文库

  • 总线:与SPI的单主设备不同,IIC是多主设备的总线,IIC没有物理的芯片选择信号线,没有仲裁逻辑电路,只使用两条信号线——serial data(SDA)和serial clock(SCL)
  • 数据格式:数据传输时,SCL为高电平的时候SDA才是有效的,所以SDA的变化就在SCL低电平的时候进行;起始信号是SCL高电平时,SDA下降沿;结束信号是SCL高电平时,SDA上升沿;寻址信号是一个字节构成,高七位为地址位,最低位是方向位
  • 工作流程:主机在发出起始信号之后,随着发出寻址信号(八位,含方向位),然后在设备返回应答信号之后进行写入数据;接收数据时,先发送起始信号,然后是寻址信号,读,返回应答后直接读取数据,读取完毕之后向从设备发送应答信号

在这里插入图片描述

12.18 man 手册

  1. 用户在baishell环境中可以操作的命令或du可执行文zhi件
  2. 系统内核可调用的函数与工具等
  3. 一些常用的函数(function)与函数库(library),大部分为C的函数库(libc)
  4. 设备文件的说明,通常是在/dev下的文件
  5. 配置文件或者是某些文件的格式
  6. 游戏(games)
  7. 惯例与协议等,例如Linux文件系统、网络协议、ASCII code等说明
  8. 系统管理员可用的管理命令
  9. 跟kernel有关的文件

12.19 STM32 启动流程

参考:STM32启动过程详解 启动流程

STM32的启动过程是指从上电开始,从CPU里执行第一条指令开始到进入C程序main()入口之间的部分!!!

启动过程要完成的操作都放在startup_stm32f10x_hd.s汇编启动代码中

启动文件中主要做了以下工作:

  • 初始化堆栈指针SP
  • 初始化程序计数器PC
  • 初始化中断向量表
  • 配置系统时钟
  • 调用C库函数__main初始化用户堆栈
  • 调用main函数

12.20 回调函数使用场景

回调函数就是通过函数指针调用的函数,回调函数经常把函数指针当作参数,将函数指针传入另外一个函数中,在这个另外的函数中会通过这个函数指针调用回调函数。使用回调函数的一个优点就是实现了调用者与被调用者分离,调用者不必关心被调用者(回调函数)具体如何实现,它只要明确自己的需求即可。

C库提供的qsort()快排函数中,就涉及到了回调函数,将比较两个数大小的函数的指针当作参数传入。还有一些场景也用到了回调函数:

  • 图形界面编程中的响应(matlab编写一个上位机程序);或者是UI程序中,当某个鼠标事件触发时回调函数
  • Linux中信号的响应
  • 创建一个线程,线程开始运行时,回调执行注册的函数

在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值