This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/DK-TM4C129X:使用 GrStringDraw ()时生成 FaultISR ()

Guru**** 2481465 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/702362/ccs-dk-tm4c129x-faultisr-generated-when-grstringdraw-used

器件型号:DK-TM4C129X

工具/软件:Code Composer Studio

您好!

我正在研究一个项目、该项目涉及对模拟信号进行采样并对其执行 FFT、捕获基本频率指数和振幅、并显示在 Kentec K350QVG2-F 320x240 LCD 显示屏上。 为了显示它们,我使用了 snprintf() 函数将基波振幅(浮点值)转换为字符串,然后使用 GrStringDraw 函数显示该字符串,但调用 StringDraw 函数时,程序会转到 FaultISR()。 我尝试将堆栈大小从512增加到2048、但它不起作用。 删除 GrStringDraw (),然后运行不会导致 FaultISR,因此可以确定此函数会导致错误。 我尝试使用有关诊断 FAULTISR 的"spma043"文档进行调试、但它没有帮助。 我的 NVIC_FAULT_STAT 寄存器具有指令总线错误位 SIT。

这就是我使用函数的方式:

uint32_t fftSize = 256;
uint32_t ifftFlag = 0;
uint32_t doBitReverse = 1;
float32_t maxValue;
uint32_t testIndex = 0;
tContext;
uint32_t sysclock;
char buffer[100];

//通过 CFT/CtTestFlag
= 0处理数据;tcontext;uint32_t sysclock;tif_t buffer32_t32_t flag;// tift32_tflag;// tflag_tift32
/*通过复数幅度模块处理数据、以
计算每个区间的幅度*/
arm_cmplx_mag_F32 (testInput_F32_10kHz、TestOutput、fftSize);
TestOutput[0]= 0;
//计算 maxValue 并返回相应的 sbin 值*/
arm_max_F32 (testOutput、fftSize、&TestSize
、maxIndex、maxIndex); 100、"%06f"、maxValue);
GrStringDraw (&sContext、buffer、-1、100、50、0);
//GrStringDrawCenter(&sContext、 Buffer、-1、
//GrContextDpyWidthGet (&sContext)/ 2、50、false);



有人对如何解决此问题有什么想法吗?

谢谢、

Harshul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果它不是堆栈、那么故障 ISR 的最常见原因之一就是在使用外设之前无法初始化外设。 您是否初始化了连接到 Kentec 的外设? 您可以在示例 DK-grlib_demo 中使用的文件 pinout.c (C:\ti\TivaWare_C_Series-2.1.4.178\examples\boards\dk-tm4c129x\drivers\pinout.c)中查看函数 PinoutSet()。

    此外,在 FaultISR()函数中查看 LR。 它通常指向导致故障的指令之后的指令。 通过检查汇编语言和 CPU 寄存器内容、您可以识别发生故障时正在访问的地址(以及哪个外设)。