- 博客(24)
- 收藏
- 关注
原创 FreeRTOS任务切换
任务A切换任务B:对任务A保存现场,堆任务B恢复现场的这个过程就是上下文切换。FreeRTOS任务切换到过程在PendSV中断服务函数里面完成。PendSV中断触发条件:实际是ICSR寄存器bit28位置1触发。将CPU寄存器PUSH到任务块堆栈中,这个过程称保存现场。将任务堆栈POP到CPU寄存器中,这个过程称恢复现场。任务切换3个概念:保存现场、恢复现场、上下文切换。进入分析xTaskIncrementTick()退出分析xTaskIncrementTick()
2024-07-03 19:27:50 191
原创 FreeRTOS开始调度器启动第一个任务分析
vPortSVCHandler只会在调度器开启调用一次进行任务切换,后面任务切换在PendSV进行。
2024-07-03 15:50:13 153
原创 【无标题】
关于prvStartFirstTask()函数设计TCB出栈和汇编将开新一篇进行分析。进入分析vPortSetupTimerInterrupt( void )退出分析vPortSetupTimerInterrupt( void )进入分析xPortStartScheduler()退出分析xPortStartScheduler()
2024-07-03 12:23:59 153
原创 FreeRTOS列表项插入列表vListInsertEnd()
函数用于将待插入列表的列表项(pxNewListItem)插入到列表 pxIndex 指针指向列表项的前面,是一种无序的插入方法。
2024-07-03 01:16:18 201
原创 FreeRTOS静态创建任务分析
define configSUPPORT_STATIC_ALLOCATION 1 设置了静态创建任务。需要重新定义这2个函数,由程序员进行分配任务空间(空闲任务)(定时任务)定义空闲分配空间函数和定时分配空间函数。在调度器里被使用这2个函数。静态创建任务内部分析。
2024-07-01 11:28:56 562
原创 FreeRTOS删除任务内部分析
在RTOS环境中,空闲任务是一个特殊任务,当系统中没有更高优先级的任务可运行时,空闲任务会被调度执行。如果要删除当前任务,就会把任务插入 等待删除列表,接着从调度器创建的空闲任务中的,prvCheckTasksWaitingTermination();进入分析prvCheckTasksWaitingTermination();退出分析prvCheckTasksWaitingTermination();进入分析vTaskDelete();进入分析vTaskDelete();执行的任务要删除其他任务时。
2024-06-30 20:24:16 328
原创 FreeRTOS动态创建分析
进入分析prvInitialiseTaskLists();退出分析prvInitialiseTaskLists();进入分析prvInitialiseNewTask();退出分析prvInitialiseNewTask();保存当前任务上下文寄存器信息,备用任务切换准备。进入分析xTaskCreate();退出分析xTaskCreate();
2024-06-30 18:35:23 234
原创 实现硬件断点调试器11
在单步call里 判断是否继续单步,把DR0硬件断点设置触发,单步触发开关复原false,DBG_CONTINUE表示异常已经处理不往外抛。DR6是状态硬件说明引起断点的原因,DR7是触发硬件控制位。以DR6为例的b0置1为例,先把dr7复原,fegFlag置TF单步标志=1,g_isBPHStep单步触发=true进行下次单步判断。硬件点的实现功能有:(断下,硬件访问,硬件写入)类型 byte,word,dword。单步寄存器位 TF=0 是置触发L0 TF=1 是置G0触发。触发后就会进入单步异常。
2023-06-21 17:06:54 132
原创 选择排序——粘贴使用
void SelectionSort(int A[],int n){ int i,j,l,t; for(i=0;i<n-1;i++) //选择排序法 { k=i; for(j=i+1;j<n;j++) //一趟选择排序 if(A[j]<A[k]) k=j; //升序 if(i!=k) t=A[i],A[i]=A[k],A[k]=t; }}...
2022-05-09 17:22:29 150
原创 折半查找——二分查找——基于有序序列上的查找——递归写法
#include "stdio.h"int Binsearch_2(int A[],int Key,int low,int high){//折半查找——二分查找——基于有序序列上的查找——递归写法 int mid = (low + high) / 2; if (A[mid] == Key)return mid; else if (A[mid] > Key) return Binsearch_2(A, Key, low, mid - 1); else return Binsearch_2(.
2021-09-16 23:34:01 128
原创 震惊!——最自信的排序算法!——快速排序!!!
#include "stdio.h"//快速排序——降序——听名字就是非常自信的排序算法int Partition(int A[], int low, int high){ int pivot = A[low]; while (low < high) { while (low < high&&A[high] >= pivot)--high; A[low] = A[high];//从尾端进行比较,将比pivot键值小的数据移到低端 while (l..
2021-09-15 16:46:29 87
原创 //直接插入排序——哨兵写法——降序
#include "stdio.h"int StraightInsertSort(int R[],int n){ int i, j; for (i = 2; i < n; i++) { R[0] = R[i]; j = i - 1; while (R[0] < R[j]) { R[j + 1] = R[j]; j--; } R[j + 1] = R[0]; } return 0;}void main(){ int n=10; in.
2021-09-13 22:24:06 174
原创 【数据结构】第一章:数据结构概论
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言数据结构是计算机组织数据和存储数据的方式,是指一组相互之间存在一种或多种特定关系的数据的组织方式和在计算机内的存储方式,以及定义在该数据上的一组操作。
2021-08-10 21:28:12 663
原创 【数据库系列】第一章:数据库系统概论
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言重点:是掌握数据库系统的组成、数据库管理系统(DBMS)的功能,数据模型及其用途。提示:以下是本篇文章正文内容,下面案例可供参考一、数据库系统的应
2021-08-10 15:33:50 1143
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人