自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 C语言中,__attribute__关键字

这些信息可以用于编译器优化、代码检查或其他目的。3. __attribute__((format(printf, fmt, args))):用于指定一个函数的参数格式,以便编译器进行类型检查。4. __attribute__((unused)):表示一个变量、函数或类型可能未被使用,但不应产生警告。5. __attribute__((packed)):表示一个结构体的成员应该紧密排列,不进行内存对齐。1. __attribute__((const)):表示一个变量的值在初始化后不能被修改。

2024-04-19 16:41:58 352

原创 函数指针的简单使用

在上面的示例中,我们首先使用`typedef`关键字定义了一个名为`xxx`的函数指针类型,该类型表示一个返回值为`void`、接受两个参数均为`void`类型的函数。然后,我们定义了一个名为`myFunction`的函数,它的返回值和参数类型与`xxx`类型匹配。在`main`函数中,我们将`myFunction`的地址赋给了名为`funcPtr`的函数指针变量,并通过`funcPtr()`来调用该函数。具体来说,这个函数指针类型表示一个返回值为`void`、接受两个参数均为`void`类型的函数。

2024-03-29 15:48:33 188

原创 各个操作系统rtos,unix,rt-thread中各自优先级顺序排列

1. **FreeRTOS**: 在FreeRTOS中,每个任务都有一个优先级,这个优先级是一个非负整数。2. **Unix**: 与FreeRTOS不同,Unix系统中的进程优先级设置是数值越小,进程的优先级越高。3. **RT-thread**: 在RT-thread操作系统中,任务的优先级设置也是数值越小,任务的优先级越高。**在FreeRTOS中,任务优先级的数值越大,任务的优先级越高**;而在Unix和RT-thread中,**优先级数值越小,表示任务或进程的优先级越高**。

2024-03-22 11:27:28 119

原创 freeRTOS任务间的通信方式有哪些

2. **信号量**:信号量主要用于同步某个任务与单个事件或任务。5. **任务通知**:任务通知具有32位的消息通知值,可以减少RAM的使用,并且运行效率较高。1. **消息队列**:这是一种用于在任务与任务之间、中断与任务之间传递信息的数据结构。4. **事件标志组**:事件标志组主要用于一个任务与多个事件的同步,或者一个任务与多个任务之间的同步。3. **互斥锁**:互斥锁是一种特殊类型的信号量,它保证在任何给定时间只有一个任务可以执行特定的代码段或访问特定的资源。

2024-03-15 14:57:13 520

原创 :% s/\r//g 去掉^M,删除远程分支git branch -d <branch_name>

其中`origin`是你的远程仓库的别名,`<branch_name>`是你要删除的分支的名称。删除远程分支命令:git push origin --delete <branch_name>其中`<branch_name>`是你要删除的分支的名称。这个命令会删除本地分支。才会将^M取消代替。

2024-03-12 16:00:45 442

原创 查看二进制内容命令

hexdump -C data.bin

2024-02-05 12:48:26 381

原创 简单的图像裁剪函数

/申请一个二位数组。

2024-01-25 17:04:35 396

原创 multiply defined导致编译不过

这可能是由于两个不同的源文件(sensor_spi_common.o 和 libgsl.o)都包含了对 "SensorReadMemory" 的定义。B\如果确认只在一个sensor_spi_common.c中定义了,在另一个libgsl.c中没有定义,那么请确认下在libgsl.c中是Include了sensor_spi_common.c文件,如果include之后,就会在编译的时候,编译了两次,导致出现defined了两次。

2024-01-18 17:16:21 427

原创 将12位图像数据转化为8位输出

int data;return -1;for (i = 0;i++)#if 1for (i = 0;i++)n++;eff += 8;elseelsen++;eff = 8;#endifreturn 1;

2024-01-17 18:04:46 378

原创 动态库和静态库有什么区别?对应的makefile中如何调用?

在这个示例中,我们使用了`-L`选项来指定库文件所在的目录,然后使用`-l`选项来链接库文件。注意,静态库需要使用`.a`扩展名,而动态库需要使用`.so`扩展名。这将生成一个名为`main`的可执行文件,以及两个库文件`mylib.a`和`mylib_shared.so`。在Makefile文件中调用静态库和动态库,你需要使用`-l`选项来链接库文件。1. 假设你有一个名为`mylib`的静态库和一个名为`mylib_shared`的动态库。动态库和静态库的主要区别在于它们的存储位置和链接方式。

2024-01-16 14:27:17 418 1

原创 简单makefile运用clang编译工具和ar压缩工具生成.a文件

PATH = .../toolchains/clang/bin/ #clang工具路径。AR := $(PATH)llvm-ar#clang自带的ar工具。OUTLIB := libSILFP.a#生成目标文件。

2024-01-16 14:12:49 402 1

原创 C语言 #ifdef和#ifndef 主要差别

defined B /* A与 B未被定义,则选择执行printf1,否则执行printf2 */#if defined A || defined B /* A或 B被定义,则选择执行printf1,否则执行printf2 */#if defined 和 #if!defined 能跟多个宏组合逻辑。#ifdef 和 #ifndef 仅能跟一个宏定义参数。

2024-01-02 11:25:04 366 1

原创 git pull和git fetch的差别

**git pull**:与git fetch不同,git pull在执行过程中,不仅会拉取远程仓库的最新提交记录到本地,还会尝试自动将这些更新合并到你正在工作的分支。但是需要注意的是,如果在合并前没有进行仔细的检查,可能会遇到冲突的情况。- **git fetch**:此命令的作用是拉取远程仓库的最新提交记录到本地,但它并不会自动合并这些更新到你正在工作的分支。这就意味着你可以查看远程仓库的更新,但在决定是否要合并这些更新到你本地的分支之前,你有充足的时间来进行仔细的检查。

2023-12-29 13:39:38 312 1

原创 如何在Keil5添加新的project targets

2. 在左侧的项目管理器中,右键单击“Source Group 1”,选择“Add New Item to Group 'Source Group 1'”。注意:如果需要添加的是外部库文件,则需要先将其添加到工程中。具体方法为:右键单击“Dependencies”文件夹,选择“Manage”,在弹出的对话框中选择“Search”,找到需要添加的库文件并添加即可。3. 在弹出的对话框中,选择要添加的文件类型(如 C 文件、头文件等),输入文件名和保存路径,然后点击“Add”按钮。

2023-12-29 11:28:06 576 1

原创 过滤git log中的内容

git log --grep="关键词"将"关键词"替换为你想要过滤的关键字。

2023-12-26 12:38:48 442 1

原创 makefile和ar命令压缩文件 各自有什么区别

1. Makefile是一个自动化构建工具,主要用于编译、链接和打包程序。而ar命令是GNU二进制工具包(GNU Binutils)中的一个成员,主要用于创建、修改、提取归档文件。2. Makefile可以管理多个源文件、头文件和库文件,以及它们的依赖关系。而ar命令主要用于处理静态库和归档文件,如.a和.tar.gz等。4. Makefile可以与其他构建工具(如CMake、Autotools等)结合使用,以实现更复杂的构建过程。# 编译源文件并生成目标文件(.o)# 创建一个静态库(.a)

2023-12-20 18:22:01 435 1

原创 如何用python语言将一个文件中的注释去掉

在Python中,注释是用来解释代码的,它不会被程序执行。注释有两种形式:单行注释和多行注释。单行注释以井号(#)开头,多行注释用三个单引号(''')或三个双引号(""")包围。要将一个文件中的注释去掉,我们可以使用Python的文件操作和字符串处理功能。- 使用正则表达式匹配并删除注释。# 匹配并删除单行注释。# 匹配并删除多行注释。- 将处理后的内容写回文件。# 调用函数,传入文件路径。- 打开文件并读取内容。

2023-12-20 18:16:56 363 1

原创 如何用C语言编写一个最简单的链表程序

在这个程序中,我们首先定义了一个结构体`Node`来表示链表的节点。然后,我们定义了三个函数:`createNode`用于创建新的节点,`appendNode`用于在链表的末尾添加新的节点,`printList`用于打印链表的所有元素。链表是一种数据结构,其中的元素通过指针链接在一起。以下是一个简单的C语言链表程序,它创建了一个链表,添加了一些元素,然后打印出链表中的所有元素。在`main`函数中,我们创建了一个空的链表,然后添加了三个元素,并打印出了链表的所有元素。// 在链表末尾添加新节点。

2023-12-20 17:15:47 374 1

原创 通信协议中用c语言计算checksum(8位数据、16位数据、32位数据)

在这个示例中,我们定义了三个函数来计算8位、16位和32位数据的checksum。这些函数都接受一个指向数据的指针和一个表示数据长度的整数作为参数。它通常用于确保数据在传输过程中没有被篡改。计算checksum的方法有很多种,其中一种常见的方法是使用异或运算符(^)。在main函数中,我们创建了三个数组来存储不同类型的数据,并调用相应的checksum函数来计算它们的checksum。// 计算16位数据的checksum。// 计算32位数据的checksum。// 计算8位数据的checksum。

2023-12-20 10:00:26 862 1

原创 makefile和ar命令压缩文件 各自简单的区别

1. Makefile是一个自动化构建工具,主要用于编译、链接和打包程序。而ar命令是GNU二进制工具包(GNU Binutils)中的一个成员,主要用于创建、修改、提取归档文件。2. Makefile可以管理多个源文件、头文件和库文件,以及它们的依赖关系。而ar命令主要用于处理静态库和归档文件,如.a和.tar.gz等。4. Makefile可以与其他构建工具(如CMake、Autotools等)结合使用,以实现更复杂的构建过程。# 编译源文件并生成目标文件(.o)# 创建一个静态库(.a)

2023-12-19 22:37:47 483 1

原创 如何在linux环境下查看AR路径

在Linux环境下,AR(Archiver)是一个用于创建静态库的工具。要查看AR路径,可以使用`which`命令来查找AR的可执行文件路径。- 确保已经安装了AR工具。如果没有安装,可以使用包管理器(如apt或yum)进行安装。- 在某些系统中,可能需要使用`sudo`来获取管理员权限才能找到AR路径。这将输出AR可执行文件的路径,例如:`/usr/bin/ar`。

2023-12-19 22:36:58 356 1

原创 快速上手freeRTOS需要那几步?

例如,如果你使用的是Keil MDK,你可以在项目设置中找到“C/C++”选项卡,然后在“包含路径”中添加FreeRTOS头文件的路径。1. 下载并安装FreeRTOS:首先,你需要从FreeRTOS官方网站(https://www.freertos.org/)下载最新版本的FreeRTOS。6. 使用资源:在你的任务代码中,可以使用`xSemaphoreTake()`和`xSemaphoreGive()`函数来获取和释放信号量。// 在这里编写你的任务代码。// 在这里编写你的任务代码。

2023-12-18 18:52:46 376

原创 linux 环境如何在远程git仓中创建分支

请将上述示例代码中的 `https://github.com/username/repository.git`、`new_branch` 和 `origin/master` 替换为实际的远程仓库地址、新分支名称和远程分支名称。git checkout -b <新分支名称> origin/<远程分支名称>git remote add origin <远程仓库地址>git clone <远程仓库地址># 创建一个新的分支并切换到该分支。# 获取远程仓库的所有分支信息。# 克隆远程仓库到本地。

2023-12-18 18:23:18 414

原创 linux环境如何给每个新的用户进行分区

7. 最后,更新`/etc/fstab`文件以使新分区在系统启动时自动挂载。2. 使用`fdisk`命令对磁盘进行分区。1. 首先,确保你已经安装了`fdisk`工具。- 输入分区结束扇区(例如,输入`+1G`表示从起始扇区开始,直到可用空间用完)。3. 在`fdisk`命令行界面中,按照提示进行操作。- 输入分区号(例如,输入`1`表示第一个分区)。- 选择分区类型(例如,输入`p`表示主分区)。- 输入分区起始扇区(例如,输入`2048`)。- 输入`w`保存更改并退出。- 输入`n`创建新分区。

2023-12-18 18:18:26 352

原创 linux服务器中如何创建用户且给每个用户进行分配密码

在Linux服务器中创建用户并分配密码,可以使用`useradd`命令和`passwd`命令。1. 使用`useradd`命令创建用户。2. 使用`passwd`命令为新用户分配密码。按照提示输入新用户的密码,然后再次输入以确认。# 为新用户分配密码。

2023-12-18 18:08:07 439

原创 linux中临时设定环境变量和永久设定环境变量

在Linux中,环境变量是存储在操作系统中的一组键值对,它们可以用来存储系统和应用程序的配置信息。环境变量可以在启动进程时设置,也可以在运行时修改。# 永久设置环境变量到 ~/.bash_profile 文件。# 永久设置环境变量到 ~/.bashrc 文件。- 保存并关闭文件。- 保存并关闭文件。# 临时设置环境变量。

2023-12-18 18:02:35 465

原创 FreeRTOS的内存分配方式

静态内存池是一种预先分配一定数量的内存块,并在程序运行期间重复使用的内存管理策略。FreeRTOS提供了`xStaticMemoryPoolCreate()`和`xStaticMemoryPoolAlloc()`等函数来创建和使用静态内存池。FreeRTOS提供了`xTaskCreate()`函数来创建任务,并通过`configMINIMAL_STACK_SIZE`配置项设置任务堆栈的大小。这个函数会在堆上分配指定大小的内存块,并返回指向该内存块的指针。// 使用内存...// 使用内存...

2023-12-18 17:55:29 592

原创 内存踩踏问题解决方法

std::cout << "ptr1 指向的对象数量:" << weakPtr1.use_count() << std::endl;std::cout << "ptr2 指向的对象数量:" << weakPtr2.use_count() << std::endl;std::cout << "ptr1 指向的对象数量:" << weakPtr1.use_count() << std::endl;预先分配一定数量的内存块,当需要使用时从内存池中获取,使用完毕后归还给内存池。# ... 使用内存 ...

2023-12-18 17:48:27 1192

原创 FreeRTOS相关API函数预览

void vTaskSuspend(TaskHandle_t xTaskToSuspend)挂起一个任务,此函数用于将某个任务设置为挂起状态,进入挂起状态的,任务都不会进入运行状态。xTaskCreate() 使用动态的方法创建一个任务【所需RAM会自动从对RTOS中的堆中分配,需要heap_4.c,configSUPPORT_DYNAMIC_ALLOCATION需要等于1】vTaskResume(TaskHandle_t xTaskToresume[要恢复的任务句柄])恢复一个任务的运行。

2023-12-15 17:30:56 343

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除