C语言基础
文章平均质量分 53
编程让世界美好
余晖消失之前,都不算终点
展开
-
不加volatile关键字,在低优化情况是不是可以认为没影响?
如果没有使用 volatile 关键字,编译器可能会将该变量缓存在寄存器中,并且在后续的访问中直接使用寄存器中的值,而不是从内存中读取最新的值。如果这个计数器变量没有被声明为 volatile,主程序在读取这个计数器时可能会得到错误的值,因为编译器可能会对计数器的读取进行优化,而忽略了中断可能已经修改了这个变量。例如,在控制一个外部设备的状态寄存器时,如果没有使用 volatile,编译器可能会认为多次读取该寄存器的值是相同的,从而进行优化,而实际上硬件可能在任何时候改变该寄存器的值。原创 2024-08-29 10:16:51 · 779 阅读 · 0 评论 -
在.c和.h 文件里定义数组的区别
c 文件在.c文件中,你可以自由地定义数组作为全局或静态变量,它们的作用范围限制在该编译单元内。这意味着即便两个.c文件中有相同名称的数组,它们也会被视为完全不同的变量,从而避免了命名冲突。.h 文件相对而言,头文件(.h)主要用于声明,而非定义。如果在头文件中放置数组的定义,随着该头文件被多个.c文件包含,将会导致同一个数组定义在多个地方出现,这通常会产生重复定义的错误。因此,应避免在头文件中直接定义数组。.c 文件。原创 2024-08-04 19:39:13 · 416 阅读 · 0 评论 -
数据结构——约瑟夫环C语言链表实现
在城市沦陷之后,他和40名死硬的将士在附近的一个洞穴中避难。于是,约瑟夫建议41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。n个人围成一个圆圈,然后从第一个人开始,按:1,2,3,…,m报数,数到m的人出圈,并有出圈者的下一个人重新开始报数,数到m又要出圈,如此类推,直到所有人都出圈,打印出圈的次序,其中n和m为输入数据。通过不断地计算,可以发现每次移除一个人后,剩下的人重新排列成一个新的圆圈,规模减小并且从下一个人开始。原创 2024-07-10 22:01:47 · 980 阅读 · 0 评论 -
ARM Linux C LCD屏 调用write()显示单色出现花屏、条状不消影
int flags ---- 映射后显存的标志,MAP_SHARED表示映射后的显存多个进程都可以访问。- int prot ----- 映射后内存的访问属性,通常为PROT_READ|PROT_WRITE。- void *addr ---- 需要映射的内存中显示的首地址,如果使用NULL,系统自动获取。- size_t length ---- 需要映射的内存大小,显存大小为800*480*4。- void *---- 在应用程序中,得到映射后的显存首地址,通过该地址可以访问显存。原创 2024-07-08 10:47:49 · 762 阅读 · 0 评论 -
C语言中的static关键字
1. 静态局部变量:在函数内部定义的静态局部变量,其生命周期为整个程序运行期间,但只能在该函数内部访问。4. 静态初始化:在声明变量时使用static关键字进行初始化,这种初始化只会在程序开始时执行一次,之后的每次引用都是对同一个变量的引用。3. 静态函数:在函数前加上static关键字,表示该函数的作用域仅限于当前源文件。在一个被调用的函数里面声明的时候,可以让变量不会在每次进入函数的时候都被重新赋值,而是单独开辟一个空间给他。2. 静态全局变量:在函数外部定义的静态全局变量,其作用域仅限于当前源文件。原创 2024-07-08 10:47:13 · 281 阅读 · 0 评论 -
ARM-Linux C LCD绘制调用write()只能写入第一次
在显存中,每个像素点占用4个字节,其中3个字节用于存储RGB值,另一个字节可以不用。因此,一个800x480的液晶屏所需的显存大小为800*480*4=1536000字节。例如,红色为0x00FF0000,绿色为0x0000FF00,蓝色为0x000000FF等。它可以用于对已打开的文件进行读写操作,可以改变文件当前的读写位置。3. 色位:每个像素点由24位数据描述,其中红色占8位,绿色占8位,蓝色占8位。- 调用write()函数将lcd_buf中的数据写入到液晶屏设备文件中。原创 2024-07-08 09:18:59 · 490 阅读 · 0 评论 -
ARM GEC6818 LCD绘图 实心圆 三角形 五角星 任意区域矩形以及旗帜
不同的LCD控制器和ARM芯片可能会有一些细节上的差异,因此具体的实现步骤可能会有所不同。此外,还可以结合相关的图形库或操作系统提供的绘图函数来简化开发过程。绘图函数:实现绘制基本图形的函数,如点、线、矩形、圆等。图像显示:通过调用绘图函数绘制图像,然后将图像数据写入映射的内存地址中,刷新LCD控制器以显示图像。内存映射:将LCD显示区域映射到ARM的内存地址空间中,可以通过ARM的内存映射机制来实现。硬件初始化:初始化LCD控制器和相关引脚,配置时钟、分辨率和颜色深度等。这里采用的是手动绘制+内存映射。原创 2024-07-08 08:54:39 · 549 阅读 · 0 评论 -
C语言的结构体写法
C语言中的结构体是一种用户自定义的数据类型,它可以同时存储多个不同类型的数据。结构体由多个成员变量组成,每个成员变量可以有不同的数据类型。这是C语言中结构体的基本用法,通过结构体,我们可以方便地组织和操作多个不同类型的数据。结构体可以作为函数的参数和返回值,允许将多个相关的数据一并传递或返回。是结构体的成员变量,它们分别表示学生的姓名、年龄和身高。结构体变量的成员变量可以通过成员运算符。表示结构体类型的名称,不同类型的结构体写法。原创 2024-07-06 20:41:11 · 171 阅读 · 0 评论 -
OLED示波器的实现
OLED显示屏具有高对比度、高亮度、广视角和快速响应时间等优点,使得OLED示波器在波形显示方面具有更好的表现。与传统的液晶显示屏相比,OLED显示屏的黑色更加纯正,并且可以显示更细小的细节。OLED示波器通常具有多个通道,可以同时显示多个信号的波形。它还可以通过调整时间、电压和触发等参数,更好地观察和分析信号的特性。OLED示波器是一种使用有机发光二极管(OLED)显示屏来显示波形的仪器。我们移植了OLED示波器后可以用杜邦线接出单片机引脚,可用于查看某个模块的波形等,方便程序调试。原创 2024-07-05 16:16:18 · 367 阅读 · 0 评论 -
一篇说清楚大端和小端
endian”一词来源于十八世纪爱尔兰作家乔纳森·斯威夫特(Jonathan Swift)的小说《格列佛游记》(Gulliver's Travels)。小说中,小人国为水煮蛋该从大的一端(Big-End)剥开还是小的一端(Little-End)剥开而争论,争论的双方分别被称为“大端派”和“小端派”。常见的两种表现形式。大端小端指的是内存中字节存储的顺序,从高往低是大端,从低往高是小端。是由CPU决定的,内存因为CPU而决定大端、小端的展现形式。模块通讯,网络传输,这些都需要我们知道字节的发送顺序。原创 2024-07-04 17:41:08 · 494 阅读 · 0 评论 -
C语言数据结构【串-加密与解密】附源码
97是‘a’的编码数字。原创 2023-07-28 17:12:38 · 760 阅读 · 1 评论 -
基于学生管理系统修改得来的投资小游戏(哈夫曼加密存档)
代码隔太久了,重复存档有bug,太久了我也忘了当时怎么写的不改了。我也不知道为啥用的都是.h文件,太不成熟了,当时刚了解到.h可以自己编写之后,练手的时候就这样写了可能。直接上代码。原创 2024-06-10 21:24:03 · 357 阅读 · 2 评论 -
C语言实现学生管理系统【数组存储】附源码
这是数据结构课的第一份作业。不得不说老师很有自己的教学思路,这个实验如她所说,贯穿了数据结构课,每到一个章节,或是许多次作业都会让我回想起这个我做了五天的实验。此时是我转入计算机专业后的第一份c语言作业,我在第一次认识了结构体。希望看到这个帖子的你也可以对照实验要求和结果,形成自己的实验思路。原创 2023-07-28 16:51:31 · 586 阅读 · 4 评论