
s2: 嵌入式
涛歌依旧
毕业后就职于华为和腾讯
展开
-
嵌入式的一点回忆
原文发表于公众号:涛歌依旧(扫描二维码,关注公众号,免费领资料) 最近,宇宁哥拉我进了一个群,大致扫了一眼,基本都是嵌入式开发的朋友,这让我觉得很亲切。 我是电子通信类专业出身,大学期间学的是模拟电路、数字电路、通信原理、信号处理相关的课程。黄老师跟我们说,你们未来大概从事三个方向的工作:嵌入式相关开发、DSP相关开发、FPGA相关开发。 毕业后,去了H公司,做了两年的linux嵌入式软件开发,编译、烧录、调试,有时设备发烫还冒...原创 2021-01-24 10:24:02 · 4153 阅读 · 16 评论 -
再谈makefile指定头文件和库出错的那点破事(折腾了0.5小时)------三个月后发现了真正原因
在文章http://blog.youkuaiyun.com/stpeace/article/details/50985578中, 我对makefile指定头文件和库出错的那点破事进行了详细总结, 基本能搞定大部分情况。在本文中, 我来说说自己最近在某新模块中遇到的一个makefile编译错误。 编译好test.so库后, 启动后台服务, 加载test.so库, 发现failed to open原创 2016-07-07 23:33:18 · 8370 阅读 · 0 评论 -
source很重要
之前做了一个通用的写接口, 每个参数的修改都需要经过这里, 为了方便定位定问题, 我们通常需要知道修改的来源是哪里。 在软件开发时, 其实很大程度上是在维护这套软件, 所以, 要为后续维护做准备。 最近定义一个写接口, 没有注意加source字段, 定位问题的时候, 很蛋疼。 补补补。原创 2016-06-25 20:39:01 · 7174 阅读 · 1 评论 -
相见恨晚:linux下的c++filt 命令
一个简单的linux命令, 确实不值得大费周折, 但是, 如果能与实际开发工作联系起来, 解决实际开发中的困惑, 在生动的实际场景中学习命令, 那无疑是棒棒哒的感觉。 最近刚好用c++filt解决了相关实际问题, 故而分享如下: 我们知道, 在C++中, 是允许函数重载的, 也就引出了编译器的name mangling机制, 今天我们要介绍的c++filt命令便与此有关。原创 2016-05-15 11:42:45 · 31828 阅读 · 6 评论 -
再谈linux静态库(.a)的用法
在之前的博文中, 我分别写过Windows/linux下静态/动态库的制作方法和使用方法, 今天继续来聊聊linux下的静态库。 将基本功能封装成库有很多的好处,在很多时候, 基础库提供的不是.h和.cpp文件, 而是提供.h和.a文件, 这在本质上是等价的。 最近, 和另一同学联调了某小功能, 他提供了.h和.a文件, 我来直接调用。 调用方法: 0. 将原创 2016-05-15 10:39:08 · 7899 阅读 · 1 评论 -
程序core dump了要记得保留现场
抓到了core, 用gdb xxx core分析, 用bt可以看出堆栈信息。 顺利。 用f命令进入帧, 然后可以用i locals命令查看详细信息, 顺利。 但是, 过了一段时间后, 再次用f命令进入帧, 发现用i locas命令看不到信息了, 为什么呢? 因为当时的so文件被替换了。 所以, 要保留core, 要保留so文件(就类似于保留了a原创 2016-04-04 22:53:59 · 7991 阅读 · 8 评论 -
为什么memset(szBuf, 0, sizeof(szBuf));会莫名其妙core dump?
最近写了点代码, 结果程序必然core dump, 用gdb分析了, 定位在fun函数的这里:memset(szBuf, 0, sizeof(szBuf)); 其中szBuf的定义是char szBuf[102400] = {0}; 真是让我百思不得其解, 这里绝对没有越界啊。 而且, 在别的地方调用fun函数不会出问题啊。 实在定位不出来, 请教了一下相关同原创 2016-04-01 23:54:26 · 9304 阅读 · 1 评论 -
协议文件不一致导致的coredump问题
客户端和服务端之间经常使用类似google protocol buffer这样的工具做应用层协议, 在之前的博文中, 我们说过协议不一致导致的解包失败问题。 本文说手协议不一致产生的core dump问题。 去年, 在去澳门玩之前, 遇到了一个core dump问题, 搞了一些时间, 也没有找到问题的原因。 后来请教别人, 说要怎样怎样解决, 还挺复杂的。 后来继续请教人, 才知道原创 2016-03-26 23:29:53 · 7411 阅读 · 1 评论 -
ldd -r xxx.so命令的重要作用------见招拆招地解决缺库问题(undefined symbol)
在之前的博文中, 我们介绍了ldd这个重要的命令, 在本文中, 继续来强调一下, 顺便说说ldd的-r参数。 最近编译了一个动态库xxx.so, 但一加载的时候, 便报错, 提示信息是: dlopen ......, undefined symbol ...., 于是不断地修改, 不断地重新加载, 花了不少时间。 其实, 完全不用等到加载的时候去发现这个问题, 编译出xxx原创 2016-03-18 23:23:23 · 23403 阅读 · 1 评论 -
新手融入linux项目开发的必过关------编译工程代码
毕业两年半了, 玩过linux嵌入式开发, linux后台开发, 所以打算聊聊linux开发的一个基本问题------编译linux工程代码。 很多朋友毕业后都会从事与linux相关的开发, 这就少不了makefile编译。 在本文中, 我就不说makefile了, 而是聊聊linux工程代码编译的一般思路: 1. 设置环境变量原创 2016-03-08 00:13:39 · 8285 阅读 · 2 评论 -
core文件出现“is not a core dump: File format not recognized”的原因和解决方法(看/proc/pid/limits)
有时候, 程序core dump了, 但是没有生成core, 郁闷哈。 有时候, 程序core dump了, 也产生了core文件, 但core大小为了0, gdb分析的时候, 会出现is not a core dump: File format not recognized, 此时应该打开ulimited -c unlimited开关。 有时候, 程序co原创 2016-02-26 22:43:05 · 25899 阅读 · 10 评论 -
不得不再聊linux中的strings命令
之前我们聊过linux strings的用法和用途, 但据我了解, 还有部分朋友并不常用strings, 这是个不好的习惯。 所以, 本文继续啰嗦一下strings命令. 在软件开发中, 我们经常需要修改代码, 并生成静态库、动态库或者可执行文件, 有时候, 工程太大, 那怎样确定自己改动的代码正确编译到库中去了呢? 用strings命令吧! 为了简便起见, 我们仅仅以可执行文原创 2015-10-29 22:47:51 · 15956 阅读 · 10 评论 -
Linux网络编程--recv函数返回值详解
转载地址: http://www.cnblogs.com/Genesis-007/p/5190552.html 说明: 文中红色部分是我的备注函数原型:1ssize_t recv(int sockfd, void *buf, size_t len, int flags);转载 2017-06-22 00:15:41 · 10294 阅读 · 1 评论 -
如何定位Android NDK开发中遇到的错误(内附我的总结补充)
转自:http://www.youkuaiyun.com/article/2014-12-30/2823366-Locate-Android-NDK作者: 尹春鹏, Testin云测技术副总裁,Testin崩溃大师研发主管。毕业于清华大学工程物理系;专注于移动应用开发,2011年起参与创建Testin,专转载 2015-06-23 23:52:06 · 8343 阅读 · 1 评论 -
亲历fread函数的错误用法及修改验证过程------台上1分钟, 台下1天功
我曾经在http://blog.youkuaiyun.com/stpeace/article/details/42847697中说过:fwrite和fread函数针对的是字符(无边界), 而不是字符串(以'\0'作为边界) 今天呢, 某模块出了一个问题。 据说, 这个问题搞了较长时间。我准备晚上去打球的,毕竟感觉好久没有打了。 结果一个电话过来, 说有个紧急问题需要我协助定位, 我就原创 2015-05-27 22:29:32 · 17676 阅读 · 9 评论 -
利用adb对android手机进行远程截图/截屏
今晚在家捣腾手机, 玩adb的时候, 利用adb对手机进行了截图, 玩玩, 如下:C:\Documents and Settings\Administrator>adb connect 192.168.1.100connected to 192.168.1.100:5555C:\Documents and Settings\Administrator>adb sh原创 2015-05-10 23:56:37 · 16437 阅读 · 8 评论 -
adb连接android手机后, adb remount时出现remount failed:operation not permitted时的迂回解决方案
我很喜欢动手玩一些小工具的, 捣腾捣腾, 感觉动手后, 印象就比较深刻, 而已也能深入理解一些东西, 在这个过程总, 会碰到一些问题, 着手解决一下, 颇有乐趣。 上次在家用adb玩手机, 差点就把手机搞垮了, 后来费劲力量, 自己又修复了, 虚惊一场。今晚 就想用adb把文件塞到盒子里面试试, 结果, 在adb remount(作用是使得文件系统可写)的时候, 出现了operation not原创 2015-05-10 21:57:53 · 22418 阅读 · 6 评论 -
core文件被截断了(core文件存在, 但很小)该怎么办?
在app开发中, 我们绕不开的问题就是crash, 相信大多数人都有类似体会, app用着用着就闪退了。 在linux开发中, 我们绕不开的问题是core, 今天又来聊聊这个问题。 之前我们讨论过, 当程序产生段错误core了之后, 不一定产生core文件, 此时我们可以用ulimit -c unlimited把core开关打开, 这个已经聊过很多次了。原创 2016-07-24 12:11:08 · 12361 阅读 · 1 评论 -
gdb调试core时能用i locals看栈变量、函数行(即不出现No symbol table info available)的必要条件: 1. 编译时有-g参数; 2.so库未被strip脱衣服
我们已经很熟悉用gdb来调试core了, 对于一个完整的core(需要有对应的so), 调试core很简单, 但最近遇到这样一个问题: 用gdb调试过, 能查到core在哪个函数里面, 但是, 无法知道core在哪一行, 用i locals, i args查询显示No symbol table info available, 也就是没法显示对应的栈变量, 这是什么原因呢? 原因有二(我亲自玩过并验证过奋斗): 1. 编译的时候, 没有调试符号信息, 如-g参数 2.原创 2016-07-24 12:41:55 · 20007 阅读 · 0 评论 -
Linux下指定so动态库的加载路径
转载地址:https://blog.youkuaiyun.com/zorelemn/article/details/52596293一、库文件的搜索路径:1、在配置文件/etc/ld.so.conf中指定动态库搜索路径(需要添加其它库文件的路径,在文件的最后添加具体的路径即可 [ 如:/usr/local/lib ],添加后保存退出,然后在命令行ldconfig2、通过环境变量LD_LIBRARY_...转载 2018-04-13 22:22:23 · 30863 阅读 · 6 评论 -
socket编程中对sigpipe信号的处理------Good
转载地址:http://blog.youkuaiyun.com/myd620/article/details/47806205我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试. 但是服务器总是莫名退出,没有core文件.最后问题确定为, 对一个对端已经关闭的socket调用两次write, 第二次将会生成SIGPIPE信号, 该信号默认结束进程...转载 2018-03-17 22:32:37 · 5726 阅读 · 0 评论 -
Linux线程的分离(detached)与结合(joinable)
转载地址:http://www.cnblogs.com/mydomain/archive/2011/08/14/2138454.htm线程的分离与结合 在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回...转载 2018-03-15 23:29:39 · 6391 阅读 · 1 评论 -
我的STC89C52单片机
我的工作和单片机没有任何关系, 只是自己感兴趣, 偶尔玩玩而已, 无聊的时候, 自娱自乐。 来拍个照: 实物抽象化的图为: 这个STC89C52名字是什么意思呢? STC89C52简介: 片内CPU的内核是8051 片内含8K字节的的可反复擦原创 2017-11-26 00:08:42 · 20871 阅读 · 0 评论 -
既生Bin 何生Hex ?
转载地址:https://www.toutiao.com/a6389936124517138690/ 我们在编译生成固件的时候,有时候生成Hex文件有时候生成Bin文件,这两种文件有什么关系呢,它们存在的价值又是什么呢?Hex文件和Bin文件是什么Hex文件是以ASCII文本形式保存编译后的二进制文件信息。Hex文件使用ASCII文本的形式保存转载 2017-11-26 17:12:18 · 5208 阅读 · 0 评论 -
带你了解树莓派
转载地址:http://www.jianshu.com/p/9e5544879cfb在本文中,你学到了树莓派是什么,它为什么存在,如何购买树莓派以及你需要哪些外设来让树莓派启动并运行。你知道了树莓派可用的操作系统并且知道如何获取Raspbian的副本。你还学会了如何让你的树莓派启动并运行,这样就可以学习Python了。本文总结了一些排除树莓派启动故障的技巧。1.1 树莓派是什么转载 2017-11-25 19:36:08 · 12548 阅读 · 0 评论 -
浅谈交叉编译
最近, 在树莓派(arm + linux)上编译出了一个可执行文件, 运行OK, 然后把这个二进制文件放到intel + linux的机器上运行, 发现格式错误。 我第一反应是查看文件的32/64位兼容性, 发现, 不是这个原因。 然后, 才缓过神来, arm指令集和intel指令集不一致, 肯定不能做到二进制兼容啊。 怎么解决呢? 交叉编译, 要么在arm原创 2017-12-12 21:49:19 · 7116 阅读 · 2 评论 -
8051 ,80C51 ,MCS-51这三者的区别
转载地址:http://blog.sina.com.cn/s/blog_5ebf4ad10100f6fh.html MCS-51单片机是指由美国INTEL公司(大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上转载 2017-10-23 23:18:21 · 20396 阅读 · 0 评论 -
用C为8086写程序(我实际运行了一下, 靠谱! 确实可以用C语言给8086喂指令)
转载地址:http://blog.youkuaiyun.com/phodal/article/details/7425925在Google了几天之后,终于得到自己想要的答案,也就是用C给8086写程序,一开始的目标是比较简单的就是用Proteus仿真86,然后写程序。Proteus提供了8086的示例程序,因为是装在D盘上,所以位置大概如下。[plain]转载 2017-10-23 22:11:22 · 11232 阅读 · 0 评论 -
用C语言(keil c)给8051单片机编程来做一个LCD计算器(proteus仿真)
源代码很简单, 直接给部分电路图效果(125*25=3125):原创 2017-10-29 13:10:15 · 12079 阅读 · 5 评论 -
玩下linux中的的poll函数------可以用任何描述符号fd而不限于网络socket
前面我们玩了linux中的select函数, 今天我们来介绍一个与之类似的函数, 作用就是做轮询检测, 建议先看select, 再看poll. 至于函数原型和返回值, 就没有必要单独说了, 网上一搜一大堆。 直接上菜:#include #include #include #include #include #include #include #include原创 2017-06-24 14:40:33 · 8367 阅读 · 5 评论 -
小技巧:打印log时, 多了一个感叹号, 至少节省了1-2个小时!------又来说strings
最近, 我花了半天时间改的代码, 别的同事携带发布后, 我发现我的修改并没有生效, 很纳闷。 难道, 我要去check一下我的代码逻辑吗? 在测试环境上测试, 明明是没有问题的啊, 怎么发布后就不生效呢? 于是, 我怀疑, 可能是发布的时候, 并没有真正携带上我的修改。 最后的结论是: 别的同事没有编译我修改的基础库, 导致确实没有携带我的修改。 怎么发现的呢? 我原创 2017-08-05 10:19:43 · 7444 阅读 · 1 评论 -
那一年, 我第一次在工作中用到了三次握手的分析
那一年, 我会点socket编程, 但对tcp其实一无所知, 听说过三次握手, 但不知道这些有什么作用, 反正socket编程搞起来也是能跑通。呜呼哀哉。 某次, 我的客户端要去连接一个位于nat之后的嵌入式设备, 结果connect失败, 对方跟我说, 抓包发现没有建立三次握手。后来我才学会了三次握手在实际工作中的分析方法, 呵呵哒。 对了, 上述情况是行不通原创 2017-07-19 23:48:36 · 7282 阅读 · 0 评论 -
用linux命令和程序实际测试一下单进程能打开的最大的句柄数(也可以说是文件数)------并不一定是1024/2048哈
本文中, 我们继续来做小实验, 看看linux单进程能打开的最大的句柄数(其实也是文件数, 因为linux下一切皆文件嘛), 命令如下:xxxxxx:~/network> ulimit -acore file size (blocks, -c) unlimiteddata seg size (kbytes, -d) unlimitedschedul原创 2017-06-25 15:50:10 · 9573 阅读 · 1 评论 -
秒杀stl sort coredump问题
最近, 一位同学在开发中遇到了core dump问题, 当时没有看出来, 后来请某哥帮看, 我在旁边听他们的分析与讨论, 无意中听到了“排序”这个字眼, 于是就有点敏感了, 凑过去一看, 果然是stl sort coredump问题。 于是, 让那位同学改一下, 果然就没有coredump问题了, 哈哈! 详细信息请参考我博文之前介绍过的stl sort cor原创 2016-08-13 23:59:38 · 7820 阅读 · 1 评论 -
到底该不该用strip脱衣服
之前做嵌入式开发, so库都是被strip脱掉了衣服, 原因很简单: 最小化占地空间。 现在做后台开发, 发现有时候so库被strip脱了衣服, 有时候又没有? 到底该不该被strip脱掉衣服呢? 这个问题见仁见智。 为了方便定位问题(比如定位 core dump问题), 我建议, 尽量不要strip, 除非存储紧张。 在后台开发中, 我非常原创 2016-08-02 23:46:24 · 8344 阅读 · 1 评论 -
Linux下IP冲突检测程序源码及分析(利用免费arp)---感谢原作者
由于没有找到源代码的原作者, 所以就给出一个间接的转载地址:http://blog.youkuaiyun.com/wanxiao009/article/details/5622296, 再次感谢源代码原作者 该程序运行在linux环境下,可以检测ip冲突, 我试过, 挺靠谱的,现摘录如下:#include #include #include #include #inclu转载 2015-04-19 18:15:41 · 11249 阅读 · 6 评论 -
以前一直ok的程序今天不ok了---查找配置库修改记录快速定位bug
某系统的某功能一直正常, 结果呢, 今天发现突然不正常了,根据日志发现, 程序阻塞在某一个大函数中, 没有出来。 一般来说, 阻塞住了的最常见原因是: 1. 死循环.2 遇到了阻塞函数。当然, 主要是前者。 根据这两个思路, 又加了一些日志进行跟踪定位, 最后发现, 程序果然卡在while循环中。 但是, 这里一直是好的啊! 怎么可能出问题呢? 进一步跟踪发现, 某底层函数表现原创 2015-04-07 23:48:36 · 7341 阅读 · 1 评论 -
无奈而又苦逼的二分版本回退法定位新引入的bug!!!
昨天测试人员和开发人员都发现, 某新版本有严重的bug. 群里已经开始嚷嚷了, 但没有谁知道是谁引入的问题。本来呢, 这个问题不应该是由我去定位, 但主管让我帮定位一下, 毕竟时间太紧急, 必须尽快解决, 开始的时候, 我还是有些压力的跟有经验的员工讨论后, 也没有比较好的办法, 所以, 只能自己想办法了。为了方便叙述, 下面我会对实际场景进行抽象。 经我亲自验证发现原创 2015-04-01 21:35:23 · 7562 阅读 · 1 评论 -
printf("hello world"); x=6; 日志中没有"hello world", 但x=6居然执行了?
今天碰到一个这样的问题:原创 2014-08-08 22:20:08 · 7527 阅读 · 0 评论 -
玩转Android中的setprop, getprop, watchprops命令
setprop, getprop和watchprops都与环境bian原创 2014-05-12 23:12:12 · 18116 阅读 · 0 评论