- 博客(18)
- 收藏
- 关注
原创 C++宽字符
在实际的程序中,宽字符常量和类型通常用于处理多语言和国际化的文本数据。宽字符是指在编程中使用的一种字符类型,通常用于表示非ASCII字符或Unicode字符。处理多语言文本:当需要处理包含非ASCII字符的多语言文本时,例如中文、日文、俄文等,宽字符常常是必需的。这些字符可能需要使用Unicode编码表示,而Unicode字符通常需要用多个字节来存储,因此需要使用宽字符类型来处理。当需要处理非ASCII字符、Unicode字符、多语言文本或特殊符号时,通常需要使用宽字符类型。
2024-01-17 17:22:27 639
原创 Linux互斥锁与读写锁
在Linux系统中,可以使用pthread库中的pthread_mutex_t类型来创建和操作互斥锁。下面是一个详细的教程,介绍如何在Linux系统中使用线程互斥锁和读写锁。在Linux系统中,可以使用pthread库中的pthread_rwlock_t类型来创建和操作读写锁。当使用互斥锁时,需要确保在访问共享资源之前先锁定互斥锁,在访问完毕后再解锁互斥锁。函数中,我们创建了一个读取共享资源的线程和一个写入共享资源的线程,并在最后销毁了读写锁。在上面的例程中,我们首先初始化了一个互斥锁,并在。
2023-12-29 16:25:29 424 1
原创 SQlite3学习笔记
函数是SQLite数据库API中的一个重要函数,用于准备SQL语句以供后续执行。它的作用是将SQL语句编译成一个可执行的SQL语句对象,该对象可以被后续的SQLite API函数使用。在编译过程中,SQLite会对SQL语句进行语法分析、语义分析和查询优化,并将其转换为一个字节码程序,以便后续的执行。函数来准备SQL语句,并使用后续的SQLite API函数执行和处理查询结果。这个函数的作用是非常重要的,它可以帮助我们安全地执行SQL语句,并且可以提高执行效率。语句,该语句将所有用户的ID和姓名查询出来。
2023-12-29 11:32:06 341 1
原创 嵌入式执行程序的过程
CPU通过读取flash存储器中的程序内容,并将其复制到内存中,然后设置程序执行环境并转移控制权,来实现将程序从flash加载到内存并执行的操作。2. 复制程序到内存:CPU根据程序入口地址,从flash存储器中读取程序的指令和数据,并将它们复制到内存中的指定位置。1. CPU:程序首先被加载到内存中,然后CPU通过指令集对程序进行解析和执行。4. 转移控制权:一旦程序被复制到内存中并且执行环境设置完成,CPU会将程序计数器设置为程序入口地址,从而转移控制权到程序的起始位置,开始执行程序。
2023-12-25 09:04:42 464
原创 关于stm32点灯不用配置时钟源的问题
在对STM32C8T6进行LED灯开启时,只需要对GPIO口的外设时钟进行使能,而不需要对时钟源进行使能的原因是因为GPIO口的时钟源通常在复位后就已经默认使能了。在STM32微控制器中,GPIO口通常使用的是主时钟(HCLK)作为时钟源,而主时钟在复位后会自动使能,因此不需要额外的操作来使能主时钟。通过配置时钟控制寄存器,可以选择所需的时钟源,并对其进行使能。总之,对GPIO口的外设时钟进行使能是确保GPIO口正常工作的必要步骤,而不需要额外对时钟源进行使能,因为主时钟通常在复位后就已经默认使能了。
2023-12-13 10:57:34 567 1
原创 stm32远程升级
在实际的远程升级过程中,为了确保原有的程序可以被恢复,通常会采用一种称为“安全启动”(Safe Boot)的机制。在进行远程升级时,新程序代码会首先被写入备份程序存储区域,然后在验证新程序代码无误后,通过特定的机制将新程序代码复制到主程序存储区域。如果在复制过程中发生错误,微控制器可以通过特定的启动模式或引导方式,回滚到备份程序存储区域,并继续运行原有的程序。因此,在进行远程升级时,确保微控制器具有安全启动机制是非常重要的,这可以保证即使升级过程中发生错误,原有的程序代码仍然可以被恢复并继续运行。
2023-12-11 16:23:19 387 1
原创 valgrind错误解析与排查
4. **使用调试器**:结合Valgrind的输出信息,可以使用调试器(如GDB)来在出错的位置设置断点,并逐步执行代码,观察变量的值和内存访问情况,以便更清晰地理解问题所在。7. 最后,Valgrind提供了一些错误汇总信息,建议使用`--track-origins=yes`选项来查看未初始化值的来源,也提供了重新运行Valgrind的选项。总的来说,Valgrind的输出结果指出了程序中的内存错误,包括未初始化值的使用和无效的内存读取,帮助开发人员找出并修复这些问题。
2023-12-05 15:46:23 503
原创 shell和终端的关系
终端(Terminal)是指用户与计算机进行交互的设备或程序。在图形界面环境下,终端通常是一个模拟器,用于模拟字符终端的功能。用户可以通过终端输入命令,然后终端会将命令传递给shell进行解释和执行。终端还负责显示shell输出的结果。Shell是一种命令行解释器,用于解释和执行用户输入的命令。它是用户与操作系统内核之间的接口,负责接收用户输入的命令并将其转化为操作系统能够理解的指令。而终端是用户与计算机进行交互的设备或程序,用于输入命令和显示结果。Linux的shell和终端是两个不同的概念。
2023-10-26 15:16:06 325
原创 Ubuntu链接多个文件
假设我们有两个源文件main.c和func.c,以及一个头文件func.h。我们想要将这两个源文件编译链接成一个可执行文件main。如果编译链接成功,将生成可执行文件main。3. 输入make命令,执行Makefile文件中的编译链接规则和指令。1. 创建一个Makefile文件,该文件包含编译链接的规则和指令。文件包括:main.c fun.c fun.h。4. 如果编译链接成功,将生成可执行文件。这将删除所有生成的目标文件和可执行文件。2. 打开终端,进入代码所在的目录。
2023-10-26 14:26:36 58
原创 枚举和结构体实现C语言面向对象编程
在上述代码中,我们使用了枚举类型 `AnimalType` 来表示不同的动物类型,结构体 `Animal` 表示动物对象,其中包含了类型、名字和年龄等属性。然后,我们定义了一个 `Animal_SayHello` 方法,根据动物对象的类型输出不同的问候语。在 `main` 函数中,我们创建了几个不同类型的动物对象,并调用了 `Animal_SayHello` 方法来展示不同动物的问候语。这个例子展示了如何使用枚举和结构体来实现面向对象的编程思想,通过将数据和方法封装在结构体中,并通过指针传递来调用方法。
2023-10-25 11:20:56 35 1
原创 51单片机的定时器中断
接着编写了Timer0_ISR()函数作为定时器0的中断服务程序,在该函数中重新设置定时器的初值,并将LED引脚取反,实现LED灯的亮灭。总结:定时器和中断是单片机中常用的功能模块,通过合理的使用定时器和中断,可以实现定时功能和响应外部事件的需求。4. 主程序中使用定时器和中断:根据需要,在主程序中设置定时器的启动和停止条件,并处理定时器中断的相关操作。4. 主程序中使用定时器和中断:启动定时器,等待定时器中断触发,执行中断服务程序中的函数。- 定时模式:定时器按照设定的时间间隔进行定时,并触发定时中断。
2023-10-16 14:12:06 1181 1
原创 LCD1602显示预设字符和自定义字符
在上面的代码示例中,我们通过调用lcd_send_cmd(LCD_CMD_SET_CGRAM_ADDR)将CGRAM的地址设置为写入模式,然后通过循环将自定义字符的像素数据写入CGRAM。当我们调用lcd_send_data(65)时,实际上是将ASCII码为65的字符'A'的对应编码(即CGROM中的地址)发送给LCD1602。对于自定义字符,LCD1602的内部控制器并不会直接从CGRAM中读取字符的像素点阵。因此,预设字符的显示是由LCD1602的内部控制器完成的,而不是由我们的代码直接控制的。
2023-10-16 13:42:50 198
原创 LCD1602
当数据口的引脚电平为高电平时,表示逻辑上的1,而当引脚电平为低电平时,表示逻辑上的0。在液晶模块中,高电平和低电平有不同的含义,比如高电平表示液晶模块正在执行指令或者处于忙状态,而低电平表示液晶模块处于空闲状态。这段话的意思是将LCD1602的数据口LCD1602_DB的值设置为0xFF,即将数据口的8个引脚的电平都设置为高电平。因此,在读取状态字之前,我们需要将数据口的引脚电平都设置为高电平,以确保读取到的状态字是准确的。在读取状态字之前,我们需要确保数据口处于高电平状态,以避免读取到错误的状态字。
2023-10-15 21:46:50 60 1
转载 马原学习笔记
层级不同是指 浅程度(层次)和深程度(层级) 比如:感觉动物都有,而思维是人脑的活动,只有人才有。感性认识通过感觉器官获得,理性认识形成的关键是大脑思维。2、含义不同 意识是 客观事物在人脑中的反映(含主动形成和被动接受)4、对应的概念不同 意识与物质对应 认识与实践对应。1、体系不同 意识属于唯物论 认识属于认识论。认识是 人脑对客观事物的反映(主动形成)3、层级不同 意识包括 感觉和思维。认识包括 感性认识和理性认识。......
2022-08-16 21:19:04 306
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人