1.自制处理器系列(一):一生一芯计划-预先学习阶段(P线)
2.自制编程语言,自制六个令你迷惑的源码问题
3.èªå¶è¡¨ç½ä»£ç
4.自制处理器系列(0x01):一生一芯计划-预先学习阶段(P线)
5.Python可以自学吗?自学Python需要多久?内附Python自学教程!
自制处理器系列(一):一生一芯计划-预先学习阶段(P线)
踏入一生一芯的书源探索,我追随偶像稚晖君的码书脚步,决心亲手打造自己的自制处理器。在这个预先学习阶段,源码小程序 完整源码我选择了P线的书源任务,从阅读与理解开始,码书深入挖掘处理器硬件开发的自制奥秘。首要任务是源码撰写两篇文章的读后感,提出有深度的书源问题,并在实践中独立解决问题。码书 作为内向的自制学习者,我深知STFW(Search the documentation,源码 Tech forums, and Work it out yourself)的重要性,曾在大学期间挑战LFS系统编译与ROS机器人的书源项目,这让我明白自信判断和问题解决能力的不可或缺。面对团队资源有限,我们通过不断努力提升工程实践能力,共同分享ROS开发的经验与技巧。 在处理器的学习之旅中,我计划从基础做起,如安装Linux,编写Hello World程序,理解GCC/GDB/Makefile的运用,这些都是硬件开发的基石。在ROS项目中,获取框架代码时,添加SSH key和修改Makefile细节成为关键步骤。而对于Git管理,遵循PA0讲义,我注重个人信息设置和权限备份,确保代码管理的有序进行。 深入Verilator的世界,我开始阅读官网文档,安装4.版本,掌握基本的git操作,避免盲目追踪源码。通过对比阅读C++和Verilog代码,源码网站 硬件我理解了仿真过程和波形文件的生成。在编写Makefile时,我专注于实现一键仿真的便捷性,如自动生成的Vswitch.mk文件,它揭示了Verilog到C++模块的转换核心。 在NVBoard项目中,我挑战自建Git跟踪机制,记录每个步骤,以便精确评估。C语言基础任务涉及递归、指针和链表,尽管C语言不那么流行,但它是底层编程的首选工具。掌握高级指针技巧,如以下代码所示:源码链接,是提升编程能力的关键。 接下来的任务涉及Verilator的深入理解,如NVBoard的输入输出配置,以及流水灯模块的开发。理解时序逻辑仿真,如Vled___root___eval中的时钟触发,是提升设计能力的重要一环。 为了深化实践,我推荐使用南京大学的《数字电路与计算机组成实验》,在实验中磨炼数字电路设计和调试技能。通过NEMU,我们学习调试技巧,实现表达式求值,这不仅是编程实践,也是对编译原理的深入理解。 面对PA1的挑战,我明白编译原理的复杂性,如词法分析和语法解析。正则表达式在Token识别中的运用,以及处理运算符优先级,成为我攻克的难点。但每一次的小米im源码突破,都让我更加坚定地提升自我,向一生一芯的目标稳步前行。自制编程语言,六个令你迷惑的问题
深入探讨自制编程语言和虚拟机,这个技术领域虽然看似复杂,却吸引了众多技术爱好者的关注。《自制编程语言》一书循序渐进地介绍了基础概念,包括编译原理的入门知识,作者的独特见解让读者受益匪浅。即使缺乏编译原理基础,也能踏上编程语言的创作之路,因为实践才是理解的关键。
编译型和脚本程序的区别在于它们的运行方式和目标。编译型程序生成的是二进制机器码,直接由硬件CPU执行,而脚本语言如JavaScript,是文本形式,通过解释器解析和执行。脚本代码看似按逻辑运行,实际是解释器动态解析和响应。
脚本语言的执行涉及解释器的两种类型,边解释边执行和先解析后执行。后者如PHP,通过解释器逐行解析和执行,而复杂的操作可能需要虚拟机来提升效率。虚拟机可以跨平台模拟,处理不同体系架构的指令。
脚本语言的慢速常常被误解为性能问题,但其实影响系统性能的关键在于IO操作,而非语言本身。尽管脚本语言解释器可能比IO设备慢,但其速度依然比IO快,所以在系统中不会成为主要瓶颈。
脚本语言的优势在于开发效率高,如Python的简洁语法,使得许多繁琐任务只需一行代码就能完成。编译器工作原理中,商业源码发布词法分析、语法分析和语义分析并非线性过程,而是并行进行,以提高效率。
最后,了解符号表和编译器的前后端设计对理解编程语言至关重要。符号表用于存储和索引程序中的符号,帮助生成统一的指令格式。编译器通过前后端处理,将源代码转化为中间代码和目标代码,实现跨平台和优化。
无论是自制编程语言的学习,还是理解操作系统,关键在于实践和理解底层原理。如果你对这些主题有兴趣,不妨选择《自制编程语言》或《操作系统真象还原》深入探索,亲手实践,感受技术的魅力。
èªå¶è¡¨ç½ä»£ç
追女å©æéè¦çæ¯ä»ä¹ï¼
ç¸è²å¹³å¹³ï¼è¿½å¥³çï¼éè¦çæ¯ä»ä¹ï¼æ¯åæï¼è®°å¾ä»¥åæè¿æ ·ä¸ä»¶äºï¼ç·çå欢ä¸ä¸ªå¥³å©ï¼åæ追äºå¤©ï¼å°ç¬¬å¤©çæ¶åï¼ç·å©æ²¡æååå¾å¸¸é£æ ·åºç°ï¼ä¹æ£æ¯è¿å¤©ï¼å¥³å©å¿éæ³ï¼å¦æä»å¤©è¿æ¥äºï¼æå°±ççä»ï¼å°±è¿æ ·ï¼éè¿å°æ¯éè¿ï¼å½ç¶å¨æç±ä¸ä¹ä¼æå¾å¤å ç´ ï¼å¦æ没æ让女çå追çèµæ¬ï¼
å¨è¿ä¸ªäººäººé½å¨ç§æ åçæ¶åï¼å为ç¨åºåæ们ä¹è¦æä½èµ·æ¥ï¼æ£åæ们çè·å°èï¼ä»å¤©å°±å¤§å®¶å¥ç®ä¸æ强表ç½ç¨åºï¼æ¤ç¨åºç»åæ°æ®æå + 微信èªå¨åæ¶æ¯ + å®æ¶ä»»å¡ï¼å®ç°ä¸ä¸ªè½æ¯å¤©èªå¨å®æ¶ç»ä½ å¿ç±ç ta åéï¼ä½ 们ç¸è¯ç¸æå¤©æ° + æ è¯ + æç±ä½ çå¾çãå ·ä½çæ¶æ¯å¦ä¸ã
æ¯å¤©è¦åéç»å¥¹çä¿¡æ¯å¦ä¸ï¼
è¿ééè¦å¡«åç第ä¸ä¸ªåæ®µæ¯ ta ç称å¼ï¼inLoveDays ä¸ºä½ ä»¬ç¸è¯ç¸æç天æ°ã
love_word æ¯æ¯å¤©ä¸º ta ç²¾å¿åå¤æ è¯å 容ï¼å½ç¶å¦æä½ çæç¬å¥½ä¹å¯ä»¥èªå·±å
æåä¹æ¯æéè¦çï¼æ¯å¤©ä¸å°½ç¸åãæç±ä½ ãçå¾çï¼
å®ç°æè·¯
æ¬æ¬¡ç¨åºè¿è¡çç¯å¢æ¯ windows + Python 3.6ï¼æ¤æ¬¡ä¸»è¦ç¨å°çåºæ seleniumãitchatãrequestãç¨åºä¸»è¦å为两é¨å第ä¸æ°æ®çæåï¼ä¸äºæ è¯ä¿¡æ¯åå¾çä¿¡æ¯ãå¦ä¸é¨å°±æ¯å©ç¨ itchat èªå¨åéæ¶æ¯ç»ä½ ç好åã
æ è¯ä¿¡æ¯
å¦æå¯¹ä½ çæç¬æä¿¡å¿ï¼å¯ä»¥èªå·±åæ¯å¤©çæ è¯ãå½ç¶å¤§é¨å人çæç¬è·æä¸æ ·çï¼é£æ们就å©ç¨ç½ç»ä¸çæ è¯å¦ï¼
表ç½å¾çèµæº
为äºé åæ¤æ¬¡è¡¨ç½ç¨åºï¼æä¸é¨å»æ¾äºäºå¸¦æãæç±ä½ ãçå¾çèµæºãéè¿ä¸äºè´´å§çè´´åï¼æ们就å¯ä»¥è·åå°å¤§éçè¿æ ·èµæºã
ç¨åºæºç
æ¤æ¬¡è¡¨ç½ç¨åºä¸»è¦æ 5 个å½æ°
crawl_Love_words()
æ¤å½æ°éè¿ selenium + xpath æ¥æåæ è¯ç½ç«çèµæºï¼å¹¶åå ¥å°å½åç®å½ä¸çãlove_word.txtãæ件ã
crawl_love_image()
æ¤å½æ°ç¨æ¥ç¬åè´´å§å¸¦æãæç±ä½ ãçå¾çèµæºï¼éè¿ request + re æ¥å®ç°ã代ç 并ä¸å¤æï¼å¨æ£å表达å¼é£ä¹ç®åçåäºä¸ä¸ªï¼ç¨æ¥å¹é å½åä¹ææçå¾çèµæºã
mkdir(path)
æ¤å½æ°ç¨æ¥å¨å½åç®å½ä¸å建ä¸ä¸ªæ°çæ件夹ï¼ä»¥ä¾¿åå¨ç¸åºçæ°æ®ã
send_new()
æ¤å½æ°éè¿å©ç¨ itchat åºï¼å®ç°ç»ä½ ç微信好åèªå¨åéæ¶æ¯ãå¨è¿ä¸ªå½æ°ä¸æå©ç¨ datetime æ¥è®¡ç®ä½ 们ä¹é´ç¸è¯ç¸æçæ¶é´ã并ä¸å¨ç»å½çæ¶åæ·»å äºä¸ä¸ªãhotReload=Trueãï¼è¿æ ·ä½ å°±å¯ä»¥ä¸ç¨æ¯æ¬¡è¿è¡ç¨åºçæ¶åé½è¦ç»å½ãå ³äº itchat æ´å¤çæä½ï¼å¤§å®¶å¯ä»¥å»ç½ä¸æ¥æ¾ç¸åºçèµæã
main()
main() å½æ°å°±æ¯æ们主é»è¾å½æ°ï¼ç¨åºè¿è¡çé»è¾é¡ºåºå°±æ¯å¨è¿ä¸ªå½æ°éè§å®çãå¨ main() éæé¦å å¤æä¸å½åè·¯å¾ä¸æ¯å¦æãlove_word.txtãæ件ï¼å¦ææåæ示ç¸åºçä¿¡æ¯ï¼æ²¡æçè¯æå»æ§ crawl_Love_words() å½æ°ï¼å»ç½ä¸æåä¸äºæ è¯æ°æ®ã
å ¶æ¬¡åå¤æä¸å½åç®å½ä¸æ¯å¦æãimgãæ件夹ï¼ç¨æ¥å¤ææ们æ¯å¦æå¾çèµæºï¼æ²¡æåæ§è¡ crawl_love_image() æ¥æåè´´å§ä¸çå¾çèµæºã
æåæ们æéçæ°æ®é½å·²åå¤å®åï¼åè°ç¨ send_news() å½æ°ï¼æ´çä¸è¦åéçæ°æ®æ ¼å¼ï¼ç¶åèªå¨ç»ä½ ç ta åéæ¶æ¯ã
å®æ¶ä»»å¡
æ¯å¤©å®æ¶åéæ主è¦æ¯ç¨ while True ç®åçå®ç°ï¼éè¿å¤æå½åçæ¶é´æ¯å¦æ¯ä½ æéè¦åéçæ¶é´ï¼æ¥è¾¾å°æ¯å¤©å®æ¶åéã
表ç½ç¨åºä½¿ç¨æç¨
é¦å ä½ æç¸åºçæºç ä¸è½½ä¸æ¥ï¼åå°åå¤ã表ç½ãå³å¯è·åãå ¶æ¬¡æç¸åºçåºå äºå å®è£ 好ï¼éåè¿è¡ç¨åºåä¼æ¾ç¤ºä¸ä¸ªå¾®ä¿¡ç½é¡µç»å½çäºç»´ç ï¼æ«æç»å½å³å¯ã
自制处理器系列(0x):一生一芯计划-预先学习阶段(P线)
前言
在技术领域中,我深受稚晖君的启发,他的成就让我向往。他不仅是华为的天才少年,也是B站百大UP主,他的项目将软硬件深度结合,展示了强大的协同设计能力。苹果公司的成功同样源于软硬件的紧密协作,以及极高的程序运行效率。为了在处理器软件生态领域有所建树,我报名参加了第五期“一生一芯计划”,计划以系列文章记录学习过程,但不直接提供答案,确保大家能享受独立解决问题的乐趣。现在,让我们一起踏入神秘的二进制世界,享受编程的乐趣。
内容科学提问
任务
在预学习阶段,你的阳泉网站源码第一个任务是阅读《提问的智慧》和《别像弱智一样提问》两篇文章,结合自己的提问和被提问经历,撰写一篇不少于字的读后感,探讨对好的提问以及通过STFW(搜索友好的网页)、RTFM(阅读友好的手册)独立解决问题的看法。
解答
我的性格内向腼腆,中学时期遇到学习难题时,总是选择默默看书、解题,避免向同学求助。这种自我解决问题的方式,虽然内心焦虑,但锻炼了我快速查找资料和独立思考的能力。大学期间,由于性格特点,我较少在技术论坛上提问,因此任务中要求结合提问和被提问的经历写感想的部分暂时跳过。接下来,我将通过大学时期两个案例,分享我对独立解决问题的理解和感悟。
首先,我独立编译并运行了Linux的最小系统(LFS),这需要我依据STFW和RTFM原则,解决编译中遇到的各种难题。通过持之以恒的努力,最终成功启动了系统。案例表明,虽然STFW和RTFM对独立解决问题有帮助,但有时需要相信自己的判断,尤其是在手册中发现错误时。小泽征尔的案例提醒我们在解决问题时,应坚信自己的判断。
另一个案例是团队独自学习并应用ROS(机器人操作系统)到机器人开发中。ROS是一个包含进程间通信、调试界面、仿真和算法包的工具集合。通过查阅资料和实践,团队成员的工程能力和解决问题的能力显著提高,案例展示了独立学习和应用技术的挑战与成就感。
系统安装(PA0)
任务
任务包括复用PA讲义内容,安装Linux操作系统,编写并运行“Hello World”程序,创建Makefile,阅读GDB教程并使用GDB。如果遇到困难,应参考相关GNU/Linux教程。
解答
Linux系统的安装和使用对于我来说已较为熟悉,因此不再赘述。对于PA0中布置的任务,它们是程序设计和编译原理课程中的基础内容,包括使用GCC、GDB和Makefile进行底层开发。通过实际案例,可以理解如何搭建交叉编译环境、理解编译器和调试器的工作原理以及链接脚本参数的重要性。
任务
阅读PA0讲义并获取PA框架代码,首先在GitHub上添加SSH密钥并获取“一生一芯”的框架代码。
解答
获取代码的过程相对简单,只需按照PA0讲义中的指导操作即可。注意在ysyx-workbench/Makefile中填写学号和姓名,并确保在GitHub上建立个人仓库,以避免Git Log信息的丢失。通过查看框架代码的工程管理文件,令人印象深刻的是“一生一芯”团队自建的Git跟踪机制,这为准确评估任务完成情况提供了便利。
语言基础
任务涉及学习C语言,包括递归、指针、链表,能够独立编写正确程序,掌握C语言的基本语法和特性。
解答
虽然C语言已不如现代面向对象语言流行,但它在底层编程领域的重要性不言而喻。理解指针是C语言的强大工具,允许操作计算机数据结构。通过实际案例,可以看到指针在复杂数据结构表示中的应用。
环境搭建
任务包括了解和安装verilator工具,阅读手册,运行示例程序,对双控开关模块进行仿真,并理解仿真过程。
解答
安装verilator的过程涉及理解工具的使用和获取最新版本。通过阅读手册和执行示例程序,可以学习如何使用Verilator进行仿真,理解仿真器的工作原理。
任务
使用NVBoard完成数字电路实验,包括阅读项目介绍、修改配置文件以接入Verilog源码,实现流水灯模块。
解答
NVBoard实验涉及将Verilog代码与硬件环境相结合,通过修改配置文件实现电路功能。流水灯模块的实现展示了从理论到实践的过渡。
数电实验
借助NVBoard完成数字电路实验,使用南京大学的《数字电路与计算机组成实验》作为参考。
解答
数电实验部分侧重于实践操作,包括理解电路原理和使用NVBoard进行实验,结果的呈现和分析。
进阶实验(PA1)
经过数电实验的实践,正式进入“一生一芯计划”的核心阶段,将深入计算机底层知识的学习。
任务
任务包括解决NEMU中的错误信息,熟悉框架代码,实现简易调试器,理解并填充表达式求值框架,生成随机表达式,实现监视点功能。
解答
通过分析错误信息并修改代码,实现简易调试器,理解表达式求值框架,生成并验证随机表达式,以及实现监视点功能,完成PA1的任务。
总结
通过预先学习阶段的探索和实践,我深刻意识到自身在计算机领域的知识体系与理想目标之间的差距。在面对技术难点时,需要放下身段,不断提升解决问题的能力。未来的日子里,我将全力以赴,期待设计出自己的处理器,并使其在硬件上得以实现。
Python可以自学吗?自学Python需要多久?内附Python自学教程!
Python 现在非常流行,因其语法简洁且功能强大,吸引了众多学习者。面对「Python 可以自学吗?」与「自学 Python 需要多久?」的疑问,本文将提供解答,并附上高价值 Python 学习视频教程及项目资源。 ### Python 可以自学吗? Python 完全可以自学,只要具备学习的决心与毅力。然而,Python 自学成功与否,往往与个人的自学能力及自制力密切相关。宋宋曾遇到过许多自学 Python 却未能成功或选择参加培训的情况。总结自学失败的原因,大致有以下几点: 学习资料不全面,缺乏详细的学习规划,导致学习过程迷茫,不知如何前进。 学习效率低下,面对小问题耗时过多,常因挫败感而放弃。 学习方向不明确,学习的技术未能紧跟行业需求,缺乏竞争力。 长时间积累问题,可能导致学习兴趣消退,产生自我怀疑,最终放弃。自学 Python 成功的比例并不高,符合二八定律,十人中可能仅有一两个人能通过自学找到满意的工作。 若真想自学 Python,需要注意以下几点: 制定完善的学习计划,由简入繁,从兴趣出发构建学习路径,明确学习目标,使学习过程轻松有趣。 选择一套好的教程,避免直接看书,正确方式是先观看视频,随后反复练习,将课程知识内化,再结合书籍补充,这样效果更佳。 注重实战锻炼,企业青睐有实战经验的学生,因此项目实战对学习者至关重要。 ### 自学 Python 需要多久? 自学 Python 的时间无法固定,取决于个人自学能力与自制力。高效学习者,每天投入 8 小时,每周 6 天,至少需要半年时间;而学习时间较长的,则难以预估。但总体而言,不宜过长学习,若长时间看不到找到工作的希望,可能是学习方法或路线存在问题,或不适合通过自学入行 Python。此时,建议考虑报班学习,用时间换空间。 ### Python 学习教程 宋宋整理了一系列 Python 学习资源,包括路线规划、教程、面试题及项目实践,帮助大家从入门到精通。 Python 学习路线图,清晰展示从零基础到精通的进阶路径。 开发环境搭建教程,指导如何安装 Python 及必备工具 Anaconda、pyCharm。 精选 Python 视频教程,覆盖从基础语法到实战应用,共计 集,内容涉及 Python 基础、数据分析、机器学习等。 实战项目资源,提供与企业需求相符的项目,附带源代码,可参考或启发个人项目。 通过这些资源,大家可以从理论学习到实践应用,逐步掌握 Python 技能,为未来职业发展奠定坚实基础。自学 Python 时,关键在于制定合理计划、高效学习并实践应用,祝大家学习顺利!