- 博客(176)
- 资源 (7)
- 收藏
- 关注
原创 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
1487
1
原创 ChatGPT解答编译时为什么需要依赖动态链接库
在程序加载时,操作系统的加载器(Loader)会读取这些重定位表项,并更新可执行文件中的符号引用,以确保它们指向正确的内存地址。在程序运行时,动态链接库会被加载到内存中,并且操作系统的动态链接器/加载器负责将程序中对动态链接库符号的调用解析到正确的内存地址。尽管动态链接库在程序运行时才会被加载,但在编译和链接时,编译器和链接器需要知道这些库中提供的符号和接口,以生成正确的机器代码和依赖信息。DLL文件在运行时由操作系统的动态链接器加载,并解析可执行文件中的符号引用以找到并调用实际的函数和变量。
2024-05-31 11:51:35
893
原创 使用chatGPT解答关于芯片手册中Memory Map的相关疑问
这些地址在芯片的整体地址空间中是唯一且固定的,通过地址解码逻辑确保处理器访问这些地址时能正确地与相应的外设进行交互。每一个地址或地址范围就像地图上的一个地理位置,标记了特定的硬件资源。7、总结来说就是设计师在设计soc或者mcu时,现根据cpu的寻址范围来确定内存空间的大小,然后再确定有哪些外设,给相应的外设分配内存范围,进而确定各个外设的具体对应的物理地址。在Linux系统中,从应用程序读取硬盘数据并发送到串口的过程中,涉及多个地址转换和处理的步骤,包括虚拟地址、物理地址、以及I/O地址的处理。
2024-05-24 15:32:50
823
原创 DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x800c000d
解决DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x800c000d
2024-03-15 09:30:39
2212
原创 Ubuntu16.04安装VS Code中文化及创建快捷方式
帮助你在 Ubuntu 16.04 上将 Visual Studio Code 的快捷方式放到桌面。
2023-05-26 14:38:00
1938
原创 Quick 书签菜单插件使用方法
Quick 书签菜单插件安装完成以后,直接点击浏览器上方工具栏中的插件图标,即可对浏览器中的书签进行查看和管理。
2022-07-08 09:48:35
2210
转载 ANSI是什么编码?
用Notepad++创建一个文本文件text.txt,其默认编码格式为ANSI(乍看之下,还以为是ASCII呢),输入汉字居然不是乱码:保存为test.txt,发送给你美国的同事Bob。他也用Notepad++,不幸的是,却发现你的文件内容是这样的:也许你会认为:你用的是中文系统,能正常显示中文;他用的是英文系统,不能显示中文!这么想,好像很有道理呢!但是再细想一下:一个系统显示乱码,说明它不支持这种编码格式(或者解码方式不对)。难道英文系统不支持ANSI?难道ANSI是一种中文编码?如果你身边有一个韩文系
2022-06-12 18:54:42
3793
转载 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
972
1
转载 Linux 编程基础1--文件IO和标准IO、系统调用与库函数
一、文件IO和标准IO1、什么是文件I/O和标准I/O文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所说的低级I/O——操作系统提供的基本IO服务,与os绑定,特定于linux或unix平台。标准I/O:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性,标准I/O库处理很多细节。例如缓存分配,以优化长度执行I/O等。标准的I
2022-04-30 16:49:51
617
转载 C 标准库基础 IO 操作总结
其实输入与输出对于不管什么系统的设计都是异常重要的,比如设计 C 接口函数,首先要设计好输入参数、输出参数和返回值,接下来才能开始设计具体的实现过程。C 语言标准库提供的接口功能很有限,不像 Python 库。不过想把它用好也不容易,本文总结 C 标准库基础 IO 的常见操作和一些特别需要注意的问题,如果你觉着自己还不是大神,那么请相信我,读完全文后你肯定会有不少收获。一、操作句柄打开文件其实就是在操作系统中分配一些资源用于保存该文件的状态信息及文件的标识,以后用户程序可以用这个标识做各种读写操作,
2022-03-31 13:47:45
590
转载 shell脚本判断僵尸进程
目录1、交互式 Bash Shell 获取进程 pid2、Bash Shell 脚本获取进程 pid#3、获取 Shell 脚本自身进程 pid#4、查看指定进程是否存在#5、关于/dev/null的说明:6、最后我的杀死僵尸进程脚本:1、交互式 Bash Shell 获取进程 pid在已知进程名(name)的前提下,交互式 Shell 获取进程 pid 有很多种方法,典型的通过 grep 获取 pid 的方法为(这里添加-v grep是为了避免匹配到 grep 进程).
2022-03-29 14:34:18
1072
转载 揭开内存管理的迷雾
1、虚拟内存如果你是电子相关专业的,肯定在大学里捣鼓过单片机。单片机是没有操作系统的,所以每次写完代码,都需要借助工具把程序烧录进去,这样程序才能跑起来。另外,单片机的 CPU 是直接操作内存的「物理地址」。在这种情况下,要想在内存中同时运行两个程序是不可能的。如果第一个程序在 2000 的位置写入一个新的值,将会擦掉第二个程序存放在相同位置上的所有内容,所以同时运行两个程序是根本行不通的,这两个程序会立刻崩溃。操作系统是如何解决这个问题呢?这里关键的问题是这两个程序都...
2022-03-26 11:37:44
203
转载 深入理解malloc内存分配函数
最近想多写一些内存管理的文章,这次我们就以 malloc 动态内存分配为切入点,我在文中也做了小实验:目录1、Linux 进程的内存分布长什么样?2、malloc 是如何分配内存的?什么场景下 malloc() 会通过 brk() 分配内存?又是什么场景下通过 mmap() 分配内存?malloc() 分配的是物理内存吗?3、malloc(1) 会分配多大的虚拟内存?3.1、free 释放内存,会归还给操作系统吗?4、为什么不全部使用 mmap 来分配内存?5、既...
2022-03-25 15:30:05
897
1
转载 文件系统的一些基本概念
1、什么是文件系统文件系统的应用非常广泛,同时种类也是特别的多,并且不同平台也会使用不同性能和特点的文件系统,比如查找效率、数据安全等级等等,如下面windows使用的NTFS:不同的文件系统: 单片机常用文件系统:Fatfs、振南的Znfs等等; Linux常用文件系统 : Ext扩展fs、jffs,yaffs等等; windows常用文件系统 : NTFS等 ...... 虽然文件系统多种多样,看起来非常复杂,其实主要目的还是为用户提供读写数据的统一.
2022-03-22 18:28:41
1773
转载 线程局部存储
在多线程术语中,经常听到一个词就是“线程局部存储”,英文Thread-local storage,简称TLS。我们今天就来看看这到底是一个什么样的神秘东西。1 在讲解之前,我们先来看一个例子#include <QDebug>int invoke_count =0; // 用来记录调用common_function函数的次数void common_function (){ ++ invoke_count; //...}void print
2022-03-01 10:30:31
541
转载 嵌入式Linux系统脚本小技巧---启动脚本
这里介绍一个小技巧,在系统启动时,预留一个启动脚本,在需要临时修改一些系统配置或者额外启动程序时比较方便。这个方法主要针对只读文件系统,如果是可读写的文件系统则不需要了,可读写的文件系统可以随时修改。我们都知道一般嵌入式Linux系统启动脚本是/etc/init.d/rcS,我们的应用程序启动入口也是在这个脚本里添加,一般会在这里添加一个应用程序的启动脚本,最好不要再这里直接添加启动程序,这样便于后期应用程序启动脚本的修改,而不再需要修改文件系统里的脚本。现在在系统启动脚本rcS里添加一个应用程
2022-02-21 17:02:41
711
转载 一个极简的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
277
转载 Makefile模板
1.写在前面 对于Windows下开发,很多IDE都集成了编译器,如Visual Studio,提供了“一键编译”,编码完成后只需一个操作即可完成编译、链接、生成目标文件。Linux开发与Windows不同,Linux下一般用的的gcc/g++编译器,如果是开发ARM下的Linux程序,还需用到arm-linux-gcc/arm-linux-g++交叉编译器。Linux下也可以实现“一键编译”功能,此时需要一个编译脚本“Makefile”,Makefile可以手动编写,也可以借助自动化构建工具(如sc
2022-02-16 13:41:12
2071
转载 分享几个实用的嵌入式C程序
1、十六进制字符转整型数字功能:将16进制的字符串转换为10进制的数字。我是没有找到相应的库函数,所以参考网上的代码自己手动写了个函数来实现。常用的函数有atoi,atol,他们都是将10进制的数字字符串转换为int或是long类型,所以在有些情况下不适用。/*=============================================================================# FileName: hex2dec.cpp# De
2022-02-15 13:27:59
1490
转载 《小狗钱钱》——追加书摘
教育分流,人工智能……孩子要怎么准备,去迎接变幻莫测的未来?就像我们的父母,如今很难理解新型职业一样,到了我们这一代,也很难从自身阅历出发,规划孩子的人生了。尽管环境千变万化,总有一些朴素而宝贵的生存法则是恒定不变的,是需要我们帮助孩子做好支撑和构建的,比如:·有目标感和内驱力,发现自己的兴趣或特长·会赚钱也会理财,计划和管理好自己的生活·内心丰...
2022-01-06 18:51:57
350
原创 《蛤蟆先生去看心理医生》读书笔记
故事概要:《蛤蟆先生去看心理医生》这本书的人物设定是沿用英国作家肯尼斯格雷厄姆的童话书《柳林风声》里的人物,因为前者在书里提及了蛤蟆先生一段偷车、入狱、逃狱等惊险刺激的经历。 在本书中原本活泼开朗的蛤蟆先生突然变得情绪低落,整个人的状态和以前都不一样了,他的好朋友河鼠和鼹鼠在报纸上看到咨询师苍鹭的介绍,建议蛤蟆先生去和咨询师苍鹭交流试试。于是蛤蟆先生每周二上午去苍鹭的咨询室聊天,通过和苍鹭的对话以及对话后的思考,蛤蟆先生渐渐探索自我、改变想法,脱离了抑郁的情绪,重新振作...
2022-01-05 13:15:53
625
转载 如何查看局域网内所有IP
要如何查看局域网内正在使用的电脑的IP一共分以下几个步骤:第一步:点击电脑左下角的“开始”,然后再点击“运行...”。第二步:在运行窗口里填入“cmd”,然后点击确定。第三步:在cmd命令窗口输入“ipconfig/ALL”命令,点击键盘上的回车键。第四步:这时会在cmd命令窗口看见自己电脑的IP地址,用纸记下来。第五步:这时候在cmd命令窗口输入“for /L %i IN (1,1,254) DO ping -w 2 -n 1 192.168.0.%i”,点击键盘上的回车键(注意.
2021-12-31 14:03:51
85899
转载 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
345
转载 小狗钱钱2——书摘
嘲笑他人是一件令人遗憾的事情。当你把目光都集中在别人的错误和缺点上时,就自然会忽略他们身上闪光的一面。而一个人只有具备了审视美好事物的能力,世界对他来说才会变得更加美好。 你可以给自己找一个貌似合理的借口,比如你可以说:‘我做不到,因为一切都是那么的不公平。’但是这样到底有没有用呢?你最终还是不能成功地达到目的。 甜甜圈中间的圆孔代表着人类的内心,可是这内心本身却是无形的。许多人并不关心自己的内心,就是因为看不到它。对于他们来说,只有看得见的成功才是重要的。但你如果想要变得幸福,就不能只重视物质上的成功
2021-12-29 18:40:47
187
转载 小狗钱钱1——书摘
致富的秘诀就是将你存完以后剩下的钱花掉,而不是将你花完以后剩下的钱存上。 想看一幅“没有画框的风景”,也许并没有之前所说的那么伤感,要走“很远很远”。关键在于你的心态,在你的心里究竟还有多少框框——“名人”的框框、习惯的框框、观念的框框…… 如果你想富有,请把自己变成一个小孩。因为小孩子的框框最少,他们诚实、快乐、乐于学习。 事实上,理财和实现富有对老百姓来说未必只意味着沉重与艰辛;理财和你热爱的其他任何事业都可如童话般有趣,如童话般简单。只要你诚实、自信、轻松、快乐,并乐于学习。 所有人都希望自己
2021-12-28 10:10:44
121
转载 常见的校验算法
UART有一个奇偶校验,CAN通信有CRC校验。Modbus、MAVlink、USB等通信协议也有校验信息。在自定义数据存储时,有经验的工程师都会添加一定校验信息。你平时通信或者数据存储时,有用到校验信息吗?下面就介绍几种常见的校验算法。一、校验和校验和是最基本,也是嵌入式工程师最常用的一种校验算法,其实现方法很简单,简单到只有几行代码。实现的方式方法很多,不同的编程语言,不同的应用有所不同,下面以C语言8位校验和为例:uint8_t CheckSum(uint8_t *Buf,
2021-11-30 13:06:52
1119
原创 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
1302
转载 C语言返回局部变量的几种用法--(经典例子)
一般来说,函数是可以返回局部变量的。局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。 因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确来说,函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的)。下面以函数返回局部变量的指针举...
2021-11-21 12:07:33
2363
2
转载 protobuf-c之嵌入式平台使用
什么是protobuf-c之前的文章:《Protobuf:一种更小、更快、更高效的协议》详细介绍了protobuf及protobuf-c。这里再简单提一下:Protocol Buffers,是Google公司开发的一种数据格式,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。protobuf支持一些主流的语言,唯独没有支持C,所以诞生了第三方的protobuf-c。之前文章介绍了protobuf、protobuf-c在PC平台上的安装及使用,本篇笔记我们来把它用在我们的嵌入式
2021-11-16 18:13:26
1448
转载 Protobuf:一种更小、更快、更高效的协议
前言之前分享关于JSON的使用:例说嵌入式实用知识之JSON数据。JSON类型数据可读性很好,但是整个数据包中会带有一些无用的数据,会在一定程度上带来通信负担。本篇文章我们来分享一种更轻量的数据格式——protobuf。protobuf的优点: 更小、更快、更简单。 支持多种编程语言 。 解析速度快。 可扩展性强。 什么是protobuf、protobuf-c?Protocol Buffers,是Google公司开发的一种数据格式,类似于XML能够将结
2021-11-16 18:09:14
704
1
转载 2021-11-15
linux命令行下面执行某个命令的时候,首先保证该命令是否存在,若存在,但输入命令的时候若仍提示:command not found这个时候就的查看PATH环境变量的设置了,当前命令是否存在于PATH环境变量中#查看PATH:echo $PATH举例说,命令 composr 在/usr/loca/bin但执行的时候提示:-bash: composr: command not found这个时候,通过echo $PATH,,发现composer并未在PATH环境变量中有设置,这个
2021-11-15 10:37:51
638
转载 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
402
转载 如何理解互斥锁、条件变量、读写锁以及自旋锁?
锁是一个常见的同步概念,我们都听说过加锁(lock)或者解锁(unlock),当然学术一点的说法是获取(acquire)和释放(release)。恰好pthread包含这几种锁的API,而C++11只包含其中的部分。接下来我主要通过pthread的API来展开本文。mutex(互斥量)mutex(mutual exclusive)即互斥量(互斥体)。也便是常说的互斥锁。尽管名称不含lock,但是称之为锁,也是没有太大问题的。mutex无疑是最常见的多线程同步方式。其思想简单粗暴,多线程共
2021-10-27 12:54:14
256
转载 Qt之QFuture
QFuture 类代表一个异步计算的结果。要启动一个计算,使用Qt之Concurrent框架中的 APIs 之一。QFuture 允许线程与一个或多个结果同步,这些结果将在稍后的时间点准备就绪,该结果可以是具有默认构造函数和拷贝构造函数的任何类型。如果一个结果在调用 result()、resultAt() 或 results() 函数时不可用,QFuture 将进行等待,直到结果可用为止,使用 isResultReadyAt() 函数可以检测结果是否已准备就绪。进度信息由 progressV..
2021-10-21 17:54:26
833
转载 Qt中使用gif动图加载大量数据
这篇文章的主要内容是:点击一个widget页面时,当加载的数据量过大时,会造成假死状态。此时使用gif动态加载图表示当前加载的状态。目前我使用的开发环境是:VS2017+QT5.14.2肯定有人觉得怎么用这么个怪异的开发环境,使用QT语言为啥不直接使用QtCreator呢?我只能说工作需要,哈哈。接下来我们主要讲解我需要实现的功能实现的功能是:点击父窗口的按钮,进入子窗口Dlg1中,并在子窗口Dlg1中加载数据,在加载数据的同时显示gif等待图片这个功能看着很简单,其实存在了以下几个难点
2021-10-21 17:47:38
867
Quick 书签菜单插件,不仅能够对书签进行打开、删除、隐藏,同时还支持对这款书签管理器的横向布局等。
2022-07-08
VS2010适配番茄助手.zip
2020-04-25
CSocktServ_Clnt
2018-06-09
MyQtSocket_Client
2018-06-09
Qt serverTest
2018-06-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人