12
返回列表 发新帖
楼主: a5566255

HCS08运行不稳定,极易出错?

[复制链接]
  • TA的每日心情
    开心
    2018-9-14 09:26
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    70

    主题

    329

    帖子

    0

    高级会员

    Rank: 4

    积分
    952
    最后登录
    2021-1-4
    发表于 2011-9-6 08:55:13 | 显示全部楼层

    回复:HCS08运行不稳定,极易出错?

    对了,楼主。你这三个程序你运行完了吗?有时运行过程中变量的值是错的,结果却是对的。

    该用户从未签到

    1

    主题

    8

    帖子

    0

    新手上路

    Rank: 1

    积分
    21
    最后登录
    1970-1-1
     楼主| 发表于 2011-9-6 16:54:28 | 显示全部楼层

    回复:HCS08运行不稳定,极易出错?

    <div style="border-bottom: #ccc 1px dashed; border-left: #ccc 1px dashed; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top: #ccc 1px dashed; border-right: #ccc 1px dashed; padding-top: 5px">回复第 6 楼 于2011-09-05 06:05:50发表:
    1、如过在中断中这样处理,指针的位置要放对,我不明白的是,入口为什么要是指针呢?
    2、中断中处理的时候,局部变量和全局变量的不同
    3、程序改为下述试试。
    void Cal_Test(float Table_test)
    {
    unsigned char i=0;
    for(i=0;i

    该用户从未签到

    1

    主题

    8

    帖子

    0

    新手上路

    Rank: 1

    积分
    21
    最后登录
    1970-1-1
     楼主| 发表于 2011-9-6 17:04:49 | 显示全部楼层

    回复:HCS08运行不稳定,极易出错?

    回复第 8 楼 于2011-09-05 06:43:28发表:
    哦,楼主是想看看CW的能力。
    安版主的意思是让你少传些实参看看。
    你也可以先验证下是哪行出的错误,参数初始值错了,安版主的改法就是对的。
    如果是累加出的错误,那你只能自己看看汇编代码了,自己改CW的错误。
    其实你第三个正确的例子,i的定义也有问题。
    我觉得在8位单片机里研究浮点数,没什么意义。
     

    首先感谢兄台一直关注我的问题!
    我实际的程序有点复杂(实际上很简单时也不容易出错的),并且我对fsl的汇编不熟,也不想搞熟(就用它做几个小产品,做完就不太用了),所以看汇编不太方便;
    但是出错的地方我还是非常确定的,那就是定义在不同数据区造成的,我甚至遇到过仅仅是一个flag(不是等于0就是1,判断标志而已),放在zeropage一切正常,不放在zeropage,就赋值贱不进,一直是个固定的非0值,感觉编译器把这个flag分配到code区了???
    CW配置除了新建工程时一定要选择着MCU型号,仿真器,是否支持浮点等,就再也没有改过其它配置的。
    关于我的i,还请大侠详述有什么问题?

    该用户从未签到

    1

    主题

    8

    帖子

    0

    新手上路

    Rank: 1

    积分
    21
    最后登录
    1970-1-1
     楼主| 发表于 2011-9-6 17:10:30 | 显示全部楼层

    回复:HCS08运行不稳定,极易出错?

    回复第 7 楼 于2011-09-05 06:38:00发表:
    硬件设计有问题,供电不稳,emc没处理好也是会造成这些问题的 

    嗯嗯,我第一怀疑编译器,第二就是也对硬件不太放心,我们画版的工程师经验比较少,焊接更不熟,之前的板子在SPI传输时,手指一碰模拟放大区域立刻出错一大堆,不碰传输出错几率就少了许多。。。
    但现在好多了,而且我定义在zeropage时它就不再出错了嘛。。。
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-9-6 17:24:50 | 显示全部楼层

    RE:HCS08运行不稳定,极易出错?

    那个float * 指针是系统自动分配的临时变量(我知道51会为临时变量重复利用RAM,不知freescale是把变量放哪的。
    这个不行的。C语言里面,使用的入口参数,并且还要给别的地方用到,必须是全局变量,临时变量会被清掉。这个是C语言的规则,而并非编译器的问题。你把他该位全局变量试一下,保证没有问题。
    该会员没有填写今日想说内容.

    该用户从未签到

    9

    主题

    64

    帖子

    0

    注册会员

    Rank: 2

    积分
    126
    最后登录
    1970-1-1
    发表于 2011-9-7 13:41:06 | 显示全部楼层

    RE:HCS08运行不稳定,极易出错?

    楼主,先确认一个问题:
          Table_test+=0.0045*i+123.456;
    这条语句是不是写错了?对一个指针赋值,也就是移动指针了。显然你的例子里移动指针是没有意义的。是不是该是这样
         *Table_test+=0.0045*i+123.456;
    如果没有错,我猜想啊,可能的原因是这样的。函数的变量都是一份拷贝。自然,函数调用时也会为指针Table_test创建一个临时变量,对Table_test的修改,不会改变实参的实际指向。你所说的zero ram区,结果就正确了,我觉得可能是碰巧为Table_test分配的临时变量的位置和实参“Table_test”指针指向的位置重合了,修改了Table_test,也就修改了实参“Table_test”指针指向的空间,这实际上是个很危险的错误。

    该用户从未签到

    1

    主题

    8

    帖子

    0

    新手上路

    Rank: 1

    积分
    21
    最后登录
    1970-1-1
     楼主| 发表于 2011-9-7 16:48:03 | 显示全部楼层

    回复:HCS08运行不稳定,极易出错?

    回复第 16 楼 于2011-09-07 05:41:06发表:
    楼主,先确认一个问题:
    Table_test+=0.0045*i+123.456;
    这条语句是不是写错了?对一个指针赋值,也就是移动指针了。显然你的例子里移动指针是没有意义的。是不是该是这样
    *Table_test+=0.0045*i+123.456;
    如果没有错,我猜想啊,可能的原因是这样的。函数的变量都是一份拷贝。自然,函数调用时也会为指针Table_test创建一个临时变量,对Table_test的修改,不会改变实参的实际指向。你所说的zero ram区,结果就正确了,我觉得可能是碰巧为Table_test分配的临时变量的位置和实参“Table_test”指针指向的位置重合了,修改了Table_test,也就修改了实参“Table_test”指针指向的空间,这实际上是个很危险的错误。 

    对,是写错了,我后面回复有

    该用户从未签到

    1

    主题

    8

    帖子

    0

    新手上路

    Rank: 1

    积分
    21
    最后登录
    1970-1-1
     楼主| 发表于 2011-9-7 16:56:59 | 显示全部楼层

    回复:HCS08运行不稳定,极易出错?

    回复第 15 楼 于2011-09-06 09:24:50发表:
    那个float * 指针是系统自动分配的临时变量(我知道51会为临时变量重复利用RAM,不知freescale是把变量放哪的。
    这个不行的。C语言里面,使用的入口参数,并且还要给别的地方用到,必须是全局变量,临时变量会被清掉。这个是C语言的规则,而并非编译器的问题。你把他该位全局变量试一下,保证没有问题。 

    安版主,你没有看清我后面的回复,我是说,对于
    void Cal_Test(float *Table_test)
    {
    。。。
    }
    这样一个函数,其实参是Table_test[30]这样一个数组,它当然被定义为全局的,并且是volatile的,
    我是说函数的形参是系统自动分配的临时变量(一般是吧),
    不过我这里是传的指针,应当连这个临时形参变量都不用分配了吧,
    所以这函数里都是一堆全局变量,我出问题只可能是因为是否定义在zeropage的区别了。。。

    该用户从未签到

    9

    主题

    64

    帖子

    0

    注册会员

    Rank: 2

    积分
    126
    最后登录
    1970-1-1
    发表于 2011-9-8 09:17:16 | 显示全部楼层

    回复:HCS08运行不稳定,极易出错?

    回复第 17 楼 于2011-09-07 08:48:03发表:
    回复第 16 楼 于2011-09-07 05:41:06发表:
    楼主,先确认一个问题:
    Table_test+=0.0045*i+123.456;
    这条语句是不是写错了?对一个指针赋值,也就是移动指针了。显然你的例子里移动指针是没有意义的。是不是该是这样
    *Table_test+=0.0045*i+123.456;
    如果没有错,我猜想啊,可能的原因是这样的。函数的变量都是一份拷贝。自然,函数调用时也会为指针Table_test创建一个临时变量,对Table_test的修改,不会改变实参的实际指向。你所说的zero ram区,结果就正确了,我觉得可能是碰巧为Table_test分配的临时变量的位置和实参“Table_test”指针指向的位置重合了,修改了Table_test,也就修改了实参“Table_test”指针指向的空间,这实际上是个很危险的错误。 

    对,是写错了,我后面回复有
     

    那我想不出出错的理由了。除了100大于数组长度有点问题外,看起来不应该有啥问题,况且你描述的问题和数组长度没有关系。说是栈溢出吧,第二种情况和第三种情况又是一样的。看汇编吧,看看到底有啥子不一样的地方。
    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-3 23:35 , Processed in 0.095816 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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