每周作业链接汇总
第一周作业:第一章、第七章
第二周作业:9月27日课堂实践
第三周作业:对Linux命令od -tc -tx1的C语言程序实现myod-优化版
第四周作业:第十章
第五周作业:第三章
第六周作业:课上测试、课下作业、第八章
第七周作业:第四章
第九周作业:第六章
第十周作业:课下作业-IPC、课堂测试
第十一周作业:第九章
第十三周作业:深入学习第十二章
第十四周作业:深入学习第七章
第十五周作业:学习总结
实验汇总
实验一 实验名称:开发化境的熟悉 ARM与linux
实验二 实验名称:固件程序设计
实验三 实验名称:网络编程
实验四 实验名称:外设驱动程序设计
实验五 实验名称:通讯协议设计
代码托管链接和二维码:
问答
- 代码驱动的学习做到没有?
朝着这个方向在努力,以致于我现在做啥程序都想提前写个思路框架和伪代码啥的。(捂脸)
- 加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得,实践上有什么经验教训
有时课上实在是没做出来程序,就去看看学霸们的代码,弄懂他们的再改改代码结构,添点自己的东西。
因为每个人习惯用的函数和结构会有些小差异,在学习了学霸的结构后有时还会发现一些好用的函数,以及纠正一些自己以前未被发现的错误。
教训就是……积累量不够,有时看网上的代码感到力不从心。
- 整体评价一下第1周作业中自己提出的问题是不是抓住了学习重点
回答一下第1周作业中自己提出的问题
有些地方还是有些跑偏
第二章:原码、补码、反码在计算机不同情景中各有什么优势?
补码的运算中要用到原码和反码
首先, 因为人脑可以知道第一位是符号位, 在计算的时候我们会根据符号位, 选择对真值区域的加减. (真值的概念在本文最开头). 但是对于计算机, 加减乘数已经是最基础的运算, 要设计的尽量简单. 计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂! 于是人们想出了将符号位也参与运算的方法. 我们知道, 根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了.
于是人们开始探索 将符号位参与运算, 并且只保留加法的方法.
首先来看原码:
计算十进制的表达式: 1-1=0
1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2
如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.
为了解决原码做减法的问题, 出现了反码:
计算十进制的表达式: 1-1=0
1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0
发现用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在"0"这个特殊的数值上. 虽然人们理解上+0和-0是一样的, 但是0带符号是没有任何意义的. 而且会有[0000 0000]原和[1000 0000]原两个编码表示0.
于是补码的出现, 解决了0的符号以及两个编码的问题:
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原
这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:
(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补
-1-127的结果应该是-128, 在用补码运算的结果中, [1000 0000]补 就是-128. 但是注意因为实际上是使用以前的-0的补码来表示-128, 所以-128并没有原码和反码表示.(对-128的补码表示[1000 0000]补算出来的原码是[0000 0000]原, 这是不正确的)
使用补码, 不仅仅修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数. 这就是为什么8位二进制, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127].
因为机器使用补码, 所以对于编程中常用到的32位int类型, 可以表示范围是: [-231, 231-1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.
参考资料:
第三章:重点理解指针
函数指针:重点在指针,表示它是一个指针,它指向的是一个函数。eg: int (*fun)();
指针函数:重点在函数,表示它是一个函数,它的返回值是指针。 eg: int* fun();
数组指针:重点在指针,表示它是一个指针,它指向的是一个数组。int (*fun)[8];
指针数组:重点在数组,表示它是一个数组,它包含的元素是指针 itn* fun[8];
第四章:与HDL的verilog有什么联系?
两种不同的语言,都是相对于高级语言来说比较低级的语言。
第五章:如何增加生成的机器代码中指令级并行度的变换?
指令级并行:在计算机体系结构中,并行度是指指令或数据并行执行的最大数目。在指令流水中,同时执行多条指令称为指令并行。要更大限度地利用计算资源或存储资源则提高并行度。
第六章:如何通过改善程序的时间局部性和空间局部性来提高应用程序的性能?
一段时间内尽量访问地址相近的变量等。
第八章:如何初步判断哪些情况是由于程序的并发执行引起的不确定行为。
这个因程序而异,如果有所输出的话会更容易判断,我有个小建议是在调试的时候弄一些有特征性的输出来一次判断。
第九章: 计算机系统将软件和硬件结合起来的优点是什么?
私以为:打个比方,战争,有良好的武装设备、人员、环境是硬件,有上乘的战略是软件,两者相辅相成,共促发展。
第十章:有什么方法能够弥补标准I/O的局限性?
使用其他I/O,比如Unix I/O,比如标准I/O没有提供读取文件元数据的方式,例如文件大小或文件创建时间。
第十一章:如何用套接字接口编写Internet客户端和服务器?
套接字接口就是socket,在十三周的博客里有它的实例用法。
第十二章:并发编程的适用领域
并发编程是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。多个事件在同一时间间隔发生。
比如说多个客户端访问同一台服务器的时候,服务器需要用到并发编程。
- 你有什么项目被加分,谈谈你的经验
在做myod的时候被加分,以及做了加分项pwd。
在那个被加分的项目之前有个可做可不做的作业,我做了,就是第一个初代版本。
说实话,我自己编出来的程序我心里还是有数的,认认真真花了很多时间地做出一个不那么优美的程序。
当时我的事情没有那么的多,所以还是挤出了时间去做那个程序的优化版,包括一个整体main.c和分开.c .h的版本。
被加分可能是因为当时做得很认真,也能看得到提升,博客里步骤记叙得很详细。
- 总结(给出链接和二维码)
教程 这个是给自己留的教程 初步安装配置虚拟机、Ubuntu、git、vim、码云项目
你有什么项目被扣分,谈谈你的教训
印象中我都是按照要求都完成了,也没有收到扣分提醒,应该不会有什么扣分吧。
课程收获与不足
- 自己的收获(投入,效率,效果等)
首先要感谢老师一年以来的教导和付出,对教学的热情和投入到了一种令人钦佩的程度。虽然我并非佼佼者,但我还是在不断的学习中得到了能力的提升,也算是不虚此行。
感谢一直以来提供帮助的朋友们。在这门课上对我提供帮助最大的是DWJ宝贝和ZJY宝贝,感谢你们榜样的力量和在我多次走投无路、手足无措的时候给予我醍醐灌顶般的点拨与指导。
我觉得我是那种花了很多时间和精力,效果却没有别人好的那种人。但是如果有足够的时间我是很愿意去弄懂。去钻研的,虽然和学霸们的基础和学习能力差了一大截,但是一点一点笨鸟还是能够积累起一些东西的。比如说我之前认认真真地做了计算机实习,里面有用到命令行,所以在myod要求弄命令行的时候我并没有一脸懵逼、不知所措。然后又花了很多时间去优化升级地做了好几个myod的版本。然后对实现函数功能的这种题不是那么的迷茫了。
我也很想提高效率。所以我对比观察了我和学霸,发现自己在同样时间里能理解到和记住的东西更少。在和学霸做项目的时候能够感受到对方的学习速度更快、效果更好,对一个问题,比如说一个程序里的小环节对方会很自然地思考得很仔细与全面。
很多时候我以为我已经尽我所能地做到最好了,可是效果差强人意,而别人却能出彩。上学期结束后我看到了学霸们更认真的态度,这学期结束后我看到了学霸对问题的深入与仔细。
这学期越到后面的时候各种事情越来越多,鲜少有过周末。对于这门课的学习也越发力不从心,甚至一度崩溃到怀疑人生的地步。不过对于我来说,最好的解决方法就是让自己更加的厉害。
- 自己需要改进的地方
资料的查找能力和自学能力。对一个知识点深挖的仔细感。
- 如果有结对,写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
我的结对伙伴们给我提供了很大的帮助,不论是心理上的还是学习方面的。
我觉得老师希望我们结对是希望我们营造一种共同学习的氛围,相互督促相互学习。
学霸其实是不论怎样都会去学,而且学得好的。可能想要通过结对带动的是所有人去学习,这当然是最好的结果。
在我看到DWJ同学早早起床去学习很晚而归的时候其实内心已经受到了鼓舞。在我和优秀的好朋友交流或者我向他们讨教的时候能够感受到他们对事情思考的角度与深度。如果结对的意义在于变得更优秀,那么我觉得向优秀的人学习也能达到同样的目的。
我记得上学期有个博客互评的环节,当我从好多人的博客里看到比我得水的多的时候,我的内心是复杂且有一点难受的。自己很费力地学也学不懂,失眠掉发殚精竭虑时光流走,结果和去玩的他们一样学不会、学不好。
倒不如知不足而后进。然后认命地对着并不完美的自己说:我能理解和接受你现在的慢与窘迫,但还是再努一把力吧。
- 给开学初的你和学弟学妹们的学习建议
出了问题除了着手解决没有别的方式。放轻松,总能解决的。
- 如果重新学习这门课,怎么做才可以学的更好
合理地安排学习时间,协调好各项事务和各门课程,调整好心态。
问卷调查
- 你平均每周投入到本课程多长时间?
平均二十多个小时
- 每周的学习效率有提高吗?
后来好一点了
- 学习效果自己满意吗?
有所锻炼,有所收获。
- 课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)
有需要的时候会记录心得。虽然喜欢纸质的笔记的感觉,但是它久了就不见了,写博客就当保存笔记了。
- 你觉得这门课老师应该继续做哪一件事情?
对课本和考题的分析讲解,教程的编写。
- 你觉得这门课老师应该停止做哪一件事情?
提交笔记后的对对方问题和总结的分析。
- 你觉得这门课老师应该开始做什么新的事情?
把学霸们录的微课作为资源发出来。
- 总结的链接和二维码