Aurora_zk
Aurora_zk
This guy hasn't written anything yet

注册于 9 months ago

回答
418
文章
0
关注者
3

我的建议是,错误已经表明了在main线程中
你就把main线程里的代码全部注释掉,然后在一点点的去添加,什么时候出现问题,再去找具体的原因,毕竟代码少比代码多调试着方便,我个人更倾向于这一种。当然,方法没有好坏之分,能解决问题就行

既然你在嵌入式上的文件名是对的。那就把内容也改成和文件名一样的编码,这样显示不就正常了吗

自己制作个bsp吧!STM32 系列 BSP 制作
但是这个可能只支持env,要使用studio可能还要改

STM32出现HardFault_Handler故障的原因主要有两个方面:
1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。
2、堆栈溢出。增加堆栈的大小。

stm32硬件错误排除方法
出现问题时排查的方法:
1、发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、Return address、PSR、LR寄存器依次入栈,其中Return address即为发生异常前PC将要执行的下一条指令地址,因此在堆栈中反数第三个字即为出错位置。
2、默认的HardFault_Handler处理方法是B .将它改成BX LR直接返回的形式。然后在这条语句打个断点,一旦在断点中停下来,说明出错了,然后再返回,就可以返回到出错的位置的下一条语句那儿。
这个有时候可能需要在反汇编模式下调试,因为可以是程序跑飞一会儿才出现HardFault_Handler。

3、还是将中断函数修改,打印中断时的一些信息:
HardFault_Hander()定义如下:

void HardFault_Handler(void)
{
  uint32_t r_sp ;
  r_sp = __get_PSP(); //获取SP的值
  PERROR(ERROR,Memory Access Error!);
  Panic(r_sp);
  while (1);
}

单纯的使用串口呢,有问题吗。或者说裸机串口可不可以使用?

可以给你提供一个思路,具体的我也没试过
屏幕的每一个像素点的数据都是储存在一段数组中的,你要做的就是把这些数组里的值对调一下

也可以增大缓冲区,定时去清理缓存区里面的数据,为防止一些数据偶尔没有被释放掉的情况

一、你可以在main函数里创建线程去调用uart_sample函数

#define THREAD_PRIORITY         25
#define THREAD_STACK_SIZE       512
#define THREAD_TIMESLICE        5

static rt_thread_t tid1 = RT_NULL;

tid1 = rt_thread_create("uart_sample",
                        uart_sample, RT_NULL,
                        THREAD_STACK_SIZE,
                        THREAD_PRIORITY, THREAD_TIMESLICE);

二、在使用INIT_APP_EXPORT,INIT_BOARD_EXPORT等功能的时候记得考虑,此时驱动是否已经实现,可能会出现此时驱动未实现导致出错

暂时还不可以,rt-thread studio还不支持,还有RT-Thread Smart所有都不支持,估计马上就会支持时间不会太远 建议使用env+vscode进行开发,以前我都是使用这种,也挺好用的

我感觉这样设计的原因主要是在牵扯到除法,有时候被除的值是个变量的时候,你不能确定,这个值再出现异常的时候会不会出现等于0的情况,这样设计更加保险,不会出现一点错误就会使系统出现问题

因为测试集和系统之间存在差异,出现这种情况很正常,可能只是一点的差异都会引起不能正常部署

回到
顶部

发布
问题

投诉
建议