参考:STC89C52手册 摘自手册: 中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。当中央处理器CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服务的时候,这就存在CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级。CPU总是先响应优...

  tQizuuVPIcab   25天前   33   0   0 嵌入式

用两个IO口扫描6个按键,原理图与扫描程序。 先贴上原理图:以下为思路: 将两个IO口配置为上拉输出(STM32中)或者初始化输出高电平、 1、首先:IO1,IO2输出高电平。 S1按下,电流方向由R1流向GND,此时IO1为低电平。 S2按下,电流方向由R2流向GND,此时IO2为低电平。 S3按下,电流从两个电阻共同流向了GND,所以此时IO1,IO2都是低电平。 如果不是S1、S2、S3其中的按键按下,就需要翻转一下IO口电平做进一步判断了。2、IO1输出低电平,读IO2电平此时前3个按键按下的情况已经被排除,所以只会是后三个S4,S5,S6某个按键按下的情况。此时还需要分两种情况: ...

  tQizuuVPIcab   27天前   32   0   0 嵌入式

在进行FreeRTOS任务切换的介绍前,我们先来了解一下SVC和PendSV。 SVC和PendSV SVC(系统服务调用,亦简称系统调用)和PendSV(可悬起系统调用),它们多用于在操作系统之上的软件开发中。SVC用于产生系统函数调用的请求。操作系统不让用户直接访问硬件,而是通过提供一些系统服务函数,用户程序通过使用SVC发出对系统服务函数的调用请求,以系统服务函数间接的去访问硬件。因此当用户程序想要控制特定的硬件时,它就会产生一个SVC异常,然后操作系统提供的SVC异常服务例程得到执行,它再调用相关的操作系统函数,由它来完成用户程序请求的服务。 PendSV(可悬起的系统调用),它和SV...

  tQizuuVPIcab   2024年08月10日   39   0   0 嵌入式

目录 vTaskStartScheduler()函数 xPortStartScheduler()函数 prvStartFirstTask()函数 vPortSVCHandler()函数 FreeRTOS的任务开始运行的前提是调用了启动调度器函数vTaskStartScheduler(),只有调用了该函数任务才会被调度并运行。下面以FreeRTOSv9.0.0版本的源码进行分析FreeRTOS任务调度的启动流程。 vTaskStartScheduler()函数 voidvTaskStartScheduler(void) { BaseType_txReturn; /静态方法创...

  tQizuuVPIcab   2024年08月09日   55   0   0 嵌入式

目录 函数vTaskDelete() 函数prvDeleteTCB() 总结 函数vTaskDelete() 此函数用于删除已被创建的任务,被删除的任务将从就绪态任务列表、阻塞态任务列表、挂起态任务列表和事件列表中移除,要注意的是,空闲任务会负责释放被删除任务中由系统分配的内存,但是由用户在任务删除前申请的内存,则需要由用户在任务被删除前提前释放,否则将导致内存泄露。若使用此函数,需要在FreeRTOSConfig.h文件中将宏INCLUDE_vTaskDelete配置为1。 使用vTaskDelete函数删除任务时,如果参数给的是NULL,代表删除的是任务本身,任务的任务...

  tQizuuVPIcab   2024年08月08日   49   0   0 嵌入式

目录 函数vTaskSuspend() 函数vTaskSwitchContext() 函数vTaskResume() 函数xTaskResumeFromISR() 以下FreeRTOS源码函数使用的版本是9.0.0,不同版本的源码会有部分不同如10.4.6,注意甑别。 挂起和恢复任务相关API函数有以下几个: 函数vTaskSuspend() 此函数用于挂起任务,若使用此函数,需要在FreeRTOSConfig.h文件中将宏INCLUDE_vTaskSuspend配置为1。无论优先级如何,被挂起的任务都将不再被执行,直到任务被恢复。此函数不支持嵌套,不论使用此函数重复挂...

  tQizuuVPIcab   2024年08月08日   48   0   0 嵌入式

目录 prvIdleTask()函数 prvCheckTasksWaitingTermination()函数 prvGetExpectedIdleTime()函数 以下源码为FreeRTOSv9.0.0版本,不同版本源码可能会有所区别,但实现的逻辑差不多。 需要空闲任务的原因:处理器总是需要代码来执行——所以至少要有一个任务处于运行态。为了保证这一点,当调用vTaskStartScheduler()时,调度器会自动创建一个空闲任务。 空闲任务主要用于处理待删除任务列表和低功耗,它拥有最低优先级(优先级0)以保证其不会妨碍具有更高优先级的应用任务进入运行态——当然,没有任何限...

  tQizuuVPIcab   2024年08月08日   41   0   0 嵌入式

目录 中断优先级分组 三个系统中断优先级配置寄存器 SHPR1 SHPR2 SHPR3 三个中断屏蔽寄存器 PRIMASK FAULTMASK BASEPRI 中断优先级分组 ARMCortex-M内核的MCU具有一个用于中断管理的嵌套向量中断控制器(NVIC,全称:Nestedvectoredinterruptcontroller)。ARMCortex-M的NVIC最大可支持256个中断源,其中包括16个系统中断和240个外部中断,然而芯片厂商一般情况下都用不完这些资源。以下为Cortex-M3的异常类型表: ARMCortex-M使用NVIC对不同优先级的中断进行...

  tQizuuVPIcab   2024年08月07日   42   0   0 嵌入式

目录 函数xTaskCreate() 函数prvInitialiseNewTask() 函数pxPortInitialiseStack() 函数prvAddNewTaskToReadyList() 总结 函数xTaskCreate() 此函数用于使用动态的方式创建任务,任务的任务控制块以及任务的栈空间所需的内存,均由FreeRTOS从FreeRTOS管理的堆中分配,若使用此函数,需要在FreeRTOSConfig.h文件中将宏configSUPPORT_DYNAMIC_ALLOCATION配置为1。此函数创建的任务会立刻进入就绪态,由任务调度器调度运行。函数原型如下所示...

  tQizuuVPIcab   2024年08月07日   32   0   0 嵌入式

目录 GPIO简介 GPIO主要特性 GPIO功能描述 I/O端口位的基本结构 以下是基于 STM32F4xx中文参考手册进一步的手册内容分析,作为自身学习过程的记录。如您是初学者并且对手册描述的内容感到一知半解,您可以参考以下部分内容并结合您自身的见解加深对相关内容的理解。若是大佬们看到内容有误导方向的,欢迎大佬指出!在避免误导他人的前提下自身也在学习进步,谢谢!! GPIO简介 GPIO(GeneralPurposeInput/Output)外设是微控制器中最基本且最通用的接口,用于与外部设备进行交互。GPIO引脚的核心功能是作为通用的数字输入或输出,可以通过软件配置为...

  tQizuuVPIcab   2024年08月07日   59   0   0 嵌入式
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~