随笔分类 -  C

摘要:1. 添加自定义配置 新建 shell_user_cfg.h ,加入自己的配置选项。 #ifndef __SHELL_USER_CFG_H__ #define __SHELL_USER_CFG_H__ #include <stdlib.h> #define SHELL_USING_COMPANION 阅读全文
posted @ 2023-07-24 18:41 duapple 阅读(139) 评论(0) 推荐(0) 编辑
摘要:hexview 命令行操作使用说明 命令行操作基础格式 hexview.exe infile [option] -o outfile 提取部分内容 hexview.exe app.hex /AR:0X200000-0X303404 /s /XI -o app1.hex /AR:指定提取的范围。(也可 阅读全文
posted @ 2023-06-07 15:24 duapple 阅读(1941) 评论(0) 推荐(0) 编辑
摘要:RT-Thread SPI 使用教程 实验环境使用的是正点原子的潘多拉开发板。 SPI从机设备使用的是BMP280温湿度大气压传感器。 使用RT-Thread Studio搭建基础功能。 1. 创建工程 使用RT-Thread Studio IDE创建芯片级的工程。创建完成后,可以直接编译下载进行测 阅读全文
posted @ 2023-02-19 19:45 duapple 阅读(225) 评论(0) 推荐(0) 编辑
摘要:rt-thread 移植调试记录 记录rt-thread移植的过程。这里移植仅仅是利用rt-thread源码目录已经移植好的文件,组建自己的工程,不需要自己编写汇编完成底层移植。 1. 搭建基础工程 这里使用的是正点原子的潘多拉开发板,MCU为stm32l475。需要先通过CubeMX搭建基础工程。 阅读全文
posted @ 2023-02-11 15:22 duapple 阅读(163) 评论(0) 推荐(0) 编辑
摘要:STM32 Bootloader开发记录 3 固件签名校验 文章目录 STM32 Bootloader开发记录 3 固件签名校验1. 移植mbedtls1.1 编译mbedtls1.2 修复rsa_sign的一个bug1.3 测试RSA1.3.1 **RSA加解密:**1.3.2 **RSA签名验签 阅读全文
posted @ 2022-11-18 19:13 duapple 阅读(175) 评论(0) 推荐(0) 编辑
摘要:在《stm32 bootloader开发记录.md》文档中,已经实现了Bootloader下的升级功能。可以在Bootloader启动时,进入升级模式,使用串口传输数据,来下载固件到flash中。 但是,在实际应用中,一般是在应用运行过程中进行升级,而不是在Bootloader中进行升级。一般只有在 阅读全文
posted @ 2022-11-13 16:38 duapple 阅读(65) 评论(0) 推荐(0) 编辑
摘要:编写一个基础的Bootloader,记录一下开发过程及遇到的问题。 1、基本思路 作为一个Bootloader,它首先需要具备跳转功能,能够跳转到我们的APP地址空间中运行APP。 其次,它还需要有能够读写FLASH的能力。除了启动APP,另外还有对APP进行升级的操作,这个功能需要用到读写FLAS 阅读全文
posted @ 2022-10-17 20:41 duapple 阅读(195) 评论(0) 推荐(0) 编辑
摘要:源代码: pthread_t tid1, tid2, tid3; extern void *log_test_thread_handler(void *arg); pthread_create(&tid1, NULL, log_test_thread_handler, "xxxxxxx"); pth 阅读全文
posted @ 2022-09-18 17:38 duapple 阅读(56) 评论(0) 推荐(0) 编辑
摘要:源代码: static void *cmd_exec_thread_handler(void *arg) { pthread_cleanup_push(thread_exit_handler, arg); cmd_base_t *cmd_base = (cmd_base_t *)arg; print 阅读全文
posted @ 2022-09-18 16:06 duapple 阅读(56) 评论(0) 推荐(0) 编辑
摘要:由于C标准库中的字符串处理函数功能太少了,因此自己参照这Go语言标准库的strings包的API的功能,用C语言写了一个。 cstrs地址: https://github.com/duapple/cstrs https://gitee.com/duapple/cstrs 这里展示其中一个字符串分割的 阅读全文
posted @ 2021-11-20 22:03 duapple 阅读(21) 评论(0) 推荐(0) 编辑
摘要:C语言面向对象的通用链表实现 将接头体看做类似C++中的类,在里面声明数据和方法。其中包括一个链表所必须的数据和操作链表所必须的方法,再定义一个接口用于创建链表。使用指针的原因是防止局部变量被释放掉。 typedef struct node_t Node; struct node_t { void 阅读全文
posted @ 2021-05-18 09:04 duapple 阅读(6) 评论(0) 推荐(0) 编辑
摘要:在写代码时,通常都离不开格式化更具。运用格式化工具能使我们的代码更加的美观。 然而KEIL 没有内置格式化工具。因此我们需要自己为其添加格式化工具。之前我使用的是 AStyle ,效果还不错,网上一般也是建议使用这个工具。 但是本人更加钟爱 vscode 的 C/C++ 格式化工具:clang-fo 阅读全文
posted @ 2021-04-22 00:48 duapple 阅读(132) 评论(0) 推荐(0) 编辑
摘要:jansson库使用 1. 将结构体转化为json字符串(解决jansson转化字符串失败) 写了一个转换测试程序,发现运行个20多次后,就一直转换失败了。先后测试free(),json_object_clear() 和 json_decref()。发现只有json_decref()这个好使。估计是 阅读全文
posted @ 2020-11-30 12:16 duapple 阅读(36) 评论(0) 推荐(0) 编辑
摘要:Linux C语言 Zlib 实现解压zip文件 因为在做嵌入式Linux,做OTA功能的时候需要解压zip升级包。所以需要用到zip文件的解压缩功能。 就想着能不能用zlib来完成这个功能。在网上一通找以后,发现教程千篇一律,要么是打着解压文件的标题解压buff内容,要么是c++完成的。好不容易有 阅读全文
posted @ 2020-11-11 19:33 duapple 阅读(349) 评论(0) 推荐(0) 编辑
摘要:通过Linux系统调用来完成这个操作,atexit( )和on_exit( )。 atexit( )函数原型: #include <stdlib.h> int atexit (void (*function)(void)); 示例: #include <stdlib.h> #include <std 阅读全文
posted @ 2020-09-03 13:31 duapple 阅读(16) 评论(0) 推荐(0) 编辑
摘要:指针数组参数传递 二维数组不能作为二级指针参数进行传递,无法强制转换。即: void fun(char **p); char str[2][6] = {"hello", "world"}; fun(str); 这样的调用会出错。 但是指针可以转化为二级指针。如: void fun(char **p) 阅读全文
posted @ 2020-08-24 09:27 duapple 阅读(15) 评论(0) 推荐(0) 编辑
摘要:makefile管理编译工程 自动生成.h头文件依赖 工程目录结构 每一个功能模块建立一个文件夹,然后该文件夹下建立include,lib,src文件夹。include存放对外接口,lib存放编译好的静态库,src存放源码.c和.h文件。 每个功能模块有单独的makefile进行编译管理。 顶层路径 阅读全文
posted @ 2020-08-23 11:18 duapple 阅读(16) 评论(0) 推荐(0) 编辑
摘要:解决两个静态库之间相互依赖的问题 两个静态库之间相互依赖:在静态库liba.a中声明了某些函数,但是实现在libb.a中,此时a库依赖于b库;然后在静态库中libb.a中,某些结构体或者变量在liba.a中声明的,此时b库依赖于a库。 然后链接的时候,会出现两个库之间的相互依赖问题。链接涉及到顺序问 阅读全文
posted @ 2020-08-23 01:13 duapple 阅读(25) 评论(0) 推荐(0) 编辑
摘要:一个使用示例: 文件夹内容: 然后创建一个简单的makefile在当前目录下: INCLUDE = -I/usr/local/ssl/include src = $(wildcard *.c) obj = $(src:.c=.o) libgsoap.a:$(obj) ar -rc $@ $^ %.o 阅读全文
posted @ 2020-08-20 23:21 duapple 阅读(7) 评论(0) 推荐(0) 编辑
摘要:C语言通用链表实现 C语言的数组有时候很好用,但在不知道数据有多少的时候,并且涉及到某个数据的删除时,操作起来很不方便,这个时候就需要用到链表。自己定义一个链表数据结构,然后实现它,此时这个链表仅能表示你要处理的相关数据,并不是通用的,这将导致你要使用的时候就得重新写数据结构的代码。这个时候,定义一 阅读全文
posted @ 2020-07-04 14:00 duapple 阅读(35) 评论(0) 推荐(0) 编辑