最近使用mega128做了个16路检测器,通过两次的改版,工作基本完成。除了flash外可谓是用之至尽!IO口用的一个都没了,还通过译码器啥的外扩了近百个IO。但就在即将收工时发现16路检测数据中偶有一路会间歇性的随机犯些神经病。通过查代码感觉逻辑性换算可以。后来才发现数据变量用到了将近10K空间,而mega128才4K空间,估计是变量运行中有覆盖现象。但不知为什么检测器其他路工作正常。因为是16路分时单独工作,故需要大量的全局变量进行测频、判断报警、缓存数组都占了5K空间。都是整形数据。也不知道为什么其他路工作正常,内部数据到底是怎么存储的呢!看下数据存储空间吧!
数据存储区
$0000-$001F:32个寄存器
$0020-$005F:I/O寄存器
$0060-$00FF:扩展I/O寄存器
$0100-$10FF:内部4K SRAM
$1100-$FFFF:外扩 SRAM
单片机程序的全局变量一般是放在通用数据存储器(RAM)中,而局部变量一般是放在特殊功能寄存器当中。处理寄存器数据的速度比处理RAM数据要快,如果在一个局部函数里调用一个全局变量将会多生成好几个代码出来。所以,少定义全局变量,多定义局部变量。
这次做的确实有点问题,系统毫无扩展性。第一次单独做没考虑RAM这方面内容。也不知道数据内部存储到底是怎么回事,为什么现在系统基本可以正常运行!现在已经订购了mega1281(8K)做替换,希望不改版可以解决吧!貌似ISP接口不兼容,其他都可以,ATMEL为啥把mega128和64做的这么特殊!看看程序还能不能再优化些,下次再做一定的留足扩展空间!
文章评论(0条评论)
登录后参与讨论