- 博客(196)
- 收藏
- 关注
原创 SPI、UART、I2C通信技术深度对比分析
开始传输时发送UART在一个时钟周期内将传输线从高电平拉低到低电平,当接收UART检测到高电压到低电压转换时,它开始以波特率的频率读取数据帧中的位。到起始位时,它将以特定波特率的频率读取。发送UART从数据总线获取并行数据后,它会添加一个起始位,一个奇偶校验位和一个停止位来组成数据包并从Tx引脚上逐位串行输出,接收UART在其Rx引脚上逐位读取数据包。I2C的数据传输是以多个msg的形式进行,每个msg都包含从机的二进制地址帧,以及一个或多个数据帧,还包括开始条件和停止条件,读/写位和数据帧之间的。
2024-07-25 11:01:56 429
原创 总结SPI、I2C、UART三者的区别以及有关知识
数据的传输速率是根据时钟信号的频率来确定的,发送方和接收方都严格按照时钟信号的边沿来进行数据的采样和发送。在串行传输中,数据位逐个按照一定的顺序进行传输,每一位数据都需要依次传输完毕,然后再传输下一位数据。发送方和接收方可以交替地发送和接收数据,但在任何给定的时间内,只能有一个方向上的传输。而并行传输需要使用多条平行的信号线进行数据传输,每组信号线对应一个数据位,多个数据位通过各自的信号线同时传输。然而,并行传输的速度受到线路延迟和同步问题的影响,而串行传输则可以更容易地实现较高的传输速度。
2024-07-25 10:40:07 541
原创 数组和指针容易犯的错误
mem_buf 等同于 &mem_buf[0] 并等同于 mem_buf ,这里的本意是(VOID **)&mem_buf 是双指针指向数组的首地址,但是如果填写&mem_buf 这仅仅是单指针。
2024-02-01 09:54:44 392
原创 Ubuntu 更改文件夹及子文件夹权限
打开终端进入你需要修改的目录然后执行下面这条命令chmod 777 * -R 文件夹名字全部子目录及文件权限改为 777查看linux文件的权限:ls -l 文件名称查看linux文件夹的权限:ls -ld 文件夹名称(所在目录)...
2021-11-16 10:06:01 2655
原创 memset赋值特别需要注意的地方
typedef unsigned short Long_unsigned;typedef unsigned char Unsigned;//时间日期typedef struct datetime_s{ Long_unsigned year; Unsigned month; Unsigned day; ...
2020-04-29 18:48:43 737
原创 定义的结构体里面如果有链表,定义一个变量切记陷阱(需要用指针方式这样方便分配给链表空间)!
例子 如下定义了一个结构体,结构体里面包含链表Listscheme_frame_list,那么定义此结构体变量时不可以用SCHEME_CONTENT aa;(不可以,因为没有给链表分配空间)需要定义为指针类型,如: SCHEME_CONTENT_PTR ptrp = (SCHEME_CONTENT_PTR)malloc(sizeof(SCHEME_CONTENT)); ...
2020-04-27 20:27:29 548 1
原创 linux动态库链接语句(设置) export LD_LIBRARY_PATH
在./执行程序时会提示找不到库,此时需要在里面手动敲打一个export命令例如:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/mqtt/MQTT-c/lib红色字体是你需要替换的动态库绝对目录...
2020-04-05 11:08:04 4927
原创 交叉编译(以libmxml.a举例,在网上找到相应的压缩包以后)
交叉编译 (/lib:动态库和静态库,将最终生成的lib和include文件夹拷贝出来提供给程序编译和程序运行时使用。)在ubuntu中使用minixml自带的configure配置生成Makefile并编译libmxml库。2.1、编译ttu环境使用的libmxml.a,步骤如下:1、在Ubuntu环境中,将mxml-2.12.tar.gz拷贝到Ubuntu目录,比如拷贝到:/home/...
2020-03-27 00:11:53 1234
原创 Linux下指定so动态库的加载路径的5种方法种的指定环境变量方法详解!!!(.bashrc和 /etc/profile )
首先简单说一下什么是环境变量?环境变量简单的说就是当前环境下的参数或者变量。如果说的专业一点就是指在操作系统中用来指定操作系统的一些参数。 举个我们最常见的环境变量 —— PATH,它的用途就是当用户要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下寻找此程序外,还要到PATH变量中指定的路径去寻找。用户可以通过设置PATH变量,来更好的运行进程。举个常见的例...
2020-03-16 14:47:52 2051
原创 Linux下指定so动态库的加载路径的5种方法!!!
一、库文件的搜索路径:1、在配置文件/etc/ld.so.conf中指定动态库搜索路径(需要添加其它库文件的路径,在文件的最后添加具体的路径即可 [ 如:/usr/local/lib ],添加后保存退出,然后在命令行ldconfig2、通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔)3、在编译目标代码时指...
2020-03-09 22:04:10 19642
原创 Linux命令修改文件名和文件夹名
Linux修改文件名语句:mv oldFileNamenewFileName示例:我想把 aaa1.txt修改为 bbb1.txt示例语句:mvaaa1.txtbbb1.txt把当前目录下的file1文件名改成file2,如果该目录下有file2,则覆盖以前的file2文件。...
2020-03-09 16:49:23 4884
原创 linux的各种自带库-lz -lrt -lm -lc都是什么库
编译链接库:-lz -lrt -lm -lc都是什么库lz 压缩库(Z)lrt 实时库(real time):shm_open系列lm 数学库(math)lc 标准C库(C lib)-dl ,是显式加载动态库的动态函数库...
2020-01-31 11:56:54 4000
原创 C语言如何将字符串转十六进制
通过查ASCII表知道:'a'对应的十六进制是是0x61,'A'对应的十六进制是0x41,'f'对应的十六进制是是0x66,'F'对应的十六进制是0x46,'0'对应的十六进制是是0x30,'9'对应的十六进制是0x39,其实这里的十六进制就是由字符对应的ASCII码转换得来的,下面主要讲下如何将数字0~9和26个英文字母转换成十六进制并存到数组中,直接贴代码分析。void StringToH...
2019-12-18 10:30:37 4486
原创 linux编译:提示/usr/bin/ld: can not find -lsqlite3 的解决办法
编译程序提示缺少sqlite3的情况下,如果在其他arm编译器下有现成的库,可以直接拷贝过来。sudo cp /opt/arm-2008q3/arm-none-linux-gnueabi/libc/armv4t/lib/libsqlite3.so /opt/arm-2013.11/arm-none-linux-gnueabi/libc/armv4t/lib/如下:有两个编译器 arm...
2019-12-03 12:03:08 1939
原创 linux_gcc编译器安装详细说明(arm-2013.11-33-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2举例)
1 在官网https://www.veryarm.com/arm-none-linux-gnueabi-gcc下载解压版arm-2013.11-33-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2sudo tar -xvf arm-2013.11-33-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar...
2019-12-03 10:45:58 663
原创 UDP和TCP总结
INADDR_ANY 、INADDR_LOOPBACK 、INADDR_BROADCAST这三个常量在文件中的定义如下:#define INADDR_ANY (u_long)0x00000000#define INADDR_LOOPBACK 0x7f000001#define INADDR_BROADCAST (u_long)...
2019-12-02 15:52:01 213
原创 递归复制 copy(cp)命令注意
root@dc:/media/dataindex# cp -r /media/dataindex/apptemp/. /media/dc/mt_tmnl698/app_zt/root@dc:/media/dataindex# cp -r /media/dataindex/apptemp/. /media/dc/mt_tmnl698/app_zt/root@dc:/media/dataindex...
2019-11-06 09:32:49 3667
原创 字符串二维数组作为函数的参数 void func(int (*mat)[10]);
字符串数组:比如 char a[3][24]={"hello","goodbye","goodb"};如果想把此字符串数组传出去void func(char (*mat)[24]);版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/u010383519/article/d...
2019-08-21 14:33:27 955
原创 linux怎么复制文件和复制文件夹
1 只复制一个文件cp /media/dataindex/collection /usr/bin/2 递归复制文件夹里面的所有内容cp -r /media/dc/log/ /media/dataindex
2019-07-05 09:54:10 5824 1
转载 多个动态库的依赖问题(先后顺序务必注意)
链接的库文件中又使用了另一个库文件 这种问题比较隐蔽,也是我最近遇到的与网上大家讨论的不同的问题,举例说明如下,首先,还是看看测试代码。 从上图可以看出,main.c调用了test.c的函数,test.c中又调用了fun.c的函数。 首先,我们先对fun.c,test.c,main.c进行编译,生成 .o文件。gcc -c func.c gcc -c test...
2019-06-17 19:49:08 10495
原创 指针易犯错的地方--self标记
TRANS_PROCESS是全局变量bool trans_carrier_frame(char retry, byte timeout, byte *frame, int length, byte* outbuff,int* outlen){ TRANS_PROCESS.outbuff =outbuff;byte BUFFER_FRAME[2] ={0,1};memcpy(TRA...
2019-06-12 15:50:05 159
原创 动态库编写 头文件.h注意事项
比如 log.h log.c 其中log.h 就几个函数的定义,用到的头文件很少。但是log.c文件里面会有很多函数的实现,用到比如 #include <string.h>#include <time.h>#include <limits.h>#include <signal.h>#include <unistd....
2019-05-30 18:56:51 4073
原创 修改一个文件夹下面所有文件和文件夹的属性--chmod -R 777 app_zt/
chmod -R 777 app_zt/app_zt/此文件夹
2019-05-29 17:07:28 23879
原创 如何在linux中运行中定义lib的路径在makefile里面
场景:比如执行程序testlog需要用到liblog.so,但是testlog在运行当中提示找不到所需要的动态库文件liblog.so(放在了/media/dc/mt_tmnl698/lib_zt目录)此时需要在编译testlog时的makefile需要改进如下:红色字体 定义运行时的路径TARGET_LIB_DIR =/media/dc/mt_tmnl698/lib_ztTA...
2019-05-29 14:11:34 3713
原创 static修饰的函数只能在本文件中调用,其他文件想调用怎么办?
static修饰的函一句话总结:static修饰的变量和函数是有可见范围的,一般情况下不要越限处理。利用可在本文件调用的属性,另加一个函数fun,fun调用该static函数;其他文件调用fun即可数只能在本文件中调用,其他文件想调用怎么办?...
2019-05-22 16:03:33 4251
转载 c++中函数声明的后面加=0
纯虚函数是在声明虚函数时被“初始化”为0的函数。声明纯虚函数的一般形式是 virtual 函数类型 函数名 (参数表列) =0;注意: ①纯虚函数没有函数体; ②最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”; ③这是一个声明语句,最后应有分号。纯虚函数只有函数的名字而不具备函数的功能,不能被调用。它只...
2019-02-11 16:26:36 1562
转载 std::string用法总结
在平常工作中经常用到了string类,本人记忆了不好用到了的时候经常要去查询。在网上摘抄一下总结一下,为以后的查询方便:string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化string类的字符操作:const char &operator[](int n)c...
2019-02-11 16:26:01 675
转载 浅谈C++类中的公有和私有
最忌讳的就是利用C++写C代码!利用C++写C代码最主要的一个特点之一把类里面所有的数据都声明成public的,本文就浅谈了一下如何利用public和private将代码分开的方法~~~#define: 1.关键字public可以将类的成员说明为是公有的,及可以被该类的所有成员所访问; 2.关键字private可以将类的成员说明为是私有的,它不能直接被对象访问。 其实,说白了就...
2019-02-11 14:37:22 5780 1
原创 linux的添加网关 查看网关等信息
原文:https://www.cnblogs.com/lpfuture/p/5857738.html && http://blog.csdn.net/wangyan_hbu/article/details/51013602为了让设备能访问另一个子网,需要在设备里增加路由到子网络,一般来说都是为了能访问别的子网才设置路由的,比如说,你的主机处于192...
2019-01-25 09:59:34 12096
原创 共用体位域的高低位
union{ UINT8 uc; struct { UINT8 priority : 4; UINT8 reserve : 3; UINT8 ret : 1;//该任务是否有数据返回 }bits;}un; un.uc=100; printf("%X\n",un.bits.priority); pri...
2018-12-19 15:41:23 2735
原创 串口阻塞和非阻塞
阻塞方式是文件读写操作的默认方式,但是应用程序员可通过使用O_NONBLOCK 标志来人为 的设置读写操作为非阻塞方式 .( 该标志定义在 < linux/fcntl.h > 中,在打开文件时指定 ) .阻塞: 在设计简单字符驱动程序时,要注意一个重要问题. 当一个设备无法立刻满足用户的读写请求时应当如何处理?...
2018-12-10 13:46:26 12842
原创 转:Linux 各种BCD时间与Unix时间戳格式转换
在Linux C或C++编程中,因为应用场景的不同,经常会遇到各种时间之间的装换,有时需要BCD时间,有时需要Unix时间戳,也有叫绝对时间的。这里介绍几种时间格式转换的应用。Unix时间戳: Unix时间戳是一个绝对值,表示距离时间(1970-1-1, 00:00:00)的秒数。在C\C++ 语言中,用数据类型time_t 表示时间戳,time_t 本质上是一个long int。获...
2018-12-07 15:29:00 1016
原创 多个.C和.H文件的相互调用以及变量的跨文件使用
假如 有一个头文件 1.h 和源文件1.c 还有一个头文件 2.h和源文件2.c 函数的调用假如 有一个函数 在1.h 中声明 void xuexi(void) 在1.c中实现:先包含 #include "1.h" void xuexi(void) ...
2018-12-01 13:52:14 6370 7
原创 一个结构体的双指针和一个结构体的数组指针使用例子(都可以)
1 结构体的数组指针DataFormatStr g_out_data_buf[2];DataFormatStr g_int_data_buf[20];typedef struct{ UINT32 di; UINT32 len; UINT8 buf[256];}DataFormatStr;/** @brief 电表数据格式转集中器数据格式...
2018-11-30 11:11:37 1699
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人