查看: 1465|回复: 1

[原创] 【我要创作】LPC82x mcu移植性的宏观反思和i++为例说明

[复制链接]
  • TA的每日心情
    郁闷
    2016-11-25 13:39
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    23

    主题

    76

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    238
    最后登录
    2017-3-24
    发表于 2017-3-11 12:32:48 | 显示全部楼层 |阅读模式
    本帖最后由 ipi 于 2017-3-11 12:41 编辑

    my LPC82x mcu移植性的宏观反思和i++为例说明

    起因: 论坛有坛友 谈到  过几年有些 lpc mcu的停产的一些猜测和担心。

    我感觉好的编程层次和程序的模块化,可以减免他的担忧。


    目的:i++为例说明 编程思想在 编程语言 编程软件 源程序中的应用,也更体现在移植性上。


    1  程序的初级状态

        网络到处可见的一些51程序的程序,一些51入门程序的实体书的范例。

    他们是初级的,和硬件的结合太直接。没有将程序的抽象性体现出来。

    编程技术的提升,离不开不断学习一些编程的技术文章后,应用到自己的程序中。



    2  程序移植    mcu 移植 状态机 的想法  

    |--->          --->               --->             --->                   --->                           <---|
    |    51 mcu        arm mcu        lpc mcu       lpc824 mcu       各种lpc824的开发板  |
    |--->          <---              <---              <---                   <---                           <---|
                  驱动调整      cmsis调整      管脚调整          lpcopen调整  


    3 i++ 的初步介绍

       ++ 是 c 语言 的 一元操作符 ;涉及 变量 , 字符串, 数组 ,结构 ,另外 宏定义 也会涉及这个。
       常见形式    i++  , *p++  ,        *t++
       常见的意义
           变量值的变化              i++  步进1  
           字符串内字符地址的变化   *p++  步进1 或者 多字节字符的大小,下一个
           结构的变化               *t++  步进  结构的大小 ,下一个

       常用之处 循环语句 for (;i++ ;) 或者   do () {  ;;;i++} 。



    4 对于指针 我们可以从 汇编的角度去思考,比如 寻址方式。
    i++              就是 立即数寻址     
    变量             就是 直接寻址 ,跳一次
    字符串会涉及偏移,        
    指针             就是 间接寻址 ,跳二次

    函数指针的指针   就是 间接寻址得到的是 & ,函数指针的地址 ,要跳第三次。

    函数指针的数组  方便 调用 函数

    我们反思 内存中的数据,数据的长度,对应的含义和使用限制。语义 语用 在这的问题。


    5 防范i++ 的 bug ,一个语句中多次应用

    当一个语句中,多次使用 ++ ,或者混用++ -- ,容易导致问题,不是一定出问题。

    这涉及 赋值的左值 和 尾部 ,c语言标准的不确定性问题。

    具体讲 c语言标准 没有涉及 到不同IDE实现 ++ 的具体步骤。

    有关文章 指出 3种情况 ,其中之下还有细分情况。我看得吃力.

    反思,如果简化下,一个语句,只出现一次,能够确保正常。

    也就是说,
    一个语句,使用一次,不同IDE的结果一致,

    一个语句,使用多次,要考虑 c语言标准的不确定性问题。移植就不得不考虑这问题。



    6 i++ 的历史环境 ,演绎

    6.1 古老的51 mcu 只用1个累加器 ,同时代 c 语言 标准  ++ ,估计应该有联系。

    6.2 现在 多核心 和 并行编程的考虑 ,++ 提供的性能优化,是否值得优化呢?

        我想 系统关键进程 用汇编。普通语句 不如 从复杂语句中 ,分离出 ++ ,以降低潜在的bug 。
            
            具体可以看性能情况。

        我个人看法。

    6.3 历史的演进 是通用性的变化,抽象,屏蔽细节差异的过程。

    6.3.1 语言时间线
        机器语言  01变化,只1个型号的;                       
        汇编语言  助记符的出现,分段 ;             add
             c语言  对寄存器的抽象,适合更多的硬件 ; ++   
        Java语言  对浏览器的抽象,适合更多的os ;   ++  
       Python语言 容器的抽象, 适合更多的 数据类型 ;next(i)      

    6.3.2 懒人秘籍之语言
    java 不太适合 较低端的mcu 。虽然一次编写,到处运行,但要求硬件条件高了一点。

    我们可以一次编写,逻辑层调用函数,和硬件的不同具体的驱动 ,多次编译,适合不同mcu,也不怎么损失性能。
    我们可以看下lpcopen         


    6.3.3 软件分层,软件重用  

       语句

       函数
       库函数

       驱动软件接口
          驱动软件接口 硬件厂商内部
          驱动软件接口 软件厂商内部
          驱动软件接口 应用厂商内部
          驱动软件接口 第三方
          驱动软件接口 开源软件  

       操作系统接口

       中间件 夸系统软件

       应用软件

       另外,参考 网络分层模型


    6.3.4 懒人秘籍之编程语言本身用不同编程思想写程序


              论坛 有网友说 不想 学新的语言c。
              我想不同的语言和库函数,可以不学;但编程思想还是要学习的。
             
              特别是通过 c语言 的预处理 和 编译条件的设置,甚至是 专用的处理源程序的工具软件,进行软件维护。
             
          举例 极端化的情况
             
              汇编语言的模块化思想的编程,
              c语言的对象化编程           应用 函数指针的指针
             
              总之 从全局上的多思考,才可以多节省无效率的击键的体力。





    回复

    使用道具 举报

  • TA的每日心情

    2022-6-3 10:27
  • 签到天数: 131 天

    [LV.7]常住居民III

    19

    主题

    519

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1557
    最后登录
    2022-6-26
    发表于 2017-3-11 12:54:37 | 显示全部楼层
    大哥 你 打字 咋一断一断 的 啊
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-26 03:37 , Processed in 0.104920 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表