OV-Watch-2-系统滴答定时器
一、系统滴答定时器介绍【信盈达】- 关于STM32如何使用系统滴答定时器实现精准延时_哔哩哔哩_bilibili
SysTick 是 ARM Cortex-M 处理器内建的一个定时器,通常用于生成定时中断,用于实现操作系统的时间片轮转调度、延时功能或定期的定时任务。SysTick 定时器是一个 24 位递减计数器,通常用来生成周期性的中断,以便进行周期性任务的调度。
SysTick 定时器的工作原理:
24 位计数器:
SysTick 定时器的核心是一个 24 (16,777,216)位的递减计数器。计数器从一个预定值递减到 0。当计数器到达 0 时,会触发一个中断。
计数器可以通过设置其初始值来指定时间间隔。
中断控制:
SysTick 定时器生成的中断可以用来进行定时任务的执行,例如在 RTOS 中,SysTick 用来生成时间片,以进行任务调度。
也可以用于延时函数(如延时 1 毫秒、10 毫秒等),控制时间的流逝。
计时精度:
SysTick 的精度通常取决于系统时钟频率。常见的情况下,系统时钟频率为 72 MHz 或 48 MHz,因此 SysTick 的中断周期可 ...
数据结构-9-二叉树
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394//二叉树的创建与遍历#include <stdio.h>#include <stdlib.h>typedef struct TreeNode //定义二叉树结点的结构体{ char data; struct TreeNode* lchild; struct TreeNode* rchild;}TreeNode;void createTree(TreeNode** T, char* data, int* index) //初始化树{ char ch; ch = data[*index]; ...
数据结构-8-暴力匹配
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798//暴力匹配#include <stdio.h>#include <stdlib.h>typedef struct String //定义字符串结构体{ char* data; int len;} String;String* initString() //初始化字符串 { String* s = (String*)malloc(sizeof(String)); //为字符串开辟动态内存空间 s->data = NULL; ...
数据结构-7-循环队列
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105//循环队列#include <stdio.h>#include <stdlib.h>#define MAXSIZE 5typedef struct Queue { int front; int rear; int data[MAXSIZE];} Queue;Queue* initQueue() { Queue* Q = (Queue*)malloc(sizeof(Queue)); Q->front = Q->rear = 0; return Q;}void print ...
数据结构-6-栈
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384//栈#include <stdio.h>#include <stdlib.h>typedef struct Node //定义栈结点的结构体{ int data; struct Node *next;} Node;Node *initStack() //初始化栈{ Node *L = (Node *)malloc(sizeof(Node)); //为头结点分配动态内存空间 L->data = 0; //data初始化 L->next ...
数据结构-5-队列
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192//队列//往头结点前面入队 ,从头结点后面出队#include <stdio.h>#include <stdlib.h>typedef struct Node //定义队列的结点结构体{ int data; struct Node* next; struct Node* pre;} Node;Node* initQueue() //初始化队列{ Node* Q = (Node*)malloc(sizeof(Node)); //为头结点分配动态内春空间 Q-& ...
数据结构-4-双循环链表
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798//双循环链表#include <stdio.h>#include <stdlib.h>typedef struct Node //定义结点结构体{ int data; struct Node* pre; struct Node* next;}Node;Node* initList() //初始化头结点,创建链表{ Node* L = (Node*)malloc(sizeof(Node)); //为头结点分配动态内存空间 L -> data = ...
数据结构-3-双链表
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111//双链表#include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0typedef struct Node //创建结点结构体{ int data; struct Node* pre; struct Node* next;} Node;Node* initList() //初始化链表{ Node* L = (Nod ...
数据结构-2-单循环链表
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192//单循环链表#include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0 typedef struct Node //定义结点结构体 { int data; //数据 struct Node* next; //结构体指针,指向下一个结点}Node;Node* initList() //初始化结构体,创建头结点 { Node* L = (Node*)malloc(sizeof(Node)); ...
数据结构-1-单链表
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697//单链表#include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0typedef struct Node //定义一个结点的数据结构{ int data; //数据 struct Node* next; //指向下一个结点的指针} Node;Node* initList() //创建链表头{ Node* list = (Node*)malloc(sizeof(Node)); // ...
