第九周工作实录
本周制作YMC25564-02BADYDGL 的OTP1x3测板的AD画图订板学习的是嵌入式刷题包括嵌入式基础对于嵌入式和裸机开发的区别。单片机做系统要用到RTOSRTOS有三大性质实时性、可裁剪性、可靠性。实时性实时操作系统中首要任务是调度一切可利用的资源来完成实时控制任务。可裁剪性RTOS所有机制内存管理、中断处理、任务调度确保最关键的任务能按时执行。可靠性实时操作系统就是系统启动后运行一个后台程序。RTOS本身通常没有像Windows界面那样图形界面为用户直接操作。实时操作系统可以根据应用环境要求内核进行裁剪和重配单片机RAM有限如果项目不需要网络可以把网络协议栈剪掉。RTOSReal Time Operating System实时操作系统在单片机如STM32裸机开发时通常用全局变量和中断标志位解决问题。但一旦引入RTOS如FreeRTOS、uC/OS、RT-Thread系统变成多任务并发环境多个任务可能会同时争夺同一个硬件资源如串口、SPI总线、显示屏这时就必须用到信号量机制。PV信号量机制操作实现进程同步和互斥。1、确定信号量的初始值最大值举个例子两个进程属于互斥资源同一时刻只能被一个进程使用信号量初始值属于系统中该类资源数量信号量S的初始值为2.当没有进程使用的时候S达到最大值2.2、确定信号量的最小值P操作申请资源执行S-1如果S0进程阻塞进入等待队列。V操作释放资源执行S1如果S0唤醒一个进程。极端情况 n个进程想使用这两条线或者说是打印机第一个进程是S2-11.....到S0-1-1S-1-1-2 简单说是从2到0前面只是占了3位所以S在最后-(n-2) P-(N-2) V2 PV-N-2~2 现实中可能就是I2C总线。信号量Semaphore分类二值信号量、计数信号量、互斥量二值信号量取0或1实现互斥锁加任务同步。计数信号量取0~N用来管理多个同类资源。互斥量带有优先级继承机制的特殊二值信号量防止优先级翻转。常见RTOS的API对应书本考试上称PV操作来源于荷兰语Proberen和Verhogen 实际封装成了各种函数。uC/os:OSSemPend()POSSemPost()VFree RTOS:xSemaphore Take()PxSemaphore Give()VRT-Thread:rt_sem_take()Prt_sem_release()V加入一个问题——在中断服务函数ISR中应该是用什么操作释放信号量在Free RTOS中必须带From ISR后缀API 如xSemaphoreGiveFrom ISR且不能带阻塞。中断处理流程硬件自动完成关中断-保存断点-软件处理识别中断源-保存现场和屏蔽字-开中断-执行中断服务程序主体-关中断-恢复现场和屏蔽字-开中断-中断返回恢复断点设置屏蔽字关中断经常出现在开中断前后用来控制中断嵌套和保护现场。中断服务程序ISRARM V8 ERET异常返回IRET X86中断返回。ERET (Exception Return) 是 ARMv8 (AArch64) 架构中用于从异常处理程序返回的核心指令。它的作用远不止是简单的“跳转”而是一次对处理器状态的原子性恢复会同时恢复程序计数器PC和整个处理器状态PSTATE。ERET是一条特殊的系统指令它执行时主要完成两个关键动作恢复 PSTATE处理器状态从当前异常级别的SPSR_ELn(Saved Program Status Register) 寄存器中读取值并恢复到 PSTATE 中。这包括条件标志位、中断屏蔽位、处理器模式等关键信息。跳转到返回地址从当前异常级别的ELR_ELn(Exception Link Register) 寄存器中读取值并将其设置为新的程序计数器PC从而让CPU回到异常发生时的地址或处理程序指定的其他地址继续执行。这两个动作必须是原子的。如果分两步执行无论是先设置 PC 还是先恢复 PSTATE都可能导致 CPU 在错误的状态下执行代码引发混乱。完整的异常返回流程从硬件保存到软件恢复要理解ERET需要将它放在完整的异常处理闭环中来看异常发生硬件自动保存当异常发生时CPU 硬件会自动将当前的 PSTATE 保存到SPSR_ELn并将异常返回地址通常是导致异常的指令或它的下一条保存到ELR_ELn。异常处理软件执行软件如操作系统内核在异常处理程序中执行进行必要的处理。如果处理程序修改了SPSR_ELn或ELR_ELn例如需要返回到不同的地址它会用MSR指令写入新值。异常返回执行ERET异常处理程序结束时执行ERET指令。此时硬件会原子性地从SPSR_ELn和ELR_ELn中读取值并分别恢复 PSTATE 和 PC从而无缝地返回到被中断的上下文。 关键寄存器ELR_ELx 与 SPSR_ELxERET的运作依赖于这对“孪生”系统寄存器ELR_ELx(Exception Link Register)“返回地址保险箱”。它保存了异常返回后要执行的下一条指令的地址。SPSR_ELx(Saved Program Status Register)“处理器状态快照”。它完整保存了异常发生瞬间的 PSTATE包括条件标志位、中断屏蔽位DAIF、处理器模式EL和堆栈指针选择SP等。ERET通过恢复SPSR_ELx也就恢复了处理器的“身份”和“权限”例如从内核态EL1返回到用户态EL0。⚠️ 编程关键点与限制在实际编程中使用ERET需要注意以下几点特权指令ERET是特权指令不能在 EL0用户态执行否则会触发未定义指令异常。非法返回ERET执行时硬件会检查SPSR_ELn中的值是否合法。例如试图返回到一个非法的异常级别或非法的执行状态如 AArch32 与 AArch64 之间的非法切换会触发非法返回事件 (Illegal return event)导致异常。推测执行屏障 (Speculation Barrier)在某些 ARMv8.5 的 CPU 上ERET之后的指令可能会被推测执行。如果这带来了安全风险如侧信道攻击需要在ERET后插入一个推测执行屏障如SB指令来阻止 CPU “偷看”并执行ERET之后的指令。上下文同步ERET本身会带来一次上下文同步确保之前对系统寄存器的修改如通过MSR指令对后续的指令可见。缓存Cache:分为直接映射硬件极简单成本最低冲突率极高全相联映射冲突率极低硬件成本极高速度慢组相联映射完美平衡了直接映射的“低成本”和全相联的“低冲突”。平衡速度与硬件成本。替换算法Cache满了腾位置用LRU最近最少使用FIF0先进先出MESI协议缓存一致性协议MESI 代表一个缓存行的四种状态M (Modified - 已修改)数据在我这被改了跟主存内存不一样了。此时我是独占的别人都没这数据。E (Exclusive - 独占)数据只有我这儿有主存里也有一样的。别人没这数据。S (Shared - 共享)这数据好几个核都有大家都没改它和主存一致。I (Invalid - 无效)被别人改过了我这块缓存作废了不能用了。映射方式决定了 CPU去哪找数据。替换算法决定了 CPU扔掉谁来腾位置。MESI 协议决定了多核之间怎么同步数据防止读到脏数据。LCD背光驱动电路一个led外加一个背光灯使能端接PWMPWM占空比开的时间/开关的时间PWM50%灯半亮。通过数据手册来使电阻分压公式VoutVin[R2/(R1R2)]来看MCU ADC的量程。BUCK降压利用二极管单向导电性 串一个MOS管和一个电感并电感和负载公式VoutVinx占空比Boost升压电源电感LED并电感和负载 开关正常放公式VoutVin(1-占空比)。对光耦参数选型问题看单片机引脚驱动选IF正向电流。接收信号类型选线性/非线性 CTR输出与输入电流成比例接耐压选VISO隔离电压对于恒流驱动PWM调光 主用功率驱动。