ESP32上的FreeRTOS学习(2)
ESP32上的FreeRTOS学习(2)绝对延时相对延时:每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间结束。绝对延时:每隔指定的时间,执行一次调用vTaskDelayUntil()函数的任务。区别:个人理解,假如一个任务执行完成需要1ms,每10ms要执行一次。使用相对延时的话,就是延时10ms再加上执行任务的1ms,整个过程需要11ms,如果有其他更高优先级的任务,时间还需要更多;而对于绝对延时,这个1ms的任务是在10ms内完成的。
12345678910void TimingTask(void* param){ const TickType_t task_frequency = 2000; TickType_t last_wake_time = xTaskGetTickCount(); // 自动更新 while(1) { Serial.println(last_wake_time); vTaskDelayUntil(&last_wake_time,task_frequ ...
结构体--字节对齐/位域
结构体–字节对齐/位域字节对齐字节对齐规则结构体如下所示:
12345typedef struct A { char a; int b; short c;};
按理来说,char占用1个字节,int占用4个字节,short占用2个字节,因此总共占用7个字节。但实际上,运行下列代码:
123456789int main(){ A x; printf("%d \n",sizeof(x.a)); printf("%d \n", sizeof(x.b)); printf("%d \n", sizeof(x.c)); printf("%d \n", sizeof(x)); return 0;}
得到:字节对齐需满足以下规则:
结构体变量的首地址能够被其最宽基本类型成员的大小所整除。
结构体每个成员相对结构体首地址的偏移量(offset)都是自身有效对齐字节数的整数倍。
结构体内变量的自身有效对齐字节数为自身对齐字节数与系统对齐字节数的较小者;结构体的大小为 ...
图像处理-阈值分割
图像处理-阈值分割
排序算法
排序算法冒泡排序思路两两元素相比,前一个比后一个大就交换,直到将最大的元素交换到末尾位置。这是第一趟。一共进行n-1趟这样的交换将可以把所有的元素排好。
代码123456789101112131415void BubbleSort(int *arry,int num) // 小到大{ for (int i = 0; i < num-1; i++) { for (int j = 0; j < num-1; j++) { if (*(arry + j) > *(arry + j + 1)) { int temp = *(arry + j); *(arry + j) = *(arry + j + 1); *(arry + j + 1) = temp; } } }}
特性总结
时间复杂度:O(N^2)
空间复杂度:O(1)
稳定性:稳定
插入排序思路把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个 ...
函数传递动态内存
函数传递动态内存问题1234567891011void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char) * num);}int main(){ char* str = NULL; GetMemory(str, 10); return 0;}
运行时报错 str 为 NULL。函数中的参数p是复制原有指针的值,而不是原来的指针,所以即使p重新指向新的地址,但原来的指针指向的地址仍然不变。
解决应该采用二级指针。传递str的地址给函数。
1234567891011void GetMemory(char **p, int num){ *p = (char *)malloc(sizeof(char) * num);}int main(){ char* str = NULL; GetMemory(&str, 10); return 0;}
或者可以改成用函数返回值来传递动态内存。
...
面试题-网络编程
网络编程网络分层为什么分层?计算机网络是个非常复杂的系统,相互通信的两个计算机必须高度协调工作,但是这种协调是很复杂的。分层可以将庞大复杂的问题,转化成若干个较小的局部问题,这些局部的较小的问题就比较易于研究和处理。
优缺点优点:
各层之间是独立的,不用关心其他层次的内容;
灵活性好,任何一层发生变化不影响上下层;
架构上可分割开,各层可用最好的技术实现;
易于实现和维护,仅需维护独立的子系统;
能促进标准化的工作,每层的功能,提供的服务有了精确的说明。
缺点:
降低效率;
有些功能会在不同的层次中反复出现,因而产生了额外的开销。
计算机网络分层OSI 的七层协议体系结构的概念清楚,理论也较完整,但它既复杂⼜不实⽤。TCP/IP 是四层体系结构:应⽤层、运输层、⽹际层和⽹络接⼝层。但最下⾯的⽹络接⼝层并没有具体内容。所谓的五层协议的网络体系结构其实是为了方便学习计算机网络原理而采用的,综合了OSI七层模型和TCP/IP的四层模型而得到的五层模型。五层协议体系结构:
应用层:通过应⽤进程间的交互来完成特定⽹络应⽤;例如 DNS、HTTP、SMTP。
运输层: ...
面试题-进程&线程
进程与线程进程概念进程就是正在运行的程序,它会占用对应的内存区域,由CPU进行执行和运算。
特点
独立性进程是系统中独立存在的实体,它可以拥有自己独立的资源,每个进程都拥有自己私有的地址空间,在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其他进程的地址空间。
动态性进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合,程序加入了时间的概念以后,称为进程,具有自己的生命周期和各种不同的状态,这些概念都是程序所不具备的。
并发性多个进程可以在单个处理器CPU上并发执行,多个进程之间不会互相影响。
线程概念线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以开启多个线程,其中有一个主线程来调用本进程中的其他线程。进程的切换,切换的也是不同进程的主线程。
区别根本区别: 进程是操作系统资源分配的基本单位,线程是处理器任务调度和执行的基本单位。资源开销: 每个进程都有独立的代码和数据空间,进程之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的 ...
面试题-C语言(持续更新)
面试题-C语言快速求幂123456789101112131415int fast_pow(int a,int b){ int result = 1; int base = a; while (b != 0) { if (b % 2) // 指数为奇数 { result *= base; } base *= base; b /= 2; } return result;}
常见位运算123456789101112131.将x最右边的n位清零: x&(~0 << n)2.获取x的第n位值(0或者1): (x>>n)&13.获取x的第n位的幂值: x&(1<<(n-1))4.仅将第n位置为1: x|(1<<n)5.仅将第n位置为0: x&(~(1<<n))6.将x最高位至第n位(含)清零: ...
面试题-单片机(持续更新)
面试题-单片机GPIO工作模式VCC、VDD、VSS等区别
VCC:C=circuit 表示电路的意思, 即接入电路的电压;
VDD:D=device 表示器件的意思, 即器件内部的工作电压;
VSS:S=series 表示公共连接的意思,通常指电路公共接地端电压。
VEE:负电压供电;场效应管的源极(S)
VPP:编程/擦除电压。
推挽结构和推挽电路推挽结构一般是指两个参数相同的三极管或MOS管分别受两互补信号的控制,总是在一个三极管或MOS管导通的时候另一个截止。高低电平由输出电平决定。推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务。电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。
开漏输出和推挽输出的区别开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极。适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。推挽输出 ...
中断
中断概念在CPU执行程序的过程中,出现了某种紧急或异常的事件(中断请求),CPU需暂停正在执行的程序,转去处理该事件(执行中断服务程序),并在处理完毕后返回断点处继续执行被暂停的程序,这一过程称为中断。断点处是指返回主程序时执行的第一条指令的地址。
过程中断处理分为如下几个步骤:中断请求,中断响应,保护断点,处理中断,中断返回。
中断请求:当某一中断源需要CPU为其进行中断服务时,就输出中断请求信号,使中断控制系统的中断请求触发器置位,向CPU请求中断。中断请求可由硬件中断源发出,也可由软件中断源发出。
中断响应:CPU对系统内部中断源提出的中断请求必须响应,而且自动取得中断服务子程序的入口地址,执行中断服务子程序。对于外部中断,CPU在执行当前指令的最后一个时钟周期去查询INTR引脚,若查询到中断请求信号有效,同时在系统开中断(即IF=1)的情况下,CPU向发出中断请求的外设回送一个低电平有效的中断应答信号,作为对中断请求INTR的应答,系统自动进入中断响应周期。
保护断点:主程序和中断服务子程序都要使用CPU内部寄存器等资源,为使中断处理程序不破坏主程序中寄存器 ...