编程语言技巧
文章平均质量分 65
andylauren
嵌入式爱好者
展开
-
Unity(单元测试)在STM32上的移植与应用
Unity Test是一个为C构建的单元测试框架。本文基于STM32F407为基础,完全使用STM32CubeIDE进行开发,移植和简单使用Unity。单片机型号:STM32F407VET6软件:STM32CubeIDE Version: 1.14.1 Unity Version:2.6.0。原创 2024-02-14 17:48:07 · 2858 阅读 · 1 评论 -
letter shell在STM32F4上基于freeRTOS的移植
是一个C语言编写的,可以嵌入在程序中的嵌入式shell,主要面向嵌入式设备,以C语言函数为运行单位,可以通过命令行调用,运行程序中的函数。拥有命令自动补全、快捷键功能定义、命令权限管理、用户管理、变量支持、代理函数和参数代理解析等功能。letter-shell: letter shell一个嵌入式小型shell,特别适用于单片机系统。原创 2024-01-18 16:48:14 · 1637 阅读 · 1 评论 -
vscode如何设置doxygen并生成文档
在这个网站,选择对应的平台版本,我选择的是windows的.zip版本,这个版本不需要安装。当准备好以上带注释的源码后就可以使用软件生成说明文档了。文件-》首选项-》设置,在其中搜索doxygen。在文章开头打“/**”回车,就会生成文件头部。在函数头部打“/**”回车,就会生成函数说明。解压后运行doxygen.exe。原创 2024-01-16 15:24:11 · 2027 阅读 · 0 评论 -
三字节汉明码校验程序
三个字节的汉明码校验程序,linux下编译,存储格式与汉明码有一定区别,前三字节存储数据,第四字节存储校验码。测试程序,在中间随机改变数据一位,模拟传输位翻转。#include<stdlib.h>#include<stdio.h>#include<string.h>#include<unistd.h>#include <time.h>#define BIT0(x) (x&0x01)#define BIT1(x) (原创 2021-03-29 11:18:56 · 223 阅读 · 0 评论 -
VS Code设置linux风格代码格式化
vs code跨平台表现很好,有时候在linux下也会使用vs code查看代码,代码格式化是我必须使用的一个功能,写多了linux的代码也就看习惯了linux的格式,也一直在想用vs code格式化成linux类型。步骤如下:文件->首选项->设置搜索clang在C_Cpp:Clang_format_fallback Style栏中输入如下:{ BasedOnStyle: Google, UseTab: Never, IndentWidth: 4, TabWidth: 4.原创 2020-12-08 16:15:40 · 4042 阅读 · 3 评论 -
Linux 线程操作函数技能总结
线程概念 线程是指运行中的程序的调度单位。一个线程指的是进程中一个单一顺序的控制流,也被称为轻量级线程。它是系统独立调度和分配的基本单位。同一进程中的多个线程将共享该系统中的全部系统资源,比如文件描述符和信号处理等。一个进程可以有很多线程,每个线程并行执行不同的任务。线程与进程比较 ① 和进程相比,它是一种非常“节俭”的多任务操作方式。在Linux系统中,启动一个新的进程必转载 2017-12-30 14:42:12 · 1691 阅读 · 1 评论 -
Linux下随机数生成的函数与常见方法
rand函数: 头文件 #include 定义函数 int rand(void) 函数说明 rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。返回转载 2018-01-30 22:39:15 · 15130 阅读 · 2 评论 -
Linux strace命令
简介strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。输出参数含义root@ubuntu:/usr# strace cat /d转载 2018-01-07 11:40:11 · 1773 阅读 · 0 评论 -
linux动态库加载的秘密
linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面知识。 基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看 # ldd /bin/lslinux-vdso.so.1 => (0x00007fff597ff000)libselinux.so.1 => /lib64/l转载 2018-01-07 13:40:21 · 6698 阅读 · 1 评论 -
linux下获取时间的函数
相关函数 time,ctime,gmtime,localtimeasctimeasctime(将时间和日期以字符串格式表示)#include定义函数char * asctime(const struct tm * timeptr);函数说明asctime()将参数timeptr所指的tm结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函转载 2018-01-28 12:29:54 · 3365 阅读 · 1 评论 -
公历转农历linux C程序
该代码实现根据公历日期查询农历日期,和24节气,假期,干支年份,干支月份等。改代码是根据以下两个代码改编而来,感谢两位的共享精神。http://blog.jjonline.cn/userInterFace/173.html1900年至2100年公历、农历互转Js代码http://www.cnblogs.com/qintangtao/archive/2013/03/01/293888原创 2018-02-05 22:24:47 · 2703 阅读 · 0 评论 -
linux进程间通信--消息队列相关函数(msgget、msgctl、msgsnd、msgrcv)详解
消息队列函数由msgget、msgctl、msgsnd、msgrcv四个函数组成。下面的表格列出了这四个函数的函数原型及其具体说明。1. msgget函数原型msgget(得到消息队列标识符或创建一个消息队列对象)所需头文件#include #include #include 函数说明得到消转载 2017-12-16 20:28:00 · 2294 阅读 · 0 评论 -
linux进程间通信--消息队列相关函数(ftok)详解
ftok消息队列、信号灯、共享内存常用在Linux服务端编程的进程间通信环境中。而此三类编程函数在实际项目中都是用System V IPC函数实现的。System V IPC函数名称和说明如下表15-1所示。表15-1 System V IPC函数 消息队列信号灯共享内存区头文件转载 2017-12-16 20:08:26 · 47962 阅读 · 4 评论 -
linux进程间通信--信号量相关函数(semget、semop、semctl)详解
信号量函数由semget、semop、semctl三个函数组成。下面的表格列出了这三个函数的函数原型及具体说明。1. semget函数原型semget(得到一个信号量集标识符或创建一个信号量集对象)所需头文件#include #include #include 函数说明转载 2017-12-20 12:58:54 · 3819 阅读 · 0 评论 -
linux 进程(关于守护进程、检查一个进程是否活着、如何写一个进程号文件)
本文主要包括三个部分: 一是如何实现一个守护进程,二是如何检测一个进程是否活着,三是保证某一执行文件只有一个实例在运行。/* * 1.守护进程 */守护进程的最大特点就是脱离了中断,Linux提供了一个系统调用daemon(),要想自定义实现的话,主要包括以下六个步骤:1.第一步是使用umask函数,把所有的文件屏蔽字置0。文件屏蔽字是可以继承的,当你有相关操作时,如转载 2016-08-19 16:06:32 · 5630 阅读 · 0 评论 -
收集整理的shell游戏
在ubuntu12环境下亲测能够运行的shell游戏脚本,csdn免积分下载,想研究的可以拿回去慢慢看。扫雷http://download.csdn.net/detail/andylauren/9803012俄罗斯方块http://download.csdn.net/detail/andylauren/9803011猜数字http://downloa原创 2017-04-04 10:15:45 · 6651 阅读 · 0 评论 -
编写可靠shell脚本的八个建议
这八个建议,来源于键者几年来编写 shell 脚本的一些经验和教训。事实上开始写的时候还不止这几条,后来思索再三,去掉几条无关痛痒的,最后剩下八条。毫不夸张地说,每条都是精挑细选的,虽然有几点算是老生常谈了。1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题去问别人,不同的人的回答可能各不相同。我见过/usr/bin/env bash,也见过/bin/bas转载 2017-04-12 19:50:36 · 384 阅读 · 0 评论 -
shell脚本高级技巧
shell 语句出错自动退出许多人用shell脚本完成一些简单任务,而且变成了他们生命的一部分。不幸的是,shell脚本在运行异常时会受到非常大的影响。在写脚本时将这类问题最小化是十分必要的。本文中我将介绍一些让bash脚本变得健壮的技术。使用set -u你因为没有对变量初始化而使脚本崩溃过多少次?对于我来说,很多次。chroot=$1...rm -rf $chroot/usr转载 2017-04-03 09:57:03 · 3304 阅读 · 0 评论 -
shell内置在其源代码中的命令
shell有很多内置在其源代码中的命令。这些命令是内置的,所以shell不必到磁盘上搜索它们,执行速度因此加快。bash提供的help功能,能提供任何内置命令的在线帮助,表14-12列出了这些内置命令。表14-12 内置命令命 令功 能.执行当前进程环境中的程序。同source. fil转载 2017-04-03 09:35:33 · 748 阅读 · 0 评论 -
linux库文件编译的makefile
很久之前需要自己写几个库,但是每次敲命令感觉很麻烦,所以参考其他开源库的makefile自己写了一个专门生成动态库和静态库的makefile。之后有一段时间很忙就没有分享出来,中间项目也被停滞了一段时间,昨天又开始一个新项目,恰好也需要编译动态库,就用之前的makefile改了改,发现确实好用,所以趁着没有忘记都是什么东西之前赶紧分享出来。首先是我要编译的东西的目录结构linux@u...原创 2018-07-28 10:38:07 · 1921 阅读 · 0 评论 -
摘抄内核链表实现源文件
下面是我从linux内核中扒出来的链表实现,不得不佩服内核工程师的编程能力,非常精简,之需要两个头文件,就可以实现双端链表和hash查找功能。看到链表实现的时候我是佩服的不得了。下面是源码,我改成了我自己的文件名字。源码下载地址:https://download.csdn.net/download/andylauren/10638894rt_list.h#ifndef LIST_...原创 2018-08-31 23:53:49 · 1037 阅读 · 0 评论 -
POSIX定时器
最强大的定时器接口来自POSIX时钟系列,这个支持查询、信号和回调函数方式。创建一个定时器int timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid)进程可以通过调用timer_create()创建特定的定时器,定时器是每个进程自己的,不是在fork时继承的。clock_id说明定时器是基于哪个时...原创 2018-09-23 16:44:42 · 1933 阅读 · 0 评论 -
(7)CMake入门笔记--CMake官网教程
7. 添加对可视化网页的支持添加对将测试结果提交到可视化网页的支持非常简单。 我们已经在本教程的前面步骤中为我们的项目定义了许多测试。 我们只需运行这些测试并将其提交到可视化网页。 要可视化网页的支持,我们在顶级CMakeLists.txt文件中包含CTest模块。# enable dashboard scriptinginclude (CTest)我们还创建了一个CTestCon...原创 2019-08-15 16:18:39 · 268 阅读 · 0 评论 -
(9)CMake入门笔记--同时生成动态库与静态库
在cmake中,同时生成静态库与动态库的时候,需要一些技巧,因为cmake中不能生成同名的静态库和动态库,只能先生成不同名的库之后再把其中一个库的名字改名。# 生成动态库目标add_library(MathFunctions SHARED ${srcs})# 生成静态库目标add_library(MathFunctions_static STATIC ${srcs})# 指定静态库...原创 2019-08-20 14:07:14 · 3432 阅读 · 0 评论 -
(8)CMake入门笔记--CMake语法
参考地址:https://www.cnblogs.com/binbinjx/p/5626916.htmlhttps://blog.csdn.net/ajianyingxiaoqinghan/article/details/70230902感谢以上两位分享前提1、每一个需要进行cmake操作的目录下面,都必须存在文件CMakeLists.txt 。2、cmake指令不区分大小写...原创 2019-08-20 09:26:02 · 816 阅读 · 0 评论 -
(6)CMake入门笔记--CMake官网教程
6. 构建安装程序接下来假设我们想要将项目分发给其他人,以便他们可以使用它。 我们希望在各种平台上提供二进制和源代码分发。 这与我们之前在安装和测试(步骤3)部分中所做的安装略有不同,步骤3打包的是从源代码构建的二进制文件。 在此示例中,我们将构建支持二进制安装和软件包管理功能的安装包,如cygwin,debian,RPM等中所示。为实现此目的,我们将使用CPack创建特定于平台的安装程序,详...原创 2019-08-14 11:14:29 · 233 阅读 · 0 评论 -
(5)CMake入门笔记--CMake官网教程
五.添加生成的文件和生成器在本节中,我们将展示如何将生成的源文件添加到应用程序的构建过程中。 对于此示例,我们将创建一个预先计算的平方根表,作为构建过程的一部分,然后将该表编译到我们的应用程序中。 为此,我们首先需要一个生成表的程序。 在MathFunctions子目录中,一个名为MakeTable.cxx的新源文件就是这样做的。// A simple program that buil...原创 2019-08-13 17:28:28 · 223 阅读 · 0 评论 -
(4)CMake入门笔记--CMake官网教程
四.添加系统内省接下来让我们考虑在项目中添加一些代码,这些代码取决于目标平台可能没有的功能。例如是否具有log和exp函数。 当然,几乎每个平台都有这些功能,但本教程假设它们不太常见。 如果平台有日志,那么我们将使用它来计算mysqrt函数中的平方根。 我们首先使用顶级CMakeLists.txt文件中的CheckFunctionExists.cmake宏测试这些函数的可用性,如下所示:...原创 2019-08-13 15:37:53 · 209 阅读 · 0 评论 -
(3)CMake入门笔记--CMake官网教程
三. 安装与测试这一步骤中,我们将为项目添加安装规则和测试支持。 安装规则非常简单。 对于MathFunctions库,我们通过将以下两行添加到MathFunctions的CMakeLists.txt文件来设置库和要安装的头文件:install (TARGETS MathFunctions DESTINATION bin)install (FILES MathFunctions.h D...原创 2019-08-13 15:17:22 · 289 阅读 · 0 评论 -
(2)CMake入门笔记--CMake官网教程
二. 添加库现在我们将为我们的项目添加一个库。 该库将包含我们自己的实现,用于计算数字的平方根。 然后,可执行文件可以使用此库而不是编译器提供的标准平方根函数。 在本教程中,我们将把库放入一个名为MathFunctions的子目录中。 它将包含以下一行CMakeLists.txt文件:add_library(MathFunctions mysqrt.cxx)源文件mysqrt.cxx...原创 2019-08-13 14:25:45 · 187 阅读 · 0 评论 -
(1)CMake入门笔记--CMake官网教程
CMake官网提供的入门教程。CMake官网教程地址:https://cmake.org/cmake-tutorial/一. 基本开始1. 基本项目构建最基本的项目是从源代码文件生成的可执行文件。 对于简单的项目,只需要两三行CMakeLists.txt文件。 这将是我们教程的开始。 CMakeLists.txt文件如下所示:cmake_minimum_required (V...原创 2019-08-13 14:06:58 · 665 阅读 · 0 评论 -
Valgrind学习总结
Valgrind查找内存泄露利器Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上...原创 2019-06-24 11:00:51 · 58707 阅读 · 2 评论 -
C语言实现任意进制转换代码及解析
问题描述给定一个 M 进制的数 x,实现对 x 向任意的一个非 M 进制的数的转换。问题分析掌握不同数制间的转换关系是解决问题的关键,这里所说的数制一般包括二进制、八进制、十六进制及十进制。除了不同的数制还有下面几个必须要了解的概念。基数:在一种数制中,只能使用一组固定的数字来表示数的大小,这组固定的数字的个数就称为该计数制的基数(Base)。例如十进制的基数为10,二进制的基数为...转载 2019-02-26 20:23:48 · 38911 阅读 · 5 评论 -
消息队列接口API(posix 接口和 system v接口)
消息队列 posix API消息队列(也叫做报文队列)能够克服早期unix通信机制的一些缺点。信号这种通信方式更像\"即时\"的通信方式,它要求接受信号的进程在某个时间范围内对信号做出反应,因此该信号最多在接受信号进程的生命周期内才有意义,信号所传递的信息是接近于随进程持续的概念(process-persistent);管道及有名管道则是典型的随进程持续IPC,并且,只能传送无格式的字节流无疑...转载 2019-01-08 09:30:16 · 2177 阅读 · 0 评论 -
详解 awk 工具的使用方法
详解 awk 工具的使用方法Jarly 发表当你第一次拿起双手在电脑上使用 awk 命令处理一个或者多个文件的时候,它会依次读取文件的每一行内容, 然后对其进行处理,awk 命令默认从 stdio 标准输入获取文件内容, awk 使用一对单引号来表示 一些可执行的脚本代码,在可执行脚本代码里面,使用一对花括号来表示一段可执行代码块,可以同时存在多个代码块。 awk 的每个花括号内同时又可以...转载 2018-10-15 20:04:44 · 192 阅读 · 0 评论 -
c语言抛出异常处理代码
try catch在java和c++中是有现成实现的,但是在c语言中是买有的,下面实现是来自网络上其他人提供的宏定义方法,该方法有一定的局限性,但是也有不少启发。下面是一段例子代码,需要使用的人可以自行修改。#include <stdio.h>#include <string.h>#define BEGIN_PROC int _error_code = 0;...原创 2018-09-22 20:10:39 · 11559 阅读 · 0 评论 -
Shell传入参数的处理
引言写程序的时候经常要处理命令行参数,本文描述在Bash下的命令行处理方式。选项与参数:如下一个命令行:./test.sh -f config.conf -v --prefix=/home我们称-f为选项,它需要一个参数,即config.conf, -v 也是一个选项,但它不需要参数。--prefix我们称之为一个长选项,即选项本身多于一个字符,它也需要一个参数,用等号连接转载 2017-04-03 09:27:25 · 12284 阅读 · 0 评论 -
浅谈 Linux 的死锁检测
死锁:就是多个进程(≥2)因为争夺资源而相互等待的一种现象,若无外力推动,将无法继续运行下去。注意,只有在多进程或者多线程之间或者他们与中断之间相互通讯或者共享资源才有可能发生死锁,单线程或者进程之间没有联系的话,一般不会发生死锁。锁的种类比较多,这里主要说自旋锁和信号量。两者的差别就在于前者获得不到资源时的动作是不断的资源(即忙转浪费cpu的cycles)而后者则表现为睡眠等待。死锁的基转载 2017-04-10 21:57:33 · 463 阅读 · 0 评论 -
浅谈单片机程序设计中的“分层思想”和“时间片轮思想”
分层的思想 分层的思想,并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用。看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种恍然大悟的感觉。如果说我不懂LCD怎么驱动,那好办,看一下datasheet,参考一下阿别人的程序,很快就可以做出来。但是如果不懂程序设计的思想的话,会给你做项目的过程中带来很多很多的困惑。参考了市面上各种各样转载 2016-08-26 11:26:57 · 5303 阅读 · 1 评论 -
libc、glibc和glib的关系
发现很多人没有搞清楚这两个东西.有个错误的观点:认为Glib是GNU的东东.(因为前面那个"g"),而Glibc是Glib的一个子集. 其实,Glib和Glibc基本上没有太大的联系,可能唯一的共同点就是他们都是UNIX下C编程调用的库而已. Glib是GTK+调用的底层核心库.(GTK+由开发GIMP的一些工具包集合发展而来).GIMP和Gnome这样的图形界面程序都是基于GTK+转载 2016-08-14 16:17:51 · 9092 阅读 · 0 评论