换了一个要用C语言的工作岗位,主要是写一些硬件端口的驱动。
目前主要还是在芯片厂商提供的现成的库的基础上进行修改。感觉一直这样下去水平提不高。
那么如何深入的学习C语言?有没有什么推荐的学习路径?求各位大大指点。
网友评论:去学汇编。。。
看linux内核源码,然后自己实现一个。
换工作就行了。
GDB
linux内核开发
c语言只是语言工具,光精通工具没啥大用,关键要熟悉各种体系和系统,而c语言的应用范围又很广
不管怎么说,精通C比精通C++要容易些。
请问lz是在哪里工作?我也想找这方面的工作
C啊…精通一些奇怪的东西就行,比方说内存管理、指针地址、宏定义之类的一些……还有数据结构structs,文件,io流底层开发不要求精通C,大致熟悉C的语法体系,不至于搞混一些重要概念即可。其次,写驱动可不像写应用层程序,在现有基础上作修改是正确路线,尽量使用现有模块和机理,省时省力,走少很多弯路。所以基本与你C的水平无关。除非你自己想从零开始做新的底层工作机理, 建立全新的驱动模型,但这样做的话,你是不是想死?
嵌入式程序员算不算混吃等死?有没有业内现身说法?驱动本来不就是应该让厂商写然后去改嘛……撑死照着时序图写程序而已
expert c programming
c的特点就是别说精通。。。。开源代码翻翻永远给你惊喜。。。。“卧槽,还能这样”,就这感觉。。。
额,比如说google的大牛可以用一行printf实现一个http服务器,简直鬼畜,网上有代码,解释也有,解释的文字都是代码好几倍。。。
不那么鬼畜的例子。。nginx的内存(池)很经典,linux kernel里面鬼畜的函数指针。。。。转帖:
Jeff Dean有次用一句printf()实现了一个web服务器,而其他工程师添加了数千行注释但是仍然不能完全弄清楚它是如何工作的。而这个程序正是如今的Google Search首页。
#include
int main(int argc, char *argv[])
{
printf("%*c%hn%*c%hn"
"\xeb\x3d\x48\x54\x54\x50\x2f\x31\x2e\x30\x20\x32"
"\x30\x30\x0d\x0a\x43\x6f\x6e\x74\x65\x6e\x74\x2d"
"\x74\x79\x70\x65\x3a\x74\x65\x78\x74\x2f\x68\x74"
"\x6d\x6c\x0d\x0a\x0d\x0a\x3c\x68\x31\x3e\x48\x65"
"\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21\x3c\x2f"
"\x68\x31\x3e\x4c\x8d\x2d\xbc\xff\xff\xff\x48\x89"
"\xe3\x48\x83\xeb\x10\x48\x31\xc0\x50\x66\xb8\x1f"
"\x90\xc1\xe0\x10\xb0\x02\x50\x31\xd2\x31\xf6\xff"
"\xc6\x89\xf7\xff\xc7\x31\xc0\xb0\x29\x0f\x05\x49"
"\x89\xc2\x31\xd2\xb2\x10\x48\x89\xde\x89\xc7\x31"
"\xc0\xb0\x31\x0f\x05\x31\xc0\xb0\x05\x89\xc6\x4c"
"\x89\xd0\x89\xc7\x31\xc0\xb0\x32\x0f\x05\x31\xd2"
"\x31\xf6\x4c\x89\xd0\x89\xc7\x31\xc0\xb0\x2b\x0f"
"\x05\x49\x89\xc4\x48\x31\xd2\xb2\x3d\x4c\x89\xee"
"\x4c\x89\xe7\x31\xc0\xff\xc0\x0f\x05\x31\xf6\xff"
"\xc6\xff\xc6\x4c\x89\xe7\x31\xc0\xb0\x30\x0f\x05"
"\x4c\x89\xe7\x31\xc0\xb0\x03\x0f\x05\xeb\xc3",
((((unsigned long int)0x4005c8 + 12) >> 16) & 0xffff),
0, 0x00000000006007D8 + 2,
(((unsigned long int)0x4005c8 + 12) & 0xffff)-
((((unsigned long int)0x4005c8 + 12) >> 16) & 0xffff),
0, 0x00000000006007D8 );
}
这段代码只能在独有Linux AMD64位编译器(gcc版本是4.8.2(Debian 4.8.2-16))的系统上运行,编译命令如下:
gcc -g web1.c -O webserver
这个类似于Chuck Norris Facts
混吃等死中
不过组里大牛看起来挺肝的
这个第一句是个夸张的排比例子里面的。后面的代码是较真的蛋疼星人做的,别把前面那句也当真。你也看到了其实只是用了非常复杂的printf输出了一条命令而已
加油,大不了跳槽做游戏服务器