本次给大家分享一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。
2024年04月17日
本次给大家分享一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。
2024年04月17日
C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Preprocessor)简写为 CPP。
所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始。下面列出了所有重要的预处理器指令:
2024年04月17日
上一节主要介绍了 Linux内核中的原子操作,在某种程度上避免了多个线程对同一全局变量的竞争问题。要是内核中的其他C语言程序开发中的临界区都能像上一节介绍的原子变量那样简单就好了。
然而事与愿违,在某个C语言项目中,可能某个临界区甚至会跨越多个函数。例如,函数 A 负责从共享数据结构中取出数据,函数 B 负责处理这些数据,函数 C 则负责将这些数据分发。显然,在这个过程中,要保护共享数据结构,仅仅依赖上一节介绍的原子操作是远远不够的,这就需要更为复杂的同步方法——锁。
2024年04月17日
承接内存管理相关概念讲解相关数据结构。主要有
pglist_data定义如下:
2024年04月17日
#include <stdio.h> int main() { for (float y = 1.5f; y > -1.5f; y -= 0.1f) { for (float x = -1.5f; x < 1.5f; x += 0.05f) { float a = x * x + y * y - 1; putchar(a * a * a - x * x * y * y * y <= 0.0f ? '*' : ' '); } putchar('\n'); } }
2024年04月17日
下载流行玩全彩灯带。买来灯带总要检测好坏。从GiHub下载了WS2812库,跑其中的示例代码,闪烁非常快,根本看不清楚。而且,耗电非常厉害。用外接电源供电,Arduino板的稳压电路烫得手不能碰。我们修改了程序,同时只是一个灯亮,从一端跑到另一端,再跑回来。这样,用USB供电也可以运行了。
2024年04月17日
C程序设计有重要的预处理指令,这些指令均以#开头是程序设计的重要部分。
预处理发生在程序在编译前。C预处理器把预处理指令转换成相应的程序段,再编译程序,最后运行结果。
这种预处理方式可简化程序设计环境,提高编程效率。比如,宏定义#define PI 3.1415926,则程序中的PI均表示字符串3.1415926。