在线情况
楼主
  • 头像
  • 级别
    • 积分13
    • 经验304
    • 文章14
    • 注册2011-03-07
    CC430单片机诡异问题求助
    最近用CC430F5137单片机做一个东西,使用的IAR的编译器,出现了很诡异的东西:
    1.系统中有一个128*64的LCD,之前我想做一个cache也就是一个全局二维数组和这128*64个点阵一一对应,结果程序直接挂掉;当时没在意;
    2.昨天程序定义了一个结构体,然后定义了一个全局的结构体数组,结果操作这个结构体数组,程序也直接挂掉:
      A、我看了map文档,看了这个结构体数组确实是落在RAM区域并且也没有溢出;
      B、打开List输出在list文件中看反汇编,看上去也是对的。
    不知道哪位大虾有这样的解决经验?
    要避免一见钟情的沉沦,记得不要看她第一眼。
    在线情况
    2
    • 头像
    • 级别
      • 积分13
      • 经验304
      • 文章14
      • 注册2011-03-07
          本着对别人和自己负责的有始有终的原则,说说现在的更新或者状态:
          我发现只要把操作那个数组的语句mark掉,结果就不会死掉;仔细看最后生成的map文件,发现因为没有操作和使用,这个数组被优化掉了,于是我想到一个方法就是把这个数组的大小减小到1或者2,然后把别的文件中的数组也减小,最后居然发现不会死掉!
          我的第一反应就是这些数据和堆栈有冲突,于是转而去研究msp430的堆栈。msp430的堆栈老实说,资料说得不清楚,或者说具有二义性(有些地方看上去说是向下生长,有些地方看上去说是向上生长),我通过程序测试,发现是向下生长的,也就是说,最初把堆栈设在RAM的Top位置,这种设计其实比向上增长要好,不需要例外设置SP了,除了程序用到的RAM,其它都给了堆栈;但是程序员要自己保证堆栈不会盖到数据区。CC430F5137是有4K RAM的,我看了很明显是足够的,所以不是数据和堆栈引起的问题。
          然后我继续做测试,终于发现有些规律,也就是全局变量超过256个才会出问题,再看map文档,发现定义的全局变量分为三种:
          DATA16_N:不需要初始化的
          DATA16_I:初始化为非0的
          DATA16_Z: 初始化为0的(包括定义没有初始化,会自动初始化为0)
          如果不加修饰就会认为是需要初始化为0的,通过看IAR的帮助文档,可以用 no_init来修饰这些变量成为不要初始化的。现在我的解决方法是把一些用到的buffer定义成 no_init的,使得整个DATA16_Z 的size小于256.问题得以解决。

          个人猜想应该是IAR的启动程序限定了 DATA16_I 和 DATA16_Z 的大小,但我没有找到对应的地方,如果有哪位大虾知道,请指点一下。
      要避免一见钟情的沉沦,记得不要看她第一眼。
      在线情况
      3
      • 头像
      • 级别
        • 积分30
        • 经验613
        • 文章57
        • 注册2011-01-31
        。。。开眼界了,你居然已经到了从RAM、汇编和编译器的层面研究程序了。。。我们大多数人还停留在IAR下调试C语言程序的程度。。。老兄你在这方面如果还有新的进展和心得,发上来大家一起学习学习吧~呵呵
        微控网感谢您的参与
        在线情况
        4
        • 头像
        • 级别
          • 积分13
          • 经验304
          • 文章14
          • 注册2011-03-07
          [QUOTE][B]下面引用由[U]北夜星辰[/U]发表的内容:[/B]

          。。。开眼界了,你居然已经到了从RAM、汇编和编译器的层面研究程序了。。。我们大多数人还停留在IAR下调试C语言程序的程度。。。老兄你在这方面如果还有新的进展和心得,发上来大家一起学习学习吧~呵呵[/QUOTE]

          大哥,没有那么深奥的,单片机的东西,往往一通百通,msp430+IAR我才玩了一个多月而已。现在我还是不确定这个问题到底是什么问题,所以还是很关注,期望真正的大虾出手解惑。
          另外,对于用仿真器调试,其实我是一直不喜欢的,我的做法是,拿到新的东西,先把串口调试出来,然后自己在写模块的时候通过串口测试。用仿真器容易引起惰性,有些问题也就放弃深究了。不用仿真器,可以强迫自己把程序写得很健壮,很容易修改,很容易测试……
          要避免一见钟情的沉沦,记得不要看她第一眼。
          在线情况
          5
          • 头像
          • 级别
            • 积分2
            • 经验337
            • 文章4
            • 注册2006-10-07
            是系统的看门狗溢出了,自己复位,貌似dangji了。
            微控网感谢您的参与
            在线情况
            6
            • 头像
            • 级别
              • 积分13
              • 经验304
              • 文章14
              • 注册2011-03-07
              多谢楼上的兄弟:
              这个问题是因为的你的使用RAM超过4K,芯片无法启动的问题, 是因为MSP430一上电,看门狗就启动了, 但是RAM使用过大, 程序在初始化RAM的过程中时间过长,看门狗就溢出了,使得单片机复位了。 解决办法是是把 关闭看门狗的语句WDTCTL = WDTPW + WDTHOLD;  放在__low_level_init() 里面,因为这个函数要优先于RAM初始化的程序运行。

              --------------------------------------------------------------------------------

              这个问题我想我今天上午应该真的解决了,找问题的过程有些复杂,另外我还得花时间来更换原先利尔达的程序,所以暂时不在这里描述了,等我整理完毕再和大家讨论。
              要避免一见钟情的沉沦,记得不要看她第一眼。
              在线情况
              7
              • 头像
              • 级别
                • 积分2
                • 经验337
                • 文章4
                • 注册2006-10-07
                找到了问题就好,和我说的方式差不多,解决了就好。
                微控网感谢您的参与
                在线情况
                8
                • 头像
                • 级别
                  • 积分13
                  • 经验304
                  • 文章14
                  • 注册2011-03-07
                  多谢楼上兄弟,我在另外的论坛中也有兄弟回复我可能是初始化的变量太多而导致看门狗复位,也告诉了我解决方法。
                  真的很感谢你们,当然,我现在的问题的本质不是这样的,昨天已经解决了,最后故意把很多no_init的修饰去掉也不会有问题,而且现在整个系统的变量比上次还多,都不会出问题,看来是真的解决了。
                  不过。利尔达的demo程序真的不敢恭维,所有的demo模块,基本都是只能给你严重一下demo板子而已,我现在出的问题就是因为利尔达的程序没写好……现在正在重写所有的模块,还有两个没弄完,等弄完了,我想我会把解决过程发出来给大家交流的。
                  要避免一见钟情的沉沦,记得不要看她第一眼。
                  在线情况
                  9
                  • 头像
                  • 级别
                  • 门派
                  • 职务总版主
                  • 声望+9
                  • 财富5
                  • 积分3065
                  • 经验390701
                  • 文章6744
                  • 注册2006-03-07
                  期待“幽游梦蝶”的项目完成,我在用CC430F5317时也有碰到过不少“[B]诡异问题[/B]”!
                  希望有机跟你交交....[EM14]
                  [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
                  Powered by LeadBBS 9.2 .
                  Page created in 0.1719 seconds with 5 queries.