![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C编程
文章平均质量分 69
收集C编程技巧
勇往直前996
内在清醒,行所当行,敢做就能赢。
展开
-
CAN基本问题解惑
是的,标准帧和扩展帧的数据长度在传统CAN协议(CAN 2.0A和CAN 2.0B)中最多都是8个字节。CAN帧被划分为标准帧(Standard Frame)和扩展帧(Extended Frame),这种划分主要是为了满足不同应用场景下对标识符长度的需求,增强CAN网络的灵活性和适用性。标准帧的帧ID为11位,扩展帧的帧ID为29位。CAN FD(Flexible Data-rate)协议是对传统CAN协议的扩展,它引入了更高的数据速率和更大的数据字段长度,解决了传统CAN协议中数据字段长度的限制问题。原创 2024-06-18 08:24:09 · 574 阅读 · 0 评论 -
Linux 编程基础2--什么是POSIX
一、什么是POSIX1. 概念POSIX:可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),2. 发布者-IEEE发布者为电气与电子工程师协会(Institute of Electrical and Electronics Engineers),简称IEEE。这个协会老牛了【该组织在太空、计算机、电信、生物医学、电力及消费性电子产品等领域中都是主要的权威】!POSIX是IEEE为要在各种UNIX操作系统上运转载 2022-04-30 18:03:53 · 763 阅读 · 1 评论 -
C 标准库基础 IO 操作总结
其实输入与输出对于不管什么系统的设计都是异常重要的,比如设计 C 接口函数,首先要设计好输入参数、输出参数和返回值,接下来才能开始设计具体的实现过程。C 语言标准库提供的接口功能很有限,不像 Python 库。不过想把它用好也不容易,本文总结 C 标准库基础 IO 的常见操作和一些特别需要注意的问题,如果你觉着自己还不是大神,那么请相信我,读完全文后你肯定会有不少收获。一、操作句柄打开文件其实就是在操作系统中分配一些资源用于保存该文件的状态信息及文件的标识,以后用户程序可以用这个标识做各种读写操作,转载 2022-03-31 13:47:45 · 486 阅读 · 0 评论 -
一个极简的log模块
一个极简的log模块:log颜色可设置、带时间戳、文件、行号、函数,这个log模块仅包含log.h与log.c两个文件。1.log模块代码log.h:#ifndef LOG_H#define LOG_H#ifdef __cplusplusextern "C" {#endif#define LOG_BUF_SIZE 1024typedef long long (*get_sys_time_ms_def)(void);enum log_color{ COLOR_NU转载 2022-02-17 17:32:19 · 231 阅读 · 0 评论 -
分享几个实用的嵌入式C程序
1、十六进制字符转整型数字功能:将16进制的字符串转换为10进制的数字。我是没有找到相应的库函数,所以参考网上的代码自己手动写了个函数来实现。常用的函数有atoi,atol,他们都是将10进制的数字字符串转换为int或是long类型,所以在有些情况下不适用。/*=============================================================================# FileName: hex2dec.cpp# De转载 2022-02-15 13:27:59 · 1351 阅读 · 0 评论 -
scanf,sscanf高级用法
最近遇到了解析配置的问题,用正规表达式感觉大题小做,使用sscanf因只会用基本用法,感觉功能不够,上网搜了下,解析起来不费吹灰之力,代码也很简洁。名称:sscanf() - 从一个字符串中读取与指定格式相符的数据.函数原型:Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );int scanf( const char *format [,argument]... );说明:sscanf与scanf类似..转载 2021-12-30 14:24:57 · 287 阅读 · 0 评论 -
常见的校验算法
UART有一个奇偶校验,CAN通信有CRC校验。Modbus、MAVlink、USB等通信协议也有校验信息。在自定义数据存储时,有经验的工程师都会添加一定校验信息。你平时通信或者数据存储时,有用到校验信息吗?下面就介绍几种常见的校验算法。一、校验和校验和是最基本,也是嵌入式工程师最常用的一种校验算法,其实现方法很简单,简单到只有几行代码。实现的方式方法很多,不同的编程语言,不同的应用有所不同,下面以C语言8位校验和为例:uint8_t CheckSum(uint8_t *Buf,转载 2021-11-30 13:06:52 · 1018 阅读 · 0 评论 -
Linux C TCP通讯——可直接用于实际项目开发
TCP通讯代码demo:int is_valid_IP(const char *ipstr) { if (!ipstr) return 0; int a, b, c, d; int tmp = sscanf(ipstr, "%d.%d.%d.%d", &a, &b, &c, &d); if (4 != tmp) return 0; if (!(0 > a || 255 < a || 0 > b || 255 < b ||.原创 2021-11-23 10:55:23 · 1248 阅读 · 0 评论 -
C语言返回局部变量的几种用法--(经典例子)
一般来说,函数是可以返回局部变量的。局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。 因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确来说,函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的)。下面以函数返回局部变量的指针举...转载 2021-11-21 12:07:33 · 2240 阅读 · 2 评论 -
C语言常用转换函数实现原理
编程时,经常用到进制转换、字符转换。比如软件界面输入的数字字符串,如何将字符串处理成数字呢?今天就和大家分享一下。1、字符串转十六进制:void StrToHex(char *pbDest, char *pbSrc, int nLen){ char h1,h2; char s1,s2; int i; for (i=0; i<nLen/2; i++) { h1 = pbSrc[2*i]; h2 = pbSrc[2*i+1];转载 2021-11-08 10:30:20 · 365 阅读 · 0 评论 -
C语言指针:指针作为形参如何改变其指向的地址?
题目是什么意思呢?就是一个函数的输入参数是一个指针,该函数需要改变该指针指向的地址,如: 现在有一个全局数组b,现在需要编写一个函数 输入参数是一个指针a,需要通过该函数将该指针a指向数组b,即:int b[3] = {1,2,3};void fcn(参数);void main(){ int* a; fcn(输入参数a)}执行完fcn后,使参数的地址改变,这个功能怎么来实现呢?首先说明结论:使用二级指针。为了更好的理解这个问题,我们首先来学习一下指针最经典转载 2021-09-29 13:05:20 · 1923 阅读 · 0 评论 -
C、C++编程学习资料收藏
怎么算入门,我觉得可以入手做一些项目就算入门了。 需要掌握至少一门编程语言,例如,C/C++或者 Java; 需要学习数据结构与算法,至少掌握常见的数据结构与算法; 需要学习数据库知识,因为做项目几乎离不开数据库,数据库必须掌握; 掌握一门技能,例如后端开发、web 开发、移动端开发、人工智能等; 当然还需要进一步精进,可以学习操作系统,计算机网络,计算机组织原理、汇编等相关专业课程。C语言刚开始就是泡书,然后就是抄代码,上机调试,模仿修改,看 n 遍...转载 2021-09-09 22:08:44 · 585 阅读 · 1 评论 -
GCC 参数记录
gcc/g++的简单操作已经用过多次, 但是有时稍微复杂一点的程序就会使用到库。在遇到问题的时候我查了挺多前辈总结的资料,也留个脚本希望对朋友们有个帮助。例如:libz.sog++ -o compress compress.cpp -I/home/include/ -L/lib/ -lz1、(1) -I (大写i)编译程序按照-I指定的路进去搜索头文件。-I/home/include/表示将-I/home/include/目录作为第一个寻找头文件的目录,寻找的顺序是:...转载 2021-09-01 17:38:30 · 102 阅读 · 0 评论 -
创建数据库链接sqlite3_open用法
sqlite3_open用法:原型:int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */);用这个函数开始数据库操作。需要传入两个参数,一是数据库文件名,比如:E:/test.db。文件名不需要一定存在,如果此文件不存在,sqlite会自动建立它。如果它存在,就尝试把它当数据库文件来打开。转载 2021-03-11 10:13:03 · 1952 阅读 · 0 评论 -
#include使用引号“”和尖括号<>的区别
很多程序员写代码,可能没有仔细研究过#include相关的内容,下面就来简单说说。1、关于#include首先,#include为预处理语句,那么什么是预处理语句呢?预处理语句最明显的标志是一些行首以#开始的特殊语句。例如:#include、 #define、#if等就是预处理语句。在程序的其它编译处理(词法分析、语法分析、代码生成、优化和连接等)之前,先进行这些语句的分析处理。在编译工具中,有一个叫预处理器,预处理器发现 #include 指令后,就会进行一些预处理操作。...转载 2021-03-08 12:45:32 · 936 阅读 · 0 评论 -
C语言编程时,各种类型的变量的初始化
在敲代码的时候,我们会给变量一个初始值,以防止因为编译器的原因造成变量初始值的不确定性。对于数值类型的变量往往初始化为0,但对于其他类型的变量,如字符型、指针型等变量等该如何初始化呢?数值类变量初始化整型、浮点型的变量可以在定义的同时进行初始化,一般都初始化为0。int inum = 0;float fnum = 0.00f;double dnum = 0.00;字符型变量初始化字符型变量也可在定义的同时进行初始化,一般初始化为'\0'。1charch='\0...转载 2021-02-08 11:58:34 · 921 阅读 · 0 评论