- 博客(24)
- 收藏
- 关注
原创 函数参数传递方式,经典GetMemory问题分析
int a = 0;//全局初始化区,放入.data段char *p1;//全局未初始化区,放入.bss段int main()int b;//栈,栈上空间自动分配,自动回收//栈char *p2;//栈// 123456\0是字面量存储在.rodata段,p3存储在栈上。//全局(静态)初始化区//堆。
2025-03-06 15:19:44
1097
原创 STM32硬件定时器
RTC 模块和时钟配置系统(RCC_BDCR 寄存器)是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置和时间维持不变,只要后备区域供电正常,那么 RTC 将可以一直运行。定时器,即给定LOAD寄存器初始值为999,启动定时器后,999被加载到计数寄存器中,每过1/72*1000*1000秒计数值就会自动减一,当减到-1时(寄存器发生溢出),会重新从LOAD寄存器加载数值,并进行新一轮的递减。,则由比较值来确定。RTC模块使用LSE时钟,而主控使用HSE时钟,RTC模块寄存器的改动响应速度是。
2024-11-23 20:28:41
1075
原创 STM32之I2C协议详解
相比于上一节我们使用SPI驱动LCD显示屏的18MHZ,I2C的时钟速度普遍只有。主机在SCL低电平期间改变SDA信号电平,当SCL发生高电平跳变时,从机采集SDA线上的数据,从而实现主机。,虽然后期也出现了1.0/3.4/5.0MHz的速率标准,仍然比SPI慢。当主机释放SDA后,因为SDA外接上拉电阻,因此SDA是高电平、SCL是低电平。在主机发送完8个数据信号之后,会释放对于SDA的控制权,,SerialCLock line)线,这两条线上都有。,它是一种串行通信总线,使用多主从架构,由。
2024-11-23 14:43:35
884
原创 STM32之SPI详解
那么数据的变化和采样就分别安排在两个不同的边沿,由于数据在产生和到它稳定是需要一定的时间,那么假如我们在第1个边沿信号把数据输出了,从机只能从第 2 个边沿信号去采样这个数据。STM32 要与具有 SPI 接口的器件进行通信,就必须遵循 SPI的通信协议。为了开始通信,总线上的主设备将某个从设备的SS线置为低电平,来选中这个从设备,设备需要使用从设备支持的频率来配置时钟,这个频率最高为几兆赫兹左右。主从机没有数据传输的时候即空闲状态,SCK 线的电平状态,假如空闲状态是高电平,CPOL=1;
2024-11-21 22:28:49
801
原创 STM32串口与DMA详解
但是,我们无法避免的是环境中也存在一系列的电信我们无法排除环境中的电磁干扰,但是可以通过一系列手段来尽量抵消其对信号的影响。传感器、控制芯片等一些设备,如果支持串口通信,可以通过串口向其发送指令,让其实现对应的功能。如果数据帧中 1的数量是偶数,则校验位为1,使得整个数据帧中1的数量变为奇数。如果数据帧中 1的数量是奇数,则校验位为1,使得整个数据帧中 1的数量变为偶数。(发送一个低电平),接收数据的设备B接收到低电平的时候,会做好准备接收数据。的状态,当发送数据的设备A想要发送数据的时候,会把。
2024-11-19 21:36:34
1153
原创 STM32中断详解
stm32f1芯片的PORTx.P0中断序号是23,则在数组的第23个成员内存放的是PORTx.P0的中断服务函数地址中断向量表前16个成员,即中断序号是是被ARM公司设置好固定为某些事件中断的服务函数。举个例子,比如当前配置中断优先级组四,GPIO下降沿中断优先级7,配置中断屏蔽值为5,此时GPIO中断优先级小于5,则GPIO下降沿事件不会触发中断服务。有4个条件会影响中断执行,其中有3个条件是可以通过编程配置的:全局中断开关、外设中断开关、中断屏蔽。软件中断是由软件指令触发的中断。
2024-11-19 20:59:22
961
1
原创 单片机烧录方式、调试接口与仿真器总结
烧录方式1. ICP(In-Circuit Programming):在电路编程ICP更侧重于调试和开发阶段,允许开发者在单片机安装到用户应用板上后,通过仿真器对芯片进行编程和调试。ICP技术利用在线仿真器与单片机之间的JTAG或SWD接口进行通信。一般需要 xx-Link 烧录工具,连接PC和MCU。常用的烧录工具为J-Link、ST-Link、Nu-Link。与之配套的烧录软件为J-Flash、NuMicro_ICP_Programming_Tool、st-link utility。
2024-11-17 22:25:38
1859
原创 FREERTOS快速上手
前缀文件portportable.h或portmacro.htasktask.hconfigpdprojdefs.herrprojdefs.h。
2024-11-17 16:57:31
1752
原创 堆和栈的区别
在堆中,使用malloc()或new关键字来分配内存空间,通过free()或delete关键字来释放内存。变量的生命周期是由其所在的作用域来决定的,一旦离开作用域,变量就会被自动释放。,但是栈的大小是有限的,如果将大量的数据存储在栈中,可能会导致。数据的生命周期可以很长,需要手动释放内存,否则会导致内存泄漏。堆的大小是动态增长的,可以根据需要动态地申请和释放内存空间。栈的大小是固定的,一般在程序运行时就确定了。堆是动态分配的,所以分配和释放内存的速度。栈是静态分配的,所以分配和释放内存的速度。
2024-11-17 13:52:52
246
原创 int main(int argc, char *argv[])的意思
char *argv[]:指针数组,存放指向的字符串参数,数组中每个元素指向一个参数。argv[1]:指向在DOS命令行中执行程序名后的第一个字符串;argv[2]:指向执行程序名后的第二个字符串;int argc:统计命令行中参数的个数。argv[0]:指向程序运行的全路径名;argv[argc]:为NULL;
2024-11-11 22:27:40
229
1
原创 文件的操作
定义文件指针:FILE *fp;文件打开函数:fp=fopen("filename","文件使用方式");//成功返回一个文件类型指针,失败返回空指针NULL文件关闭函数:fclose(fp);//成功返回数值0,否则返回非零值读字符函数:字符变量=fgetc(fp);//成功返回读出的字符,失败或文件结束返回EOF写字符函数:fputc=(ch,fp);//ch可以是字符常量也可以是变量读字符串函数:fgets(字符数组,n,fp,);//从文件中读取n-1个字符,
2022-03-17 16:57:00
201
原创 结构和联合
声明结构的形式1.struct point{ int x; int y;};struct ponit p1,p2;//p1,p2都是point,里面都有x,y的值2.struct{ int x; int y;}p1,p2;//p1,p2都是一种无名结构,里面有x和y3.struct point{ int x; int y;}p1,p2;////p1,p2都是point,里面都有x,y的值定义结构变量: struct point p1
2022-03-06 19:06:00
263
原创 字符串函数
strlen strcmp strcpy strcat strchr strstr运用字符串函数需加上头文件string.hstrlenstrlen(const char*s);返回字符串的长度(不包括结尾的strcmpstrcmp(const char *s1,const char *s2);比较两个字符串,返回:0:s1==s2 1:s1>s2 -1:s1<s2strcpystrcpy(char *restrict dst,const char *re
2022-02-08 21:44:15
393
原创 指针与数组相关总结
指针完整的名字叫指针变量,所以指针的实质就是变量。指针的作用:实现间接访问指针的使用:1.用int *p定义一个指针变量p,因为p是局部变量,所以遵循c语言局部变量的一般规律(定义了局部变量但未初始化,则其值是随机的),所以p变量中存储的值是随机的。2.如果我们此时解引用p,则相当于我们访问了这个随机数字为地址的内存空间。但这个内存空间能否访问未知,故必须先初始化或者赋值。定义同时初始化的格式:int a = 32; int *p = &a; (*靠近变量类型...
2021-12-21 11:22:10
567
原创 c语言关于变量的总结
首先,变量分为 全局变量 和 本地(局部)变量 。两个基础知识生存期:什么时候这个变量出现了,到什么时候这个变量消亡了。作用域:在什么范围内可以访问这个变量(这个变量可以起作用)。全局变量1.在整个程序范围内都有效,即在任何函数内部都能够被使用,是在函数外部定义的变量。注:由于c语言从上而下执行,写在一个函数之后的全局变量并不能被该函数访问。2.具有全局的生存期和作用域。3.没有初始化会得到0值,指针会得到NULL值。(初始化发生在函数之前)。4.如果函数内部存在与全局变
2021-11-28 17:38:14
354
原创 排序法总结
1.冒泡排序(1)比较相邻元素,如果第一个比第二个大,就交换它们的位置。(2)对每组相邻元素都做上述操作,做完一轮后,排在最后的元素就是最大的数。(3)排除最大的数,进行下一轮的操作,找到第二大的数。重复操作......直到排序完成。举例代码:#include<stdio.h>int main(){ int a[10]={10,-3,2,4,-5,7,6,-8,9,1}; int i,j; for(i=0;i<10-1;i++) //最少要排(1
2021-11-24 17:04:22
923
原创 [PTA]7-2 统计单词
输入长度不超过80的英文文本,统计该文本中长度为n的单词总数(单词之间只有一个空格)。输入格式:首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。 每组数据首先输入1个正整数n(1≤n≤50),然后输入1行长度不超过80的英文文本(只含英文字母和空格)。注意:不要忘记在输入一行文本前吸收换行符。输出格式:对于每组测试数据,输出长度为n的单词总数。输入样例:25hello world5acm is a hard game输出样例:20我的代码 :
2021-11-17 17:21:42
2187
4
原创 [PTA]7-2 列出完数
输入一个整数n,要求输出[1,n]范围内的所有完数。完数是一个正整数,该数恰好等于其所有不同真因子之和。例如,6、28是完数,因为6=1+2+3,28=1+2+4+7+14;而24不是完数,因为24≠1+2+3+4+6+8+12=36。输入格式:测试数据有多组,处理到文件尾。每组测试数据输入一个整数n(1≤n≤10000)。输出格式:对于每组测试,首先输出n和一个冒号“:”;然后输出所有不大于n的完数(每个数据之前留一个空格);若[1,n]范围内不存在完数,则输出“NULL”。引号不必输出。
2021-11-11 10:03:21
3845
3
原创 [PTA]求数组中若干连续元素相加和的最大值max
注意:1.参与相加的元素必须在数组中具有连续下标2.单个元素自身属于连续元素相加的特例实现代码:#include<stdio.h>int main(){ int a[]={-1,-2,-1,3,4,5,-4,-2,5,8}; int len=sizeof(a)/sizeof(a[0]); int max1=a[0]; for(int i=0;i<len;i++) { if(a[i]>max1) max1=a[i]; } int b[10
2021-11-11 09:48:53
903
原创 [PTA]7-7 二维数组-矩阵按行赋值
按输出样例给n行n列的矩阵赋值,矩阵每个单元数据都只有1位,用0~9共10个数字按顺序一行一行循环填充矩阵。输入格式:输入整数n(小于10)输出格式:输出n行n列的矩阵,每个数据后一个空格输入样例:6结尾无空行输出样例:0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 结尾无空行实现代码:#include <stdio.h>int m
2021-11-11 09:41:51
2670
原创 [PTA]7-2 删除重复元素
对于给定的数列,要求把其中的重复元素删去再从小到大输出。输入格式:首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据先输入一个整数n(1≤n≤100),再输入n个整数。输出格式:对于每组测试,从小到大输出删除重复元素之后的结果,每两个数据之间留一个空格。输入样例:110 1 2 2 2 3 3 1 5 4 5输出样例:1 2 3 4 5实现代码:#include<stdio.h>int main(){ in...
2021-11-11 09:34:36
4887
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅