- 博客(29)
- 收藏
- 关注
原创 stm32项目遇到的一个问题
这个正点原子的例程当时没放在心上,因为之前不用while也能用,这次也是一样,但过了几天突然发现原本正常的程序突然跑不动了,排查了我一天,总算发现问题了。原本代码是能正常跑的,过几天再试一下发现没反应了,连正常的printf都用不了。还有就是当时下了其他正常的RTC配置代码来测试是不是我板子的问题后,stm32项目遇到的一个问题,在此记录一下。后来又看了一下正点原子关于RTC的例程代码。要把RTC时间相关的都注释掉才行。后来慢慢找到这里的初始化。好了,终于可以安心睡觉了。突然第二次烧录报错了,
2024-07-21 02:29:59
159
原创 使用stat、fstat和lseek获取文件长度
在Linux系统中,有多种方法可以获取文件的长度。本文将介绍三种常用的方法:使用、和函数。函数用于获取文件的状态信息。它的原型如下:参数说明:函数成功时返回0,失败时返回-1。示例:2. 使用fstat函数函数用于获取已打开文件的统计信息。它的原型如下:参数说明:函数成功时返回0,失败时返回-1。示例:3. 使用lseek函数函数用于在文件中查找一个新的位置。它的原型如下:参数说明:返回值:总结:在实际应用中,你可以根据需要选择合适的函数。如果你需要操作的是文件路径,那么是一个很好的选择。如
2024-06-23 15:24:46
704
1
原创 readv() 和 writev()
在Linux系统中,处理文件读写时,我们通常会用到read()和write()函数。但是,当我们需要处理的内存分散在多个不同的缓冲区中时,传统的读写函数就显得有些力不从心。这时,我们可以使用readv()和write()函数,这两个函数提供了更加高效的读写方式,它们可以一次性处理多个分散的内存区域。
2024-06-23 13:52:04
554
原创 高级IO操作
在操作系统中,I/O(输入/输出)操作是所有实现的基础。本文将探讨阻塞I/O与非阻塞I/O的区别,以及如何使用有限状态机来实现非阻塞I/O,并介绍数据中继的概念。
2024-06-23 13:22:12
845
原创 CAN总线位同步(三)
为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近,CAN总线对每一个数据位的时长进行了更细的划分,分为同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每个段又由若干个最小时间单位(Tq)构成。如果能以第一个跳变沿为参考,适当延迟半个数据位左右的时间进行第一次数据采样,后续再按照固定的采样间隔进行采样,这样就可以解决采样位置没对齐的问题了。再同步的核心思想是如果已经察觉到采样点偏离的苗头了,就适当缩短或延长一次的采样间隔以弥补时钟误差。
2024-06-14 19:09:55
701
原创 CAN总线帧格式(二)
帧起始,表示后面一段波形为传输的数据位。:标识符,区分功能,同时决定优先级。:远程请求位,区分数据帧和遥控帧。:扩展标志位,区分标准格式和扩展格式。:替代RTR,协议升级时留下的无意义位。:保留位,为后续协议升级留下空间。:数据长度,指示数据段有几个字节。Data:数据段的1~8个字节有效数据。:循环冗余校验,校验数据是否正确。:应答位,判断数据有没有被接收方接收。CRC/ACK界定符:为应答位前后发送方和接收方释放总线留下时间。:帧结束,表示数据位已经传输完毕。
2024-06-14 15:59:41
3530
1
原创 Linux中的EINTR和EAGAIN错误码
EINTR和EAGAIN是Linux系统中常见的错误码,它们反映了系统调用的状态和资源可用性。了解这两个错误码的含义和常见场景,可以帮助我们更好地进行进程间通信和同步,以及正确地处理错误和异常情况。
2024-06-14 01:05:20
717
原创 CAN总线(一)
CAN总线以其独特的优势,如简洁的线缆、高效的传输、强大的抗干扰能力以及完善的错误处理机制,在多个领域内得到了广泛的应用。无论是汽车的多ECU系统,还是工业控制网络,CAN总线都能提供稳定可靠的通讯保障。理解和掌握CAN总线技术,对于嵌入式系统开发者来说,是一门重要的技能。
2024-06-13 16:15:03
3464
原创 cron使用
cron是一个在类Unix系统中使用的定时任务调度程序,它允许用户在固定的时间间隔内执行脚本或命令。cron任务通常用于自动化任务,如数据备份、日志轮转、定时更新等。要在cron中设置任务,你需要编辑crontab文件。crontab文件包含了cron任务的配置,每个用户的crontab文件都位于目录。
2024-06-13 15:08:54
410
原创 实时监测文件内容变化的命令
在Unix和类Unix系统中,有几个非常有用的命令可以帮助我们实时监测文件内容的变化。下面,我将详细介绍这些命令的作用,并提供具体的例子。
2024-06-13 14:59:28
782
原创 关于环境变量的几个函数
环境变量本质上是键值对(KEY = VALUE)的形式,用于存储程序运行时的配置信息。环境变量可以被当前及所有子进程所共享,类似于程序中的全局变量。例如,我们常用到的PWD(Print Working Directory)环境变量,它用于存储用户当前所在的目录路径。当用户切换目录时,PWD的值也会相应地改变。
2024-06-13 01:37:10
727
原创 getopt函数实现命令行选项解析
在编写程序时,我们经常需要处理命令行参数。getopt函数是一个强大的工具,用于解析命令行选项。在本教程中,我们将学习如何使用getopt函数为我们的程序添加灵活的命令行接口。
2024-06-12 00:32:42
387
原创 define与typedef的区别和使用
define和typedef都是C语言预处理指令,用于定义数据类型。#define用于定义宏,进行文本替换,不占用内存空间,但可能不安全。typedef用于为已有的数据类型创建新的名字,占用内存空间,且更安全。在实际编程中,应根据具体需求选择使用#define还是typedef。
2024-06-11 23:50:40
2195
原创 重定向之dup和dup2函数
在UNIX-like系统中,重定向输出到文件是编程中常见的需求。在C语言中,我们可以通过文件描述符来实现这一目标。文件描述符是内核为了高效管理已打开的文件或其他I/O资源(如套接字、管道等),而提供的一个整数值。标准输入、输出和错误输出分别对应文件描述符0、1和2。
2024-06-11 00:59:05
502
原创 进程终止与钩子函数的用途
在操作系统中,进程的终止是一个常见的操作,它可能由多种原因引起,包括正常终止和异常终止。无论是哪种终止方式,进程结束时都需要进行一系列的清理工作,以确保资源的正确释放和状态的妥善处理。本文将介绍进程终止的概念、钩子函数的作用以及如何在程序中使用它们。
2024-06-11 00:10:01
444
原创 了解什么是CGI
CGI是web服务器和程序动态生成数据之间的一个通用接口,就是一个标准服务器和程序按照这个标准就能通信CGI是一个公共网关接口。
2024-06-01 00:52:44
911
原创 嵌入式Linux---cgi实现远程控制led1
1、移植Webserver(Web服务器)到开发板。源代码可以到相关网站下载。(编写测试程序,例:通过cgi实现远程控制(模拟控制,如控制led1灯)。在网页上输入:/cgi-bin/ctl_led?`用于分隔URL的路径和查询字符串。led_no =1 代表led1。修改配置文件boa.conf。要求:1)测试程序源代码。设置启动服务器时寻找。修改Makefile。
2024-06-01 00:11:39
751
原创 STM32F1学习笔记一:点亮LED&&按键控制
为了方便大家判断,我们选择了 DS0 为红色的 LED,DS1 为绿色的 LED。用STM32F103开发板点亮LED0、LED1两个led灯,同时亮 同时灭。按键3 控制 LED0 和 LED1 翻转。(STM32 的 WKUP 引脚),它除了可以用作普通输入按键外,还可。按键2 控制 LED1 亮。的时候,可以设置上下拉电阻,所以我们使用 STM32 的内。按键1控制 LED0亮。机械按键有机械抖动,需要。电阻,但是 STM32 的 IO 作为。用作普通按键输入,分别连接在。用按键控制两个led。
2024-03-31 02:32:55
1059
1
原创 了解uart、I2C、pwm
主要用于在计算机系统之间进行异步通信。异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。起始位之后就是要传输的数据,数据可以是5,6,7,8位,构成一个字符,一般都是8位。偶校验(Even Parity):如果数据为中1的数目是偶数,则校验位为0才能满足1的个数为偶数,如果1的数目是奇数,校验位为1。奇校验(Odd Parity):如果数据位中1的数目是偶数,则校验位为1才能满足1的个数为奇数,如果1的数目是奇数,校验位为0。
2023-11-18 12:10:40
965
1
原创 子函数功能模块和调用
第二种新建一个count.h文件,将函数int square(),int cube()写入,可直接在main.h调用函数。新建一个count.c文件,把定义的函数写进去,然后直接在main.c声明需要引用的函数。调用一个函数前,必须先声明函数的返回值类型和参数类型。将程序划分成若干个功能模块,每个模块完成一个子功能。函数声明也称为函数原型,函数声明时可以省略变量名。例如:如自定义两个不同功能的函数。
2023-11-04 13:16:44
186
1
原创 C语言函数,包括分类、使用和原理。
由程序员自己定义的函数,用于实现特定的功能。程序员需要先定义函数的原型,然后实现函数的具体功能。基本结构:函数类型 函数名(函数参数)代码块;
2023-09-29 11:35:09
379
1
原创 Arduino、STM32 、树莓派初步认识
树莓派使用ARM架构处理器,处理能力较强,可运行复杂的应用和操作系统。2.处理能力:Arduino使用的是Atmel AVR系列单片机,这是基于Harvard结构的RISC处理器,具有低功耗、低成本、易于编程等特点,通常用于小型嵌入式系统。4.通信接口:Arduino开发板具有多种通信接口,例如串口、I2C、SPI等,使其可以与其他设备(如计算机、传感器、执行器等)进行通信。4.外设:STM32微控制器具有丰富的外设,如定时器、ADC、DAC、PWM、GPIO等,能够满足不同应用程序的各种需求。
2023-09-23 01:42:24
1244
1
原创 C语言中数据类型关键字和控制语句的基本使用方法和概念
(2) if语句:if语句用于根据条件执行相应的代码块,只有当条件满足时,才会执行与条件相关的代码。(4) do-while语句:do-while语句与while语句类似,但是先执行代码块再检查条件是否满足,当条件不满足时终止循环。if语句是一种常见的条件语句,用于根据不同条件执行不同的代码。(3) while循环语句:while循环语句会在条件满足的情况下,重复执行一段代码,直到条件不满足为止。(7) continue语句:continue语句用于终止当前循环的剩余代码,直接开始下一次循环的执行。
2023-09-19 21:42:04
272
1
原创 if与for的使用例子——打印1~100的素数
素数(Prime Number)是指只能被1和自身整除,而不能被其他正整数整除的正整数。简单来说,如果一个数除了1和它本身以外不能被其他整数整除,那么它就是素数。
2023-09-15 19:07:42
584
原创 条件语句和循环语句的代表例子
在使用scanf函数输入运算符时,可能会出现缓区的问题。scanf函数在读取字符时会将回车符'\n'留在输入缓冲区中,然后在下一次读取时首先读取到这个回车符,导致无法输入运算符。x : y,先判断条件 b 真假,如果 b 的值为 true ,那么返回表达式 x 的计算结果;否则,计算 y 的值,返回表达式 y 的计算结果。它会先执行“语句块”,然后再判断表达式是否为真,如果为真则继续循环;可以在读取num2后增加一个getchar函数来读取回车符,将其从输入缓冲区中清除,然后再输入运算符。
2023-09-14 14:43:50
358
1
原创 熟悉MCU
它具有小型化、低功耗、丰富的外设接口、实时性和可编程性等特点,广泛应用于家用电器、汽车电子、工业自动化、医疗设备和智能穿戴设备等领域,为嵌入式系统带来更强大的计算和控制能力。CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、DMA、LCD等周边接口都整合在单一芯片上,形成芯片级的计算机。它们能实现数据采集、处理、控制、通信等功能,提高了汽车的性能、安全性和舒适性。MCU芯片在家电产品中广泛应用,例如空调、冰箱、电视、洗衣机、电烤箱等。
2023-09-12 21:35:32
151
原创 物联网:未来连接万物的技术趋势
随着科技的不断进步,物联网(Internet of Things,缩写IoT)作为连接万物的新兴技术,正逐渐改变我们的生活方式和商业模式。
2023-09-12 12:59:29
1372
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人