小编Ess*_*Eid的帖子

Arm 4微控制器的硬故障错误

我的Tiva C控制器有问题很奇怪,我想要一些帮助,基本上它在一条sprintf线上崩溃,没有明显的理由这样做.我的应用程序只是一个智能玩具,可以通过蓝牙在各种模式下进行控制.对于模式,我们使用有限状态机代码并读取玩具的当前加速度仅用于监控,并且每隔一段时间使用周期性定时器发送它,每隔几秒产生一次周期性中断以更新值.促进

现在,加速度的读取是通过一个简单的函数读取完成,直到尝试将该读数存储在字符串中,并且程序只是抛出一个硬故障.这个功能(读取加速度)在玩具车的所有其他模式下都能正常工作,除了这种新模式它始终崩溃并抛出硬故障错误.我目前的想法是,它可能是由于太多的函数调用所以堆栈已满,但我怎么知道堆栈是否已满?

这是它崩溃的线:

sprintf(acceleration,"x%.2f y%.2f z%.2f", X_Axis1, Y_Axis1, Z_Axis1); 
Run Code Online (Sandbox Code Playgroud)

这是一个简单的sprintf存储从加速轴读出的值x,yz为什么发生这种情况的任何想法然后存储在加速度变量?

这也是定时器处理程序里面keil的故障报告我用来调用一个ReadAccel()函数,我做的函数除了最近的一个以外的所有模式都有效,所以我想我会把函数放在定时器处理程序里面的函数中来节省一点从堆栈,但它仍然给出了一个严重的错误 在此输入图像描述

如果有人可以重定向我如何判断这是否是一个堆栈完全错误我会非常感激,因为我认为这是它的本质.

void TIMER2A_Handler(void)
{
        char acceleration[22];
        RawX_Axis1=ReadAccelX();
        X_Axis1 = RawX_Axis1 * 0.00390625+0.35;
        RawY_Axis1=ReadAccelY();
        Y_Axis1 = RawY_Axis1 * 0.00390625+0.08;
        RawZ_Axis1=ReadAccelZ();
        Z_Axis1 = (RawY_Axis1 *  0.00390625)+1.08;
        sprintf(acceleration,"x%.2f y%.2f z%.2f",X_Axis1,Y_Axis1,Z_Axis1); 
        UARTSend(UART3_BASE,acceleration);
        UARTCharPut(UART3_BASE,'\n');
        TIMER2_RIS_R = 0xFFFFFFFF;
        TIMER2_ICR_R = 0xFFFFFFFF;  
}
Run Code Online (Sandbox Code Playgroud)

c microcontroller arm

0
推荐指数
1
解决办法
309
查看次数

标签 统计

arm ×1

c ×1

microcontroller ×1