![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式开发杂谈
文章平均质量分 64
Stoneshen1211
笨鸟后飞慢慢飞。。。
展开
-
嵌入式软件开发杂谈(10):CPU的使用率是如何计算的
在前面介绍了如何获取CPU使用率、如何获取线程的CPU使用率等,但是有个疑问,CPU是如何来计算使用率的?1 时间中断先说一个概念,时间中断。在Linux系统中,0号的中断是一个定时器中断。在固定的时间间隔内发生一次中断,每次中断都会定时更新系统的日期时间、更新CPU统计数用于时间片轮转来调度进程切换。而上面的“固定的时间”,在用户空间,叫做USER_HZ,一般其值是100,即每秒中断100次,在内核文件include/asm-generic/param.h中定义了它的值:# undef HZ#原创 2022-07-03 18:00:00 · 1538 阅读 · 0 评论 -
嵌入式软件开发杂谈(9):如何查找CPU使用率最高的函数---pref的使用
在前面文章《嵌入式软件开发杂谈(5):线程的CPU使用率》中简单介绍了如何查看线程的CPU使用率,那么问题来了,知道了某个进程或者线程的CPU使用率,那么如何知道是那个函数导致的CPU使用率升高呐?最方便的方法是使用perf工具,perf是一款性能分析工具,不仅可以用来分析系统全局性性能,还可以Fenix进程线程级别的性能,甚至到函数以及汇编级别,这里不介绍perf的用法,有兴趣的可以百度下。参考前面文章的代码,测试代码如下:#include <stdio.h>#include <原创 2022-06-04 08:00:00 · 1142 阅读 · 0 评论 -
嵌入式软件开发杂谈(8):动态分析工具Valgrind的配置使用
文章目录1 编译1.1下载1.2编译2 运行1 编译1.1下载http://valgrind.org1.2编译#./configure --prefix=/home/work/third_party/valgrind/valgrind-3.16.1/__install --host=arm-linux CC=arm-linux-gnueabihf-gcc然后打开configure文件,搜索armv7* 字段,将其改写为 armv7* |arm#make#make install至此,原创 2022-05-08 19:15:00 · 1028 阅读 · 0 评论 -
嵌入式软件开发杂谈(7):静态分析工具Pclint与source insight的整合
文章目录1 安装1.1 安装1.2 配置2 集成到SI中3 生成头文件4 修改配置5 告警级别6 常见错误消除6.1 告警号406.2 告警号 10571 安装1.1 安装点击安装包中的pclint9setup.exe后, 直接进行安装注意:安装路径不要有中文和空格1.2 配置点击安装路径中的CONFIG.exe,选择如下:2 集成到SI中a)打开Source Insight软件 。b)从Tools菜单中选择“Custom Commands”命令项。点击Add…。c原创 2022-04-03 23:00:00 · 1149 阅读 · 0 评论 -
嵌入式软件开发杂谈(6):CPU load average简介
参考链接:文章目录1 定义2查看3 值的解释4 负载和CPU使用率之间的关系?在嵌入式开发中,我是一般关注CPU使用率这个参数。但是有次被人问到Load average怎么这么高,当时一脸懵,根本不知道这个参数说的是什么。随后查了些资料,记录下简单的说明,防止遗忘。需要详细了解的参考上面的链接,里面说的更新详细。1 定义在一定的时间间隔内,在运行队列中(即在CPU上正在运行或者等待运行的进程)和处于不可中断状态的平均进程数。2查看使用top可以看到或者使用# cat /proc/loadav原创 2022-03-06 06:30:00 · 1353 阅读 · 0 评论 -
嵌入式软件开发杂谈(5):如何查看线程的CPU使用率
在正常的开发中,有时候我们需要知道当前进程的每个线程的CPU使用情况,方便对每个线程进行分析,此时就需要在top指令中显示线程的使用情况。在使用中要使用prctl为线程重命名,不然在top中显示的就是主进程的名字,就无法确认是那个线程了。使用指令:#top -Hp PIDPID为进程的PID,使用后可以只看此进程的CPU使用情况。如下:或者使用指令:#top -H或#top然后再输入H即可看到所有进程的线程CPU使用情况。下面代码为上下截图的示例代码:#include &原创 2022-03-06 00:30:00 · 1913 阅读 · 0 评论 -
嵌入式软件开发杂谈(4):Binutils工具集
文章目录1 addr2line2 nm3 readelf3.1 -h3.2 -l3.3 -S3.4 -t3.5 -s3.6 -n3.7 -d4 size5 objdump6 strings7 strip在嵌入式开发中,如果我们使用GNU的GCC编译器,那么就会有一个比较重要的工具集binutils,该工具集中的一些工具,比较方便我们开发和调试。指令描述addr2line根据指令地址获取对应的函数、源文件名、行号nm列出程序文件中的符号以及在内存中的地址readelf原创 2022-02-07 10:11:28 · 1056 阅读 · 0 评论 -
嵌入式软件开发杂谈(3):Linux下内存与虚拟内存
参考链接:虚拟内存与物理内存的联系与区别Linux虚拟地址和物理地址的映射Linux 虚拟内存和物理内存的理解简单记录下了解的内存与虚拟的关系。总结:1.每个进程有4G的虚拟内存空间,分为3G的用户空间和1G的内核空间2.只有在使用真正物理内存时,才将虚拟内存映射为实际的物理内存3.页表 管理内存与虚拟内存 以及映射关系设备的物理内存是有限的,是比较宝贵的资源,特别是在一些嵌入式设备中。为了能够充分利用和管理系统的内存资源,Linux采用了虚拟内存管理技术。当程序被加载时候,为每一个进程原创 2022-02-07 10:10:44 · 531 阅读 · 0 评论 -
嵌入式软件开发杂谈(2):Linux最大能创建多少文件?
文章目录1 查看文件描述符数量1.1 系统文件描述符最大值1.2 用户文件描述符限制值1.3 用户文件描述符可修改最大值1.4 查看系统使用的文件句柄数量2 修改文件描述符限制2.1 修改系统限制2.2 修改用户限制3 查看某个进程的使用文件数量曾经遇到一个问题,设备在正常运行的过程中,在打开一个文件时候,提示“Too many open files”,打开文件失败。当时一脸懵,然后检查代码,没有发现什么异常。但是在出现这个问题时候,发现进程的文件描述符数量已经占到了这个进程的被分配的最大值,但是实际上并原创 2022-01-31 10:00:00 · 991 阅读 · 0 评论 -
嵌入式软件开发杂谈(1):Linux下最大能创建多少线程?
文章目录1 与系统堆栈的限制有关2 与系统可生成的最大线程数有关3 与系统进程数目有关4 与进程拥有VMA的数量有关5 与操作系统有关先上结论:1 与系统堆栈的限制有关2 与系统可生成的最大线程数有关3 与系统进程数目有关4与进程拥有VMA的数量有关5 与操作系统有关1 与系统堆栈的限制有关在前面我们说过,linux系统为每个程序分配4GB的虚拟内存,其中用户空间的虚拟内存为3GB。正常情况下,我们使用ulimit -s查看系统的栈限制,默认是8192即8M,那么当我们创建线程的时候,Li原创 2022-01-31 07:45:00 · 3314 阅读 · 0 评论