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