tag 标签: 源代码

相关帖子
相关博文
  • 热度 15
    2014-10-23 16:01
    887 次阅读|
    8 个评论
        总的思路来自于这一片帖子: blog.csdn.net/zeroboundary/article/details/24411767   对于身处在墙里面的程序员们来说,获取 Android 代码资源还是很不容易的,但是,作为程序员又必须需要这样一份开源的代码财富,行走江湖这样的东西是不能少的。当然,如果你碰巧在一家从事 Android 开发的公司工作的另说。好了,言归正传,这里提前声明一点, 那就是在我说的这些步骤中仍然是需要你进行翻墙的操作的 , 另外,大概需要你预备大概 150G 左右的磁盘空间,如果实在是没有那么多空间,我也是爱莫能助的,还请出门绕道。 不过这个操作不是十分的困难的,如果你已经感受到了一些失败的苗头,那么还请您出门右拐,实在不好意思把辛苦看完文章并且还进行有意尝试的人们坑了。但是我可以保证,下面介绍的所有步骤都是亲测可用的(翻墙那一步除外),您既然选择上船跟我走一遭,不能让您空手不是。   好了,光阴似箭,日月如梭,大好年华还在前头,咱们就不浪费宝贵时间了,早点同步完代码早点“下班”嘛。作者给出了网盘的地址: pan.baidu.com/disk/home#path=%252Fandroid   我的建议是,申请一个百度的帐号,安装一个百度网盘的程序,当然,这样就是说你需要在 windows 下进行下载的操作了,因为网盘的应用端并没有 linux 版本的,不过你使用 wine 的除外了。所以这里我假设你在 windows 下进行的百度网盘资源的下载。在百度网盘的客户端中进行下载的操作是比较可靠的,因为它支持断点续传,如果是使用浏览器进行直接的下载会造成下载的不完整,按照我下载的情况,差不多是整整两天的节奏,然后就要恭喜你,第一步就完成啦。   是的,你没有听错,下载完毕只是第一步,现在你需要确认一下一共下载了 41 个文件,其中两个文件是 README 文件,其余的都是压缩的文件,这个压缩也没有那么的可怕,之前我为这些压缩的文件预留的空间大概是 50G 左右,所以很担心 tar.bz2 文件解压后所占用的空间,但是后来经过了一些测试发现基本是 1 : 1.1 的比例,这样也就是说, 50G 的空间肯定是足够了的。好了,下面进行第二步,这里需要你对 git 以及 repo 有一些认识,没有就读读之前给出的博客上下方的英文同步方法说明吧。   差点忘记了,你需要进行解压的操作,这个在 README_NEW.txt 文件中有说明,对所有的一共 39 个文件进行操作,这个过程大概是一个下午的时间,或者是更短。   接下来,就是一个镜像同步的过程,你可能要问,难道不是直接解压完毕后就得到源代码吗?不是的,因为这里我们采用的是本地镜像的方法,也就是说,当初拷贝的是远端的镜像结构,而不是从这个镜像结构中得到的代码,这里的原因应该就是作者所说的减轻压力缩短下载的时间吧。   接下来,在另一个地方,是的,你没有听错,之前使用了 40G+42G ,剩下的其实没有那么大的空间需求了,你可以在官网或是其他的途径查到源码的大小是 20G 左右的,所以不用太过担心。这样你可能会说上面的减轻下载的压力是胡扯,不过直接的 git 仓库镜像下载确实是比一个一个源代码文件的同步要省时一点的,就比如你拷贝的时候是很多的小文件和一个同样大小的大文件,拷贝的时间是差别很大的,就解释这么多了。现在新建一个文件路径,你的代码将要在这个目录中进行同步出来,操作的步骤也在那一篇博客的下方给出来了,一个是 repo init -u xxxxx ,另一个就是 repo sync 。其中第一个中需要链接到一个网址进行 git 仓库的初始化,这里就需要你进行翻墙的操作了,这里具体的方法就不说了,相信你选择看到这里没有被上面我写的红色内容吓到应该是有办法了的。 sync 指令回车后就是漫长的代码签出了,这里是在本地的仓库的签出,所以是很容易并且很快捷的了,基本是 2M/s 的速度。   最后,最后的最后,你就在你设定好的目录下看到你所需要的 Android4.4 的源代码啦。恩恩,还是有一点小小的激动的呢。  
  • 热度 9
    2012-7-13 10:06
    562 次阅读|
    0 个评论
      在上两篇博文里我们介绍了W5300E01-ARM 交叉编译器(Cross Compiler)用户手册的前半部分,包括第一章简介和第二章的源代码下载以及第三四五章,分别是LINUX内核安装,‘BINUTILS’安装和‘GCC’安装。 在这篇博文里我们将介绍第六章’glibc’安装。希望对大家有所帮助。 第一篇博文在这里: http://forum.eet-cn.com/BLOG_ARTICLE_13051.HTM 第二篇博文在这里: http://forum.eet-cn.com/BLOG_ARTICLE_13072.HTM     6.‘glibc’ 安装 6.1移动到工作目录并解压 ‘glibc’压缩包 cd /cross_tools/ tar jxvf glibc-2.3.3.tar.bz2 6.2在 ‘glibc’ 目录下解压‘linuxhreads’ tar –C glibc-2.3.3 –jxvf glibc-linuxthreads-2.3.3.tar.bz2 cd glibc-2.3.3 6.3修改‘Makeconfig’ 文件. (第514行) 修改前       gnulib := -lgcc –lgcc_eh       修改后       gnulib := -lgcc         6.4修改‘csu/Makefile’文件(第107行) 修改前       CFLAGS-initfini.s = -g0 –fPIC –fno-inline-functions       修改后       CFLAGS-initfini.s = -O1 –g0 –fPIC –fno-inline-functions         6.5修改‘linuxthreads/Makefile’ 文件(第104行) 修改前       CFLAGS-pt-initfini.s = -g0 –fPIC –fno-inline-functions       修改后       CFLAGS-pt-initfini.s = -O1 –g0 –fPIC –fno-inline-functions         6.6修改‘sysdeps/generic/framestate.c’文件. (第44行) 修改前       frame_state_for = fallback_frame_state_for;         修改后       #ifndef __USING_SJLJ_EXCEPTIONS__ frame_state_for = fallback_frame_state_for; #else frame_state_for = abort; #endif                 6.7修改‘sysdeps/arm/machine-gmon.h’文件. (第 35 ~ 38行) 修改前       static void mcount_internal (u_long frompc, u_long selfpc);   #define _MCOUNT_DECL(frompc, selfpc) \ static void mcount_internal (u_long frompc, u_long selfpc)             修改后       #define _MCOUNT_DECL(frompc, selfpc) \ void mcount_internal (u_long frompc, u_long selfpc)           6.8修改‘sysdeps/unix/sysv/linux/arm/ioperm.c’文件(第 98 ~ 104行) 修改前       static int init_iosys (void) { char systype ; int I, n; static int iobase_name = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_SHIFT };                     修改后       #include static int init_iosys (void) { char systype ; int I, n; #if LINUX_VERSION_CODE 132119 static int iobase_name = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_SHIFT }; #else static int iobase_name = { CTL_BUS, CTL_BUS_ISA, BUS_ISA_PORT_SHIFT }; #endif                               创建一个目录对 ‘glibc’进行编译 mkdir build cd build 6.9安装编译环境 CC=arm-linux-gcc ../configure –host=arm-linux –build=i686-pc-linux-gnu \ --prefix=/usr/local/arm/arm-linux –with-headers=/usr/src/linux/include \ --enable-add-ons=linuxthreads –enable-shared 6.10编译平台。 如果你在编译‘csu/version-info.h’文件时发生错误,打开 修正这个文件并且重新编译。 (第1~4行) make 修改前       “Compiled on a Linux 2.6.24-16-generic system on 2008-10-14 “ “Available extensions: “             修改后       “Compiled on a Linux 2.6.24-16-generic system on 2008-10-14“ “Available extensions:“         make 6.11安装编译的 ‘glibc’程序库. Make install 6.12检查安装的 ‘glibc’ 程序库 ls /usr/local/arm/arm-linux/lib     如果您有任何疑问,请直接留言或登录WIZnet官方网站:http://www.wiznettechnology.cn/ 或者来电:86-10-84539974(转166),QQ:2377211388, 邮箱:wiznetbj@wiznettechnology.com  联系人:Jerry ,谢谢! 公司微博是: http://weibo.com/wiznet2012 公司博客是:http://blog.csdn.net/WIZnet2012  
  • 热度 6
    2012-4-20 10:12
    780 次阅读|
    0 个评论
    接上文 Arduino 和 WIZnet: http://forum.eet-cn.com/BLOG_ARTICLE_12057.HTM 具体代码如下: Code to test wiznet WIZ810MJ module See: Current features: * Read register/address values * Write register/address values * Configure networking to enable ping * Terrible hacked-together code License: LGPL (Although note spi_transfer comes from the Playground originally.) */ // Define SPI-related pins #define PIN_DATA_OUT 11 // MOSI (Master Out / Slave In) #define PIN_DATA_IN 12 // MISO (Master In / Slave Out) #define PIN_SPI_CLOCK 13 // SCK (Serial Clock) #define PIN_SLAVE_SELECT 10 // SS (Slave Select) #define PIN_RESET 9 // WIZnet module /RESET #define WIZNET_OPCODE_READ 0x0F #define WIZNET_OPCODE_WRITE 0xF0 #define DUMMY_DATA 0xFF void setup () { Serial.begin(9600); Serial.println("Setup enter..."); Serial.print("SPCR: "); Serial.println(SPCR, BIN); // Configure SPI // Configure I/O pins pinMode(PIN_DATA_OUT, OUTPUT); pinMode(PIN_DATA_IN, INPUT); pinMode(PIN_SPI_CLOCK, OUTPUT); pinMode(PIN_SLAVE_SELECT, OUTPUT); digitalWrite(PIN_SLAVE_SELECT, HIGH); // Disable slave // Configure SPI Control Register (SPCR) (All values initially 0) // Bit Description // 7 SPI Interrupt Enable -- disable (SPIE -- 0) // 6 SPI Enable -- enable (SPE -- 1) // 5 Data Order -- MSB 1st (DORD -- 0) (Slave specific) // 4 Master/Slave Select -- master (MSTR -- 1) // 3 Clock Polarity -- (CPOL -- 0) (Slave specific) ("Mode") // 2 Clock Phase -- (CPHA -- 0) (Slave specific) // 1 SPI Clock Rate Select 1 -- } (SPR1 -- 0) // 0 SPI Clock Rate Select 0 -- } fOSC/4 (SPR0 -- 0) ("Fastest" but see SPI2X in SPSR) SPCR = (1 Serial.print("SPCR: "); Serial.println(SPCR, BIN); // Clear previous data and status (TODO: Determine if necessary/better way.) // (Based on Playground SPI example.) byte dummy; dummy = SPSR; dummy = SPDR; delay(10); // Serial.println((1 // Serial.print("IODIR response: "); // iodirVal = getRegister(deviceOpcodeRead, REG_IODIR); // Serial.println(iodirVal, BIN); // setRegister(deviceOpcodeWrite, REG_IODIR, newVal); Serial.println("Triggering reset..."); pinMode(PIN_RESET, OUTPUT); digitalWrite(PIN_RESET, HIGH); // no reset delay(10); // Pretty arbitrary length digitalWrite(PIN_RESET, LOW); // reset delay(10); digitalWrite(PIN_RESET, HIGH); // no reset delay(10); Serial.println("Reset triggered..."); // Attempt read Serial.println("Read attempt..."); // digitalWrite(PIN_SLAVE_SELECT, LOW); // Enable slave /* byte data; data = spi_transfer(0x0F); // read Serial.print("Response: "); Serial.println(data, HEX); data = spi_transfer(0x00); // address part1 Serial.print("Response: "); Serial.println(data, HEX); data = spi_transfer(0x18); //address part2 //18 should return 0xD0 after reset. Serial.print("Response: "); Serial.println(data, HEX); data = spi_transfer(0xFF); // dummy Serial.print("Response: "); Serial.println(data, HEX); digitalWrite(PIN_SLAVE_SELECT, HIGH); // Disable slave */ // RTR Retry Time-value Register Serial.print("Read 0x0017: "); Serial.println(readAddressValue(0x00, 0x17), HEX); Serial.print("Read 0x0018: "); Serial.println(readAddressValue(0x00, 0x18), HEX); Serial.println("Read attempt end..."); Serial.println("Write attempt start..."); Serial.print("Initial read 0x0001: "); Serial.println(readAddressValue(0x00, 0x01), HEX); writeAddressValue(0x00, 0x01, 0xC0); Serial.print("Post-write read 0x0001: "); Serial.println(readAddressValue(0x00, 0x01), HEX); Serial.println("Write attempt end..."); Serial.println("Configure device..."); // default gateway writeAddressValue(0x00, 0x01, 0xC0); writeAddressValue(0x00, 0x02, 0xA8); writeAddressValue(0x00, 0x03, 0x02); writeAddressValue(0x00, 0x04, 0x65); // subnet mask writeAddressValue(0x00, 0x05, 0xFF); writeAddressValue(0x00, 0x06, 0xFF); writeAddressValue(0x00, 0x07, 0xFF); writeAddressValue(0x00, 0x08, 0x00); // source hardware address (MAC?) writeAddressValue(0x00, 0x09, 0x00); writeAddressValue(0x00, 0x0A, 0xDE); writeAddressValue(0x00, 0x0B, 0xAD); writeAddressValue(0x00, 0x0C, 0xBE); writeAddressValue(0x00, 0x0D, 0xEF); writeAddressValue(0x00, 0x0E, 0x00); // source ip address writeAddressValue(0x00, 0x0F, 0xC0); writeAddressValue(0x00, 0x10, 0xA8); writeAddressValue(0x00, 0x11, 0x02); writeAddressValue(0x00, 0x12, 0x69); Serial.println("End configure device..."); Serial.println("Setup exit..."); } byte readAddressValue(byte addressHiByte, byte addressLowByte) { // TODO: use a word for the address instead byte data = 0x00; digitalWrite(PIN_SLAVE_SELECT, LOW); // Enable slave // TODO: Check response values? e.g. 0x00, 0x01, 0x02 spi_transfer(WIZNET_OPCODE_READ); spi_transfer(addressHiByte); spi_transfer(addressLowByte); data = spi_transfer(DUMMY_DATA); digitalWrite(PIN_SLAVE_SELECT, HIGH); // Disable slave return data; } void writeAddressValue(byte addressHiByte, byte addressLowByte, byte targetValue) { // TODO: use a word for the address instead digitalWrite(PIN_SLAVE_SELECT, LOW); // Enable slave // TODO: Check response values? e.g. 0x00, 0x01, 0x02 spi_transfer(WIZNET_OPCODE_WRITE); spi_transfer(addressHiByte); spi_transfer(addressLowByte); spi_transfer(targetValue); digitalWrite(PIN_SLAVE_SELECT, HIGH); // Disable slave } /* byte getRegister(byte targetDeviceOpcode, byte registerAddress) { digitalWrite(PIN_SLAVE_SELECT, LOW); // Enable slave spi_transfer(targetDeviceOpcode); spi_transfer(registerAddress); // The register we want to read byte data; // Correct type? data = spi_transfer(0xFF); // Transfer dummy byte to get response digitalWrite(PIN_SLAVE_SELECT, HIGH); // Disable slave return data; } */ /* void setRegister(byte targetDeviceOpcode, byte registerAddress, byte value) { // TODO: Do Better? digitalWrite(PIN_SLAVE_SELECT, LOW); // Enable slave spi_transfer(targetDeviceOpcode); spi_transfer(registerAddress); // The register we want to write spi_transfer(value); digitalWrite(PIN_SLAVE_SELECT, HIGH); // Disable slave } */ // From Playground char spi_transfer(volatile char data) { SPDR = data; // Start the transmission while (!(SPSR (1 { }; return SPDR; // return the received byte } void loop() { }   欢迎大家留言评论~~
  • 热度 8
    2012-4-18 09:45
    1507 次阅读|
    0 个评论
    我们在利用Arduino开发网络服务器的时候,会用到以太网Shield。在其中加入以太网库后,你的设备将能够通过以太网Shield应答HTTP的请求。在打开浏览器并确认你的以太网Shield的IP地址后,你的Arduino将会用足够的HTML来应答浏览器,并让浏览器显示六个模拟针脚的输入值。 需要的硬件 Arduino 以太网 Shield 兼容Shield的 Arduino 板 Circuit 电路 以太网shield能让我们的Arduino通过SPI总线连接到一个WIZnet以太网控制器。以太网shield利用第10、11、12、13针脚来连接WIZnet的SPI。以太网shield的新产品在开发板上含有一个SD卡。数字针脚4是用来控制SD卡上面的slave select针脚。 以太网shield应当连接到一个具有以太网线的网络。你需要在程序中更改网络设置来和网络进行通信。 Arduino会被放置在以太网shield下面 示意图 源代码 /*   Web Server    A simple web server that shows the value of the analog input pins.  using an Arduino Wiznet Ethernet shield.     Circuit:  * Ethernet shield attached to pins 10, 11, 12, 13  * Analog inputs attached to pins A0 through A5 (optional)    created 18 Dec 2009  by David A. Mellis  modified 20 Mar 2012  by Tom Igoe    */ #include #include // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = {    0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,1, 177); // Initialize the Ethernet server library // with the IP address and port you want to use  // (port 80 is default for HTTP): EthernetServer server(80); void  setup () {   Serial.begin(9600);    // start the Ethernet connection and the server:   Ethernet.begin(mac, ip);   server.begin();   Serial.print("server is at ");   Serial.println(Ethernet.localIP()); } void  loop () {    // listen for incoming clients   EthernetClient client = server.available();   if (client) {     Serial.println("new client");      // an http request ends with a blank line     boolean currentLineIsBlank = true;     while (client.connected()) {       if (client.available()) {         char c = client.read();         Serial.write(c);          // if you've gotten to the end of the line (received a newline          // character) and the line is blank, the http request has ended,          // so you can send a reply         if (c == ' \n '  currentLineIsBlank) {            // send a standard http response header           client.println("HTTP/1.1 200 OK");           client.println("Content-Type: text/html");           client.println("Connnection: close");           client.println();           client.println("");           client.println("");                     // add a meta refresh tag, so the browser pulls again every 5 seconds:           client.println(" ***** http-equiv="strong" / \"refresh \"  content= \" 5 \" ");            // output the value of each analog input pin           for (int analogChannel = 0; analogChannel  6; analogChannel++) {             int sensorReading = analogRead(analogChannel);             client.print("analog input ");             client.print(analogChannel);             client.print(" is ");             client.print(sensorReading);             client.println(" ");                  }           client.println("");           break;         }         if (c == ' \n ') {            // you're starting a new line           currentLineIsBlank = true;         }          else if (c != ' \r ') {            // you've gotten a character on the current line           currentLineIsBlank = false;         }       }     }      // give the web browser time to receive the data     delay(1);      // close the connection:     client.stop();     Serial.println("client disonnected");   } }   英文详细内容请参考:http://arduino.cc/en/Tutorial/WebServer 对于WIZnet的产品,如果您有什么疑问请直接留言也可以登录WIZnet的官网:http://www.wiznettechnology.cn  或者来信:Tel: 86-10-84539974(转166),QQ:2464237212,邮箱:wiznetbj@wiznettechnology.com,联系人:Lily Zhang,谢谢!        
  • 热度 7
    2011-6-18 12:30
    1473 次阅读|
    0 个评论
      从 BlogJava-首页技术区   作者: 张昊     一、什么是代码高手?你怎么证明自己是代码高手?  知道许多代码技巧、JS炫彩技巧的人大有人在。你知道多少个.net函数,这一点都没有意义。你知道多少个新鲜IT名词,多少技术介绍,这也没有意义。做,真正做一个原型,做一个项目,解决你手头棘手的问题,这才有意义。 1、快速准确的理解别人说的-〉  2、快速的开发,还准确的反映了别人的需求-〉  3、稳定,最少出BUG-〉  4、高性能,10万条记录你能顶住,1000万条记录你能顶住吗?这就是技术功底的考验  5、这还不够,你的代码是否能让别人快速的理解了  6、你的代码是否能比较容易的接受不同客户的需求差异  这都是处处要你的分析功底、架构功底、编码功底。  二、怎么炼成高手?  1、阅读优秀的开源源代码。先找代码量不大的。要彻底的阅读,剖析清楚有多少个类,这些类的关系。为什么要设计这样的类架构,为什么要这样设计接口。这些思考相当有深度。  2、根据你的需求,把开源源代码进行修改。因为开源源代码是浑然一体,你加的功能是否很好和现有代码融合。这相当考验功底。  3、 读书,谁发明的这个东西就读谁的书。如想学 SQLSERVER,就一定要读SQLSERVER开发经理或技术小组写的书。别人写的书都会有歧义。要读透,反复阅读它的设计原理。不要只学会使用。比 如说SQLSERVER,写SQL和SP就是懂SQLSERVER?我们一定要明白到SQLSERVER的数据页面是如何组织的,为什么要这样组织,它是 怎样被载入内存中,它又是怎样回写到物理设备上。我们要到这个深度。否则,你只能是知道个皮毛,平时看是高手,一到真正难关立马歇菜。  如果你学的技术还不能帮助你解决你目前手头的问题,说明你还学的不到位。  4、 找到你的师傅。一个人的成长,很难是自己一个人苦苦学习摸索修炼。这样提升很慢。你如果想快速发展,你必须找到你在这家公司中的引路人。他可能是你的入职 指引人,也可能是别人。你一定要好好观察,看中了就一定要积极联系上他紧紧的跟随着他,平时多请教多观察他的思考方式做事方式。  5、给 自己树立一个信念:我要在X年中成为公司所有人公认的技术高手。我要在X年终成为中国软件业一流的程序员。必须设立目标,而且时时刻刻为这个目标奋斗,坚 持每天阅读、思考、开发、修改代码达到13-16个小时以上。有一个故事讲的就是每件事要想做专业必须要经过1万个小时的反复练习才能成功。对,我说的就 是这个意思。不疯魔不成活。  一个成功的产品的诞生是多么的曲折与艰难,中间会经历多少商业竞争机缘巧合,也会浮现多少独当一面的代码英雄。  一个人有没有可能成为软件高手,他是有一种说不清的气质的,你知道那就是程序员精神,他是与众不同的,你能明显感觉的到。  作为我个人,在技术上我是一直关注数据架构层、Java架构层、前端架构、和大型Web应用与研发。在业务上,我一直关注电子商务、互联网生活服务/互联网营销/互联网客户关系社区、Web前端技术。 最后一句话:  美到极致是疯狂。希望大家在平时工作中开发每一个产品时,都能暗下决心:It's My Baby!  对,它就是你创造的孩子,你要用心去雕琢它呵护它。                                     全文转至张慧华的博文URL:美到极致是疯狂 
相关资源
广告