查看: 5141|回复: 8

[求助]MC9S08QE128 - 定时中断ADC采样

[复制链接]

该用户从未签到

1

主题

6

帖子

0

新手上路

Rank: 1

积分
10
最后登录
1970-1-1
发表于 2009-10-27 03:00:08 | 显示全部楼层 |阅读模式
大家好。我最近在使用Freescale的MC9S08QE128做传感器信号采集的应用,但是遇到一些问题,希望大家能帮忙看看分析一下原因,帮我解决这个问题。先谢谢啦!
 
使用的MCU是MC9S08QE128,基本应用是采用MCU上的ADC采集9路传感器信号,并存储数据到SD卡上。信号采样频率固定为30Hz,通过定时中断来实现的。程序基本流程如下:
 
系统初始化以后,等待定时中断。每隔33.3ms(对应30Hz),系统进入定时中断。为了保障一个固定的采样频率,中断不会关闭。在定时中断内,采用查询的方式用ADC采样9路信号,每路信号的数据会暂时保存在一个全局变量的数组里面。在主程序会查询这个全局数组是否存满。如果存满,则将数组中数据存入到SD卡(SD driver的程序是问Freescale要的)。在存储的过程中,定时中断也不会关闭,为了保证恒定的采样率。
 
问题是大约经过5分钟左右的时间,系统程序会跑飞。在debug模式下查看,发现所有的寄存器控制字都变化。个人感觉是RAM溢出,但是我增加了stack size,也无法解决问题。所以求助大家的帮忙,谢谢!
 
如果有人有时间来分析我的程序,我可以上载上来。再次感谢!
 
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2009-10-27 09:21:36 | 显示全部楼层

    回复:[求助]MC9S08QE128 - 定时中断ADC采样

    你好。我个人认为是你在将数据存储到SD卡的时候,同时也发生了中断,可能是这个导致你的程序跑飞的。
    该会员没有填写今日想说内容.

    该用户从未签到

    1

    主题

    6

    帖子

    0

    新手上路

    Rank: 1

    积分
    10
    最后登录
    1970-1-1
     楼主| 发表于 2009-10-27 21:40:07 | 显示全部楼层

    回复:[求助]MC9S08QE128 - 定时中断ADC采样

    引用第 2 楼 安  于2009-10-27 01:21:36发表:
    你好。我个人认为是你在将数据存储到SD卡的时候,同时也发生了中断,可能是这个导致你的程序跑飞的。
     

    应该不是SD的问题。。。我试过不用定时中断来固定采样频率,而是直接在主程序里面连续ADC采样,然后存储到SD卡上,这样程序就一点问题没有。
     
    我发现有可能是因为使用的全局数组变量的问题,如果没有这个全局数组,及时有定时中断,程序也不会跑飞。但是我还需要有全局数组来存储ADC采样的数据,所以就不知道该怎么修改程序了。。。
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2009-10-28 09:16:01 | 显示全部楼层

    回复:[求助]MC9S08QE128 - 定时中断ADC采样

    既然是这样,请问一下,跑飞以后,程序运行到哪里?如果你的程序运行到硬件中断里面,我以前也出现过这样的情况,是因为你的数组定义范围,在你写的时候,如果超出了你的定义范围,程序就会跑飞,不知道是不是这个原因。你可以去查一下。
    该会员没有填写今日想说内容.

    该用户从未签到

    1

    主题

    6

    帖子

    0

    新手上路

    Rank: 1

    积分
    10
    最后登录
    1970-1-1
     楼主| 发表于 2009-10-28 22:25:04 | 显示全部楼层

    回复:[求助]MC9S08QE128 - 定时中断ADC采样

    引用第 4 楼 安  于2009-10-28 01:16:01发表:
    既然是这样,请问一下,跑飞以后,程序运行到哪里?如果你的程序运行到硬件中断里面,我以前也出现过这样的情况,是因为你的数组定义范围,在你写的时候,如果超出了你的定义范围,程序就会跑飞,不知道是不是这个原因。你可以去查一下。
     

    跑飞以后,程序跑到寄存器里面了,比如控制timer的status and control register的值都被改变了,就是跑到direct page中去了。
     
    我这个数组是全局变量,定义如下:volatile static UINT8   DataBuffer[450]。UNIT8是定义为unsigned char。 我试过减小数组的大小,把450改成100或者更小,但是程序还是会跑飞。
     
    你以前是具体怎样的情况?后来你又是怎么修改的呢?
     
    谢谢!
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2009-10-29 08:44:35 | 显示全部楼层

    RE:[求助]MC9S08QE128 - 定时中断ADC采样

    我是的意思是,当你进行操作时,DataBuffer[x],x是否超出了他的范围。比如说你的范围是100,你非要给101写。那必然会引起程序跑飞。你可以看看是不是这样的。我以前也遇到过这样的事情,就是因为我将X的值不断增加,但是没有注意他的范围。
    该会员没有填写今日想说内容.

    该用户从未签到

    1

    主题

    6

    帖子

    0

    新手上路

    Rank: 1

    积分
    10
    最后登录
    1970-1-1
     楼主| 发表于 2009-10-29 22:29:36 | 显示全部楼层

    回复:[求助]MC9S08QE128 - 定时中断ADC采样

    引用第 6 楼 安  于2009-10-29 00:44:35发表:
    我是的意思是,当你进行操作时,DataBuffer[x],x是否超出了他的范围。比如说你的范围是100,你非要给101写。那必然会引起程序跑飞。你可以看看是不是这样的。我以前也遇到过这样的事情,就是因为我将X的值不断增加,但是没有注意他的范围。 

    应该你说的这种问题,因为我的程序在头5分钟运行的时候,是完全没有问题的。只是运行超过一定时间,就会出问题,所以我感觉是内存被写满了。这个DataBuffer[x]的数组的声明是volatile static的,然后它在值在定时中断里面不断更新。但是不知道为什么会出现这种问题。。。
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2009-10-30 11:30:27 | 显示全部楼层

    RE:[求助]MC9S08QE128 - 定时中断ADC采样

    你可以定义一个变量,比如DataBuffer[x],你判断X的变量,如果X达到最大,你就保存数据,并将X=0。
    该会员没有填写今日想说内容.

    该用户从未签到

    1

    主题

    6

    帖子

    0

    新手上路

    Rank: 1

    积分
    10
    最后登录
    1970-1-1
     楼主| 发表于 2009-11-4 05:37:58 | 显示全部楼层

    回复:[求助]MC9S08QE128 - 定时中断ADC采样

    引用第 8 楼 安  于2009-10-30 03:30:27发表:
    你可以定义一个变量,比如DataBuffer[x],你判断X的变量,如果X达到最大,你就保存数据,并将X=0。 

    我程序里面就是这样做的。。。但是程序就是会跑飞。。
     
    你知道怎样在debug环境下,看程序跑飞到哪然后再哪一步跑飞的吗?因为程序会经过5,6分钟以后才跑飞,所以不是很方便用step mode。。。
     
    再次感谢啦
    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-3 23:30 , Processed in 0.095431 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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