查看: 928|回复: 1

[经验] 编程小白成为达人

[复制链接]
  • TA的每日心情
    开心
    2019-11-4 13:48
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2020-1-6 09:07:39 | 显示全部楼层 |阅读模式
    分享到:
    学习一直都是不容易的,在工程师的世界里可能是更加的需要我们付出时间和精力。而学习能力在现在这个时代又是显得十分的重要,相信许多烧友们对编程的学习也是十分感兴趣的,或者正在学习的过程中。所有小编今天特别整理了一份满满的干货给到小伙伴们学习和借鉴。

    22.jpg

    我知道现在有成千上万的资源可以“教你如何编码”。但是,这绝对不是这里最重要的部分,也不是这篇文章的主题。重要的是你如何建立起良好的学习习惯,如何更好的吸收处理新知识,时刻保持自己的学习动力,并把注意力放在核心问题上。

    如果你愿意远离你的舒适区!你一定会为学习到新知识而感到兴奋,并且能获得优越感,久而久之,你也一定会成为一名优秀的开发者。

    我已经有多年的执教经验,当我的学生告诉我他们没有动力的时候,我经常看到一种现象,他们只执着于最终的大目标,而忽视了每一次小小的进步,这让他们始终觉得离目标很远,从而导致挫败感。当我刚开始学编程的时候也有同样的想法,不断的和身边的人对比,觉得他们比我优秀太多,我永远无法达到我要的高度。

    正是一直存在这样的想法,往往忽视了自己做出的努力,即便自己轻松创建出一个比之前复杂的应用程序时,也不会有成就感,因为心里一直沉浸在和更有经验的开发者的比较中。

    学习如何编程是最困难的,每个人都在努力克服。本文会把重心放在学习编程时最常见的问题上:如何尽可能有效地处理新信息,如何保持动力。

    有效地处理新信息

    每个人吸收新知识的方式不同,所以,在开始学习代码之前,你首先要做的就是先学习如何学习。

    很快你就会发现,最常见的两种学习资源就是:在线课程和语言文档。除超人类的天才外,是没人能够在只看课程/读纯文本的情况下还能记住所有知识点,所以每当你在看视频课程或阅读文档时,感到迷茫和困惑是完全正常的,毕竟对于没有太多知识的人来说,通过一些极客术语来理解代码是蛮难的。

    无论你觉得自己有多优秀都不要忽略基础知识,开始学一门语言的时候不要跳过任何一个细节,如果你一开始不注意的话,会后悔的。即便是阅读文档,也请从第一页开始阅读,相信我:注意细节,过后会感谢今天的你。

    教学是最好的学习方式,是每隔10分钟,就停下来用自己的话解释一下你刚刚所学到的东西,即便周围没有人,你可能会觉得做起来十分困难,但这种做法可以让你立刻知道自己还不了解的知识点有哪些,你可以及时巩固研究,就记下来,通过实践编码,会让你记忆的更加简单深刻。

    不要只听课程和阅读文档,你还应通过积极参加创建自己的个人项目,把你所学的每一个新的知识点都运用上来,这听起来似乎也不是那么简单,但你只要一直坚持,你一定可以提高你的编程技能。

    保持动力

    很多人问我日常生活中如何让自己编写出这么多代码,思考了很久之后,得出以下答案:

    每个人否喜欢玩游戏,不论什么类型的游戏,因为游戏可以带给你即时的满足感,这就是动机成因,通过编程,我也获得到了满足感,但编程不是游戏,没有你想象中的容易。

    设立小目标,不是因为你不思进取,而是因为你不注重改善,做一个当天完成的事情待办列表:也许只是读一页,或者只看一个课程更或者只是编写10行代码,看到自己完成整个待办事项清单,你会获得满足感,对自己的进步更有信心。“我已经完成了今天的目标任务”比“我只完成了2%的课程”要好得多,及时行乐是很重要的。

    不断提醒自己,你已经走了多远。这一点经常被忽视,你不会意识到自己每天都在进步,但相信我,你只要每天都编码(哪怕一点点),你也会越来越好。所以最好的方法是写日记,每天用一句话来记录自己的困惑,一个月后再回头看看,你可以看到自己正在变得更好。

    在你真正感兴趣的个人项目上编程,这里不包含在待办事项列表中,而是你真正想要建立的项目,也不要想到自动驾驶汽车、机器人等等这些庞大的项目,可以选择一些小项目,比如创建一个网站或者一个小型游戏,这种项目会让你更有动力去完成它,一旦项目完成,你就会有成就感。

    意识到自己比想象中要优秀。你可能会觉得你身边的每个人知道的东西都比你多的多,这也被称为冒名顶替者综合征。但事实并非如此,只要你有足够的学习动力、足够努力地编码,你一定可以可以成为一名优秀的开发人员。

    要时刻牢记的事

    不要和其他开发者对比。非常老套的建议,但这是至关重要的。你比你想象中的进步更快。我下面这张照片,如果在4个月前看到这些屏幕中的代码,我会感到害怕的。但现在我完全可以找出这里面犯了多少错误

    你比你想象的要进步得多。每一次学习或编码,你都在成长。

    每个人一开始都很迷茫,大家都是一样的,但这并不意味着你会成为一个糟糕的程序员。你现在的想法只是学习过程的一部分。不久,你会回头看看这时的你,你一定会认同我说的!

    最后如果可以,试着找一位导师。通过向其求教相信更有助于你克服问题并获得新的启发。

    好的,讲了这么多理论学习编程语言的方法,下面我们来讲讲如何学习STM32呢?

    首先,在学习Cortex-M3时,我们必须要知道必要的缩略语。

    整理如下:

    AMBA:先进单片机总线架构 ADK:AMBA设计套件
    AHB:先进高性能总线 AHB-AP:AHB访问端口
    APB:先进外设总线 ARM ARM:ARM架构参考手册
    ASIC:行业领域专用集成电路 ATB :先进跟踪总线
    BE8:字节不变式大端模式 CPI:每条指令的周期数

    DAP:调试访问端口 DSP:数字信号处理(器)
    DWT:数据观察点及跟踪 ETM:嵌入式跟踪宏单元
    FPB:闪存地址重载及断点 FSR:fault状态寄存器
    HTM:Core Sight AHB跟踪宏单元
    ICE:在线仿真器 IDE:集成开发环境

    IRQ:中断请求(通常是外中断请求)
    ISA:指令系统架构 ISR:中断服务例程
    ITM:仪器化跟踪宏单元
    JTAG:连接点测试行动组(一个关于测试和调试接口的标准)
    LR:连接寄存器

    LSB:最低有效位
    MSB:最高有效位
    LSU:加载存储单元
    MCU:微控制器单元
    MPU:存储器保护单元

    MMU:存储器管理单元
    MSP:主堆栈指针
    NMI:不可屏蔽中断
    NVIC:嵌套向量中断控制器
    PC:程序计数器
    PPB:私有外设总线


    Cortex-M3芯片简介

    1、芯片的基本结构如下图

    芯片.jpg

    2、关于ARMv7的知识了解

    在这个版本中,内核架构首次从单一款式变成3种款式。

    款式A:设计用于高性能的“开放应用平台”——越来越接近电脑了

    款式R:用于高端的嵌入式系统,尤其是那些带有实时要求的——又要快又要实时。

    款式M:用于深度嵌入的,单片机风格的系统中。

    介绍A:用于高性能的“开放应用平台”,应用在那些需要运行复杂应用程序的处理器。支持大型嵌入式操作系统。

    R:用于高端的嵌入式系统,要求实时性的。

    M:用于深度嵌入的、单片机风格的系统中。

    3、Cortex-M3处理器的舞台

    高性能+高代码密度+小硅片面积,使得CM3大面积地成为理想的处理平台,主要应用在以下领域:

    (1)低成本单片机
    (2)汽车电子
    (3)数据通信
    (4)工业控制
    (5)消费类电子产品

    4、Cortex-M3的简化图

    简化图.jpg

    5、寄存器组

    处理器拥有R0-R15的寄存器组,其中R13最为堆栈指针SP,SP有两个,但是同一时刻只能有一个可以看到,这就是所谓的“banked”寄存器。

    寄存器组.jpg

    a、R0-R12都是 32位通用寄存器,用于数据操作。但是注意:绝大多数 16位Thumb指令只能访问R0-R7,而 32位 Thumb-2指令可以访问所有寄存器。

    b、Cortex-M3拥有两个堆栈指针,然而它们是 banked,因此任一时刻只能使用其中的一个。

    6、Cortex-M3的简评

    a、高性能

    许多指令都是单周期的——包括乘法相关指令。并且从整体性能上,Cortex-M3比得过绝大多数其它的架构。

    指令总线和数据总线被分开,取值和访内可以并行不悖 。

    Thumb-2的到来告别了状态切换的旧世代,再也不需要花时间来切换于 32位 ARM状态和16位Thumb状态之间了。这简化了软件开发和代码维护,使产品面市更快。

    Thumb-2指令集为编程带来了更多的灵活性。许多数据操作现在能用更短的代码搞定,这意味着 Cortex-M3的代码密度更高,也就对存储器的需求更少。

    取指都按 32位处理。同一周期最多可以取出两条指令,留下了更多的带宽给数据传输。

    Cortex-M3的设计允许单片机高频运行(现代半导体制造技术能保证 100MHz以上的速度)即使在相同的速度下运行,CM3的每指令周期数(CPI)也更低,于是同样的 MHz下可以做更多的工作;另一方面,也使同一个应用在 CM3上需要更低的主频。

    b、先进的中断处理功能

    内建的嵌套向量中断控制器支持240条外部中断输入。向量化的中断功能大大减少了中断延迟,因为不在需要软件去判断中断源。中断的嵌套也是在硬件水平上实现的,不需要软件代码来实现。

    Cortex-M3在进入异常服务例程时,自动压栈了 R0-R3, R12, LR, PSR 和PC,并且在返回时自动弹出它们,这多清爽!既加速了中断的响应,也再不需要汇编语言代码了

    NVIC支持对每一路中断设置不同的优先级,使得中断管理极富弹性。最粗线条的实现也至少要支持 8级优先级,而且还能动态地被修改。

    优化中断响应还有两招,它们分别是“咬尾中断机制”和“晚到中断机制”。

    有些需要较多周期才能执行完的指令,是可以被中断-继续的——就好比它们是一串指令一样。

    这些指令包括加载多个寄存器(LDM),存储多个寄存器(STM),多个寄存器参与的PUSH,以及多个寄存器参与的 POP。

    除非系统被彻底地锁定,NMI(不可屏蔽中断)会在收到请求的第一时间予以响应。对很多安全-关键(safety-critical)的应用,NMI都是必不可少的(如化学反应即将失控时的紧急停机)

    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2020-6-20 21:18
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2020-1-10 22:44:40 | 显示全部楼层
    学习中!很快就能够理解这个
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-20 01:50 , Processed in 0.153505 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.