C语言
酸菜鱼的鱼
Linux rtos 驱动应用开发 本博客主要用于工作学习的总结和备份,欢迎大家留言评论交流,谢谢
展开
-
Linux C语言获取命令行执行结果输出的指定字符串后指定的内容
本文介绍了在Linux系统中,使用C语言中的popen执行了一个终端命令后,将终端输出重定向到一个文件流中,再使用fgets获取到终端输出的每一行,并使用strstr提取其中的关键字符串,然后使用sscanf获取到字符串后面的字符。由于fgets是指定的流中读取数据,本文也适用于从一个文件中获取指定字符串的使用场景。转载 2020-05-06 23:03:34 · 3135 阅读 · 0 评论 -
python调用c/c++的方法
首先编写一个c++文件api.cpp:#include <Python.h>class MyClass { public: int add(int x,int y) { return x+y; }};extern "C" int add(int x,int y){ MyClass obj; return obj.add(x,y);}...转载 2020-04-05 13:49:37 · 310 阅读 · 0 评论 -
c/c++中atexit()函数的使用方法
本文主要介绍c/c++程序在main函数运行结束时如果需要做类似于释放内存等操作的话,可以通过在main函数中调用atexit()函数注册相对应的回调函数(类型为void (*)(void)注册的最大个数是32个),在main函数最后退出的时候,就会按照回调函数注册的相反顺序,执行回调函数中的程序。如下的代码示例:#include "stdafx.h"#include <iost...原创 2020-02-17 11:27:42 · 1024 阅读 · 0 评论 -
数据结构中的排序--插入排序(升序和降序)
插入排序的基本思路就是将待排序的数字,插入到已经排好序的数列中。如果数据都在一个数组中,那么这里面会涉及到比较的次数和数据的移动,这些都会影响到算法的效率,如果是链表,就需要考虑的是指针的指向。下面的实例代码是对一个固定的数组进行排序(升序和降序)完整的代码:#include "stdafx.h"#include <iostream>using namespace s...原创 2020-01-30 21:14:15 · 3146 阅读 · 0 评论 -
c语言实现队列的先进先出操作
队列的特点是先进先出,有一个队列头和一个队列尾。如下图示:整个队列含有一个队列头指针front和一个队列尾指针rear,并且队列中每个节点中包含一个数据域和一个指向下一个节点的指针域。定义一个节点:typedef struct _node{ int data; struct _node *next;}node;定义队列结构体:typedef struct { nod...原创 2020-01-07 22:24:45 · 6462 阅读 · 0 评论 -
C语言循环单链表实现约瑟夫(JosephUS)问题
1.C语言单链表实现1.1循环链表的创建主要思路是:创建头结点--赋值--创建中间节点--赋值---创建尾结点--赋值。本次采用的循环链表中的数字都是顺序赋值。node *create_josephus(int n){ node *head = NULL, *p=NULL, *new_node=NULL; int i; if (0 != n){ head = (node ...原创 2019-12-09 22:59:36 · 1682 阅读 · 0 评论 -
数据结构的单链表的操作(创建,显示,增加,删除等功能)
目录各个链表的功能函数介绍1.链表的创建2.链表的打印3.获取链表的长度4.在链表中插入一个节点5. 寻找链表中的节点6.删除链表的一个节点7.链表的转置8.寻找一个链表的中间节点9. 采用递归的方式合并两个有序的链表10.采用非递归的方式合并两个有序链表完整的测试代码各个链表的功能函数介绍1.链表的创建链表的创...原创 2019-12-07 11:25:08 · 1532 阅读 · 0 评论 -
C语言实现整形数字转换成字符串
void reverse(char a[]){ int i, j; char c; for (i = 0, j = strlen(s) - 1; i < j; i++, j--) { c = s[i]; s[i] = s[j]; s[j] = c; }}/* itoa : convert n to char*/void _itoa(int n, char ...原创 2019-03-01 20:40:08 · 3332 阅读 · 2 评论 -
linux内核中模块间相互依赖的自动连接程序:modprobe外部程序和request_module()函数的分析
以下内容总结自《understanding the linux kernel》在Linux系统中一个包括但不限于驱动模块,可能需要一个或者多个其他的模块,这些模块又可能需要其他的模块。为了内核能够自动链接模块,内核需要创建一个内核线程来执行modprobe程序,该线程要考虑由于模块依赖所引起的所有可能因素。modprobe外部程序和insmod类似,链接在命令行中指定的一个模块。然而,mo...原创 2019-05-01 19:55:47 · 1382 阅读 · 0 评论 -
rk芯片的sdk中CameraHal的框架梳理--基于rv1108的cvr平台
以下内容主要来自于rk的相关资料。camera hal的作用:Camera HAL 层为硬件抽象层,用于连接应用层和驱动层,使得应用程序不需关心具体的硬件驱动实现,各种硬件实现( ISP, CIF 以及 USB camera)可以使用同一套 API 接口,简化应用开发。以下为camera hal的源码目录:各个目录的作用:build_system: 简易的 HAL 编译系...原创 2019-04-28 19:06:25 · 2585 阅读 · 0 评论 -
rv1108-evb-v12 sdk的视频拍照的流程 (2)
上一篇分析了当飞机空中端接收用户地面端发送的拍照命令后,软件回调的执行。但是还没有说明图片的存储和传送这块还没有分析到。所以接下来就是分析图片的存储和发送流程。通过终端的调试打印信息来看,当接收到地面端的拍照指令后,执行文件app\video\process\nv12_process.cpp中的类NV12_MJPG中的公有成员方法StreamPUBase中的函数processFrame。主要是...原创 2019-04-25 15:56:50 · 1194 阅读 · 0 评论 -
linux中netlink使用
linux中netlink使用:此代码片段是在文件:app\video\ueventmonitor\ueventmonitor.c中出现的,在sdk的初始化的时候建立的线程。初步分析此代码的作用是,使用netlink的机制实现接收,事件中断时的消息,解析接收到的消息,根据不同的消息内容,执行不同的操作。主要涉及到如下的事件:1.电池状态事件。如:电量过低。2.块设备事件。如:sd卡...原创 2019-07-29 17:19:06 · 518 阅读 · 1 评论 -
rv1108 sdk app层上电初始化流程
当系统上电启动后,会执行应用层的逻辑,应用层的代码入口是app\video\ui\cvr\camera_ui.c :MiniGUIMainMiniGUIMain api_poweron_init(ui_msg_manager_cb);应用层的初始化,主要是在函数api_poweron_init(ui_msg_manager_cb);中,实现的功能主要是系统参数的初始化,注册回...原创 2019-04-30 18:54:36 · 1267 阅读 · 2 评论 -
c语言实现字符串数字转长整形strtol函数
#include <limits.h>#include <ctype.h>#include <errno.h>#include <stdlib.h>/* * Convert a string to a long integer. * * Ignores `locale' stuff. Assumes that the upper ...转载 2019-06-18 19:38:57 · 1164 阅读 · 0 评论 -
c语言中查找一个字符串中首次出现的字串函数strstr的实现方法
#include <string.h>/* * Find the first occurrence of find in s. */char *strstr(const char *s, const char *find){ char c, sc; size_t len; c = *find++; if (c != 0) { len = strlen(fi...转载 2019-06-18 19:45:05 · 1152 阅读 · 0 评论 -
c语言中字符串处理的相关函数的具体实现--string.c
(strcpy strncpy strchr strrchr strlen strcmp strncmp strcat strncat memcmp memmove memcpy memset memchr)/* string.c - common string routines *//* * Copyright (c) 2014 Wind River Systems, Inc....转载 2019-06-18 19:53:09 · 302 阅读 · 0 评论 -
c/c++中的struct和class的区别
主要有两种情况:1.C语言中的struct和c++中的class区别。2.c++中的struct和c++中的class的区别。下面分别介绍:1.C语言中的struct和c++中的class的区别C语言中的struct只能定义成员变量,不能够定义成员函数。如下所示:struct point{ int x; int y; void print() ...原创 2019-10-06 22:27:43 · 1920 阅读 · 0 评论 -
C语言实现数字的字符串形式转整形的数字的功能
/* From: http://fossies.org/dox/musl-1.0.5/atoi_8c_source.html *///drivers/wifi/host/platform/actions_ats3503/porting.h#define isdigit(c) in_range(c, '0', '9')#define isspace(c) ...原创 2019-03-01 20:37:44 · 373 阅读 · 0 评论 -
cpp文件调用c文件中的函数编译出现:undefined reference to `c_function()'
背景:存在如下的c文件中定义一个函数:c_file.cint c_function(void){ int a = 0, b = 0; xxxxx return 0;}c_file.h#ifndef __C_FILE__#define __C_FILE__xxxxxint c_function(void);xxxxx#endif...原创 2019-01-09 19:22:20 · 6359 阅读 · 0 评论 -
可变参数宏__VA_ARGS__的使用
在调试打印信息时,会使用到可变参数宏__VA_ARGS__的使用;#if 0#define PRINT(format, ...)\ {printf(“%s :%s :%d ”, __FILE__, __FUNCTION__,__LINE__);\printf(format, ##__VA_ARGS__);}#else#define PRINT(format,...原创 2018-09-29 10:39:17 · 550 阅读 · 0 评论 -
C语言实现md5值得计算
md5.h#include <stdlib.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#ifdef __cplusplusextern "C" {#endif#define min(a,b) (((a)>(b))?(b):(a))/* ...原创 2018-10-09 19:29:11 · 2352 阅读 · 0 评论 -
C语言.c文件调用C++ 中cpp文件中的类
C文件部分:#include "bbb.h" //包含相应的头文件test(param0,param1);//在合适的地方调用函数-------------------------------------分割线------------------------------------------------------------------头文件部分:声明的函数在C文件和CPP文...原创 2018-10-20 17:08:39 · 8348 阅读 · 0 评论 -
在BootLoader中使用gpio--获取gpio的高低电平,以及设置相应的管脚的电平高低
以下以rv1108平台为例:在项目中,需要实现一个功能,在Linux kernel加载前BootLoader判断一个引脚电平的高低状态,从而决定加载不同的kernel,以及相应的文件系统,以实现双系统的功能。//判断按键的电平高点状态:#if 1 //set gpio3_a4's direction intput u32Reg = read_XDATA32(0x1033...原创 2018-11-03 16:06:59 · 6530 阅读 · 0 评论 -
打印文件中前n个逗号的内容
由于工作需要,需要在一行数百行的数字中,每个数字使用逗号‘,’分隔开,如下,寻找第n个数字,并将其改成其他的值。写了一个如下的小程序。如果你有更好的方法,欢迎留言评论额。47, 124, 137, 0, 237, 217, 104, 119, 88, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 214, 159, 220, 168, 24, 23, 170, 144,...原创 2018-11-20 19:37:31 · 213 阅读 · 0 评论 -
C语言读取不到文件的结束标志EOF的解决方法
使用C语言判断一个文件的行数:用到如下的代码,发现读到最后一行就会出现死循环,一直读不到文件的EOF标志,将getc函数的返回值类型改为int类型(也就是将下面的第4行中的char改为int即可),就可以顺利的判断EOF的标志了。查阅资料得知,EOF为整型,不是字符型。static int testFunCalTotalLine(void){ FILE *pf = NULL;...原创 2018-11-26 18:56:20 · 6428 阅读 · 0 评论 -
将一列16进制的字符串转化为相应的16进制数组
static int HexStrToHexArray(char HexArray[], char HexStr[]) { int i = 0,index = 0; for(i = 0; HexStr[i]; i += 2) { if(HexStr[i] >= 'A' && HexStr[i] <= 'F') { ...原创 2018-11-27 10:39:01 · 1575 阅读 · 2 评论 -
rv1108-evb-v12 sdk的视频拍照的流程(1)
以下是rv1108-evb-v12 SDK中的视频拍照的代码流程梳理:当飞机接收到地面段发送的拍照指令后,回调函数tcp_func_take_photo开始执行。tcp_func_take_photo主要实现两部分的功能:首先通过struct photo_param *photo_param = parameter_get_photo_param();获取地面端用户设置的拍照的参数:...原创 2019-04-22 19:36:07 · 997 阅读 · 0 评论 -
linux中设置串口的系统调用tcgetattr,tcsetattr,tcflush的使用总结
头文件:#include <termios.h>函数原型:int tcsetattr(int fd, int optional_actions, const struct termios *termios_p);//设置串口属性int tcgetattr(int fd, struct termios *termios_p);//获得串口属性int tcflush(int ...原创 2018-12-05 11:11:54 · 4203 阅读 · 0 评论 -
C语言直接操作寄存器物理地址的方法
读寄存器值:u32RegValue = *((uint32 volatile *)(reg_addres));写寄存器值:*((uint32 volatile *)(reg_addres)) = value;原创 2018-12-20 17:57:01 · 6793 阅读 · 1 评论 -
销毁一个链表的函数
销毁一个链表:static void destoryList(struct type_node *l){ struct type_node *next; struct type_node *p = l; if (NULL == p) return; while (p != NULL) { next = p->next...原创 2018-12-10 19:36:34 · 3574 阅读 · 1 评论 -
rv1108 SDK中wifi_management_start()函数中的代码梳理
WiFimanagement——start的函数的代码梳理:原创 2018-12-11 16:35:52 · 545 阅读 · 0 评论 -
使用ioremap内核接口时出现的错误assignment makes integer from pointer without a cast [enabled by default],解决方法
使用内核借口ioremap入下:u32BaseAddr0 = ioremap(0x20060000, 0x4000);编译出现入下的编译错误信息: assignment makes integer from pointer without a cast [enabled by default]查看代码发现是因为 u32BaseAddr0 返回值的类型不对,写成了sta...原创 2018-12-19 10:15:36 · 3482 阅读 · 0 评论 -
C语言实现库函数中的strstr查找字符串中的子串的功能
自己使用C语言实现的库函数中的strstr函数的功能:代码如下 #include <stdio.h>static const char *strstr_t(const char *str, const char *sub_str){ const char *str_local = NULL; const char *sub_str_local = NU...原创 2019-01-05 11:01:17 · 6825 阅读 · 0 评论 -
Linux中查找目录下的以固定字符串开头的文件
每次需要开机检查系统的升级固件版本和当前的SD卡中的固件版本是否一致,固件名的开始是固定的字符串加上版本号。 #include <dirent.h> #include <sys/types.h static void *update_firmware(void *arg) { char acCurVersion[10] = {0}; char ...原创 2019-01-10 20:14:58 · 9482 阅读 · 0 评论 -
C语言实现判断一个字符串是否为回文:
判断一个字符串是否为回文: #include <stdio.h> #include <string.h> static int isCycStr(const char *str) { int strLen = 0, i = 0; strLen = strlen(str); for(i = 0; i < strLen/...原创 2019-01-05 17:24:25 · 2897 阅读 · 0 评论 -
C语言实现读取文件中指定行号的内容
static int readFileLineNumVal(char *pFilePath, unsigned int u8lineNum, char * preadDataBuf, unsigned int readLen){ char c; FILE *fp = NULL; unsigned int lineNum = 0; unsigned ch...原创 2018-10-02 17:44:26 · 5104 阅读 · 0 评论