开源项目学习推荐
开源项目学习推荐,目的在于学习开源项目的设计思想。
C Language网络底层1、**libuv**
libuv是一个跨平台、专门写给nodejs的库,它的设计是围绕着事件驱动的异步I/O模型。
2、**libevent**
Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库。
3、**libev**
libev是libevent之后的一个事件驱动的编程框架,其接口和libevent基本类似。据官方介绍,其性能比libevent还要高,bug比libevent还少。
传输层应用层1、**libcurl**
学习各种网络协议,学HTTP请求。
2、**Tinyhttpd**
Tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质。
3、**lighttpd**
一款开源 Web 服务器软件,安全快速,符合行业标准,适配性强并且针对高配置环境进行了优化。
4、**Webbench**
linux下使用的非常简单的网站压测 ...
职业发展
学习方法
1.广泛阅读2.迁移学习3.归纳总结
职业
1、嵌入式工程师2、中医3、投资者与合作者
嵌入式工程师职业区分1、嵌入式驱动工程师:
编写和移植各种芯片驱动(如音频芯片),优化硬件设备驱动(如温湿度传感器),得精通各种硬件接口协议(如I2C协议)、系统调度、信号量、锁机制等等,开发难度最大。
该类开发者一般是软硬件综合型人才,一般的嵌入式驱动工程师指LINUX上的驱动开发工程师,需要精通Linux驱动框架(platform框架、input子系统框架等),结合芯片本身去编写驱动,驱动的好坏很大程度上决定一个产品的好坏。
2、嵌入式系统工程师:
主要是编写固件,根据不同平台移植操作系统,根据应用场景来优化系统,需要熟悉整个操作系统组成与调度,对固件的稳定性高求很高。
3、嵌入式应用工程师:
编写业务逻辑程序,调用驱动工程师提供的接口控制设备,软件开发过程所涉内容范围非常广,主要使用C语言开发,但经常会涉及C++、Java、python、Java、PHP等各类语言以及各种脚本语言、数据库、前端后台、各种通讯协议、甚至一些从来没听过的协议或概念。这需要很强的学习能力。
掌握技 ...
文字摘录
鸡汤所在,在于题目,文字如流水账。
劝解一
1、把握 分寸,不走太近 ,是一种能力2、丑的原因是 不自爱,别为自己的邋遢找借口3、自我认同,你都不在乎你自己,谁会来在乎你4、拒绝语言的暴力5、请把说话的机会让给别人6、有时候,倾听会让你变得更有趣7、最有意义的话在合适的时机8、好好说话就是好好思考9、掌握一门”核心技术“10、工作快起来,生活慢下来11、你有多久没赞美生活了12、学会在生活中成长
情商简述人的关系
1、人与物之间的关系。2、人与人之间的关系。3、人与自己内心之间的关系。
情商的本质是:不是为了控制别人,而是为了“控制自己”。 原则是:随时感知自己的情绪的同时,考虑“我的行为可能会对别人产生什么影响”,将其控制到“在线,但不至于淹没理智”的程度。情商需要有共情的支持,关键并不是“站在对方的角度想象自己此时此刻是什么感受”,而是“努力想象和理解他人的想法”。具体来说,共情要求我们关注他人,而非关注自身,也就是所谓的“如得其情,则哀矜而勿喜”,情商只是认识世界的众多方式之一,它也许是一种美德,但肯定不是成为人生赢家的捷径,也不是 ...
男人的帅,可帅于天地间
庄子的故事中,总是有莫名有趣,却又无法理解的故事,违背人们正常的认识,这些故事空灵和高雅,基于生活却又好像离普通人又很远去,是对人生的高尚的认识,不恭生于现实的生活,作为个聆听者和学习者,如何将这种具有灵性的思想紧贴于我的生活,如此具有吸引力。
转载于男人的帅,帅在形骸之外
丑陋的男人 鲁哀公问孔子:卫国有一个长相很丑的人,名叫哀骀它。男人见了,舍不得离开他;女人见了,请求父母道:与其做别人的妻子,不如做他的小妾。这样的女人还不止十几个。没有听说他要倡导什么,只见他应和而已。他无权去解救别人的死难,也无钱去养活别人的肚子,相貌丑陋到使人见了都感到惊骇,附和而不号召,见识不超出尘世之外,然而女人男子都乐于亲附他。他必定有异于常人之处。我召他来,果然见其相貌丑陋惊世骇俗。但是和我相处不到一月,我就感觉他确有过人之处;不到一年,我就很信任他了。国家刚好空出宰相之位,我就把国事委托给他,他却淡然而无意接受,漫然而不加推辞。我感觉很惭愧,最终还是将国事托付给他。然而没过多久,他却离开我走了,我忧闷得很,若有所失,好象国中再没有人可以与共欢乐似的,这究竟是一个什么样 ...
Emacs基本配置
Emacs是与Vim一样轻量级的文本编辑器,它自身支持elisp的语法,所以比Vim的优点在于可以自己写脚本实现功能。
Emacs简介 待续……
Emacs安装和移出参考教程。
安装和删除
bash123456# 添加Emacs源并安装sudo add-apt-repository ppa:kelleyk/emacssudo apt updatesudo apt install emacs26# 删除sudo apt remove --autoremove emacs26 emacs26-nox
添加软件源
bash123456789cd ~/.emacs.dtouch init.elvim init.el# 添加; Add the emacs config source.(require 'package)(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") ...
vim的C/C++开发环境配置
Vim是嵌入式开发中,最容易接触到的文本编辑器,作为Linux自带文本编辑器,非常轻量集,适合在低适配的环境下使用,Vim跟传统的IDE比较起来,是一张白纸,任何功能都需要自己配置,扩大了学习时间,IDE集成功能,但非灵活,所以需要针对需求进行选择。
Vim介绍 Vim是一个跨平台的非常轻量级的文本编辑器,因为其强大的扩展能力和自定义的配置,使其收到很多人的喜爱,它的缺点也是因为所有功能都需要自己实现所以学习成本比较高。
Vim安装(>8版本)
Install Vim
bash123sudo add-apt-repository ppa:jonathonf/vimsudo apt updatesudo apt install vim
Remove Vim
bash12sudo apt remove vimsudo add-apt-repository --remove ppa:jonathonf/vim
Vim插件管理器Vundle(不推荐, 比较老)cmd12345678910111213141516171819202122232425 ...
C++ Map学习
Demo 展示了如何在Map中绑定一个类指针,包括类的申请和释放,同样也展示了嵌套的Map的使用。
demo.cpp123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293#include <iostream>#include <map>using namespace std;class SocKet{public: string name; int id; void pri_name() { cout << name << endl; } void pri_id() { cout << id << endl ...
C语言日志系统zlog使用
C的项目中一般都使用printf函数作为打印,这种日志方式只能输出实时的日志,不能将一些错误的日志保存下来,方便在后续的维护中查找原因,本文介绍使用一个用C语言写的日志系统zlog,可以在C项目中使用。
Zlog简介Zlog是一个可靠性、高性能、线程安全、灵活、概念清晰的纯C日志函数库。
Zlog源码Zlog源码在Github上,源码网址。
Zlog用户手册Zlog提供了一份详细的使用手册,可按照手册上的例子探索Zlog的功能,参考手册。
X86编译cmd12make CC=gcc PREFIX=/home/dev/workspace/tmp/zlog-1.2.15/x86_libmake CC=gcc PREFIX=/home/dev/workspace/tmp/zlog-1.2.15/x86_lib install
ARM编译cmd12make CC=arm-none-linux-gnueabi-gcc PREFIX=/home/dev/workspace/tmp/zlog-1.2.15/libmake CC=arm-none-linux-gnuea ...
C++和C的相互调用
C++调用C C++在调用动态库时需要使用Linux自带的dlopen,dlclose,dlsym函数,此时需要对这些函数进行封装,让C++可以使用。
C函数封装 C++中在编译时会自动根据__cplusplus字段来把决定以C的方式还是C++方式编译,根据这个特性对C的头文件进行封装。
dylibapi.h1234567891011121314151617181920212223242526#ifndef DYLIBAPI_H#define DYLIBAPI_H#include <stdio.h>#include <string.h>#include <unistd.h>#include <dlfcn.h>#ifdef __cplusplusextern "C"{#endiftypedef int (*FuncType_DrvInit)(void);void *LoadDLL(char *dllname);int ReLoadDLL(void *handle);int ReLoadDLL(void * ...