找回密码
 立即注册
查看: 317|回复: 15

求助大神,debug问题,能够进入debug界面,但是运行几步就报错退出

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-05-01 10:09:20
已绑定手机

10

主题

15

回帖

110

积分

注册会员

积分
110
发表于 2025-3-24 19:00:01 | 显示全部楼层 |阅读模式
求大神解答debug的问题,两块板子都是STC8G1K08的单片机,每一个都能进入debug界面,但是都不能正常debug。

第一块板子出现这个情况,运行第一句就直接报错如图所示:
截图202503241857021574.jpg
截图202503241857171904.jpg

第二个块板子,能debug前几步,到EA=1;这一句就弹出图示的错误
截图202503241857418459.jpg
求大神解惑,谢谢
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-24 19:03:00 | 显示全部楼层
在针对STC8G1K08单片机的调试过程中,遇到能够进入Debug界面但无法正常执行调试的问题,可能涉及多个方面的原因。以下是对该问题的详细分析与建议:

1. 硬件连接与电源稳定性
首先,确保调试器与目标板的连接正确无误,包括电源、地线、调试信号线(如SWD或JTAG)等。电源不稳定或电压不足可能导致单片机在调试过程中异常。建议使用示波器检查电源电压是否在单片机的工作范围内,并确保电源滤波电容正常工作。

2. 调试器配置与固件版本
调试器的配置错误或固件版本不兼容也可能导致调试失败。请确认调试器支持STC8G1K08单片机,并检查调试器的固件是否为最新版本。此外,调试器的配置参数(如时钟频率、调试模式等)应与单片机实际使用的一致。

3. 单片机初始化代码
在调试过程中,单片机的初始化代码(如时钟配置、外设初始化等)必须在调试开始前正确执行。如果初始化代码存在问题,可能导致单片机在调试过程中无法正常工作。建议检查初始化代码,确保所有必要的配置都已正确设置。

4. 中断与异常处理
在调试过程中,如果单片机发生中断或异常,可能导致调试失败。请检查中断向量表是否正确配置,并确保中断服务程序(ISR)能够正确处理中断事件。此外,调试器可能无法正确处理某些异常(如非法指令、访问错误等),建议在代码中加入异常处理机制。

5. 调试信息与错误代码
根据您提供的错误代码(89341、89342、89343),这些代码可能与调试器的内部错误或单片机的特定状态有关。建议查阅调试器的用户手册或STC8G1K08的技术文档,了解这些错误代码的具体含义,并采取相应的解决措施。

6. 软件环境与工具链
确保使用的集成开发环境(IDE)和编译器工具链支持STC8G1K08单片机,并且版本为最新。某些旧版本的IDE或编译器可能存在兼容性问题,导致调试失败。建议使用官方推荐的开发工具,并保持工具链的更新。

7. 硬件复位与调试模式
在调试过程中,硬件复位或调试模式的切换可能导致调试失败。请确保在调试开始前,单片机已正确进入调试模式,并且在调试过程中不会发生意外的硬件复位。

8. 代码优化与调试符号
如果代码在编译时启用了优化选项,可能导致调试信息不准确或丢失。建议在调试时禁用代码优化,并确保调试符号(如变量、函数名等)已正确生成。

9. 调试器与单片机的兼容性
某些调试器可能与特定型号的单片机存在兼容性问题。建议尝试使用其他型号的调试器,或联系调试器厂商获取技术支持。

10. 硬件故障与元件损坏
最后,如果上述方法均无法解决问题,可能存在硬件故障或元件损坏。建议使用万用表或逻辑分析仪检查目标板的各个关键元件,确保其正常工作。

综上所述,针对STC8G1K08单片机的调试问题,建议从硬件连接、调试器配置、初始化代码、中断处理、错误代码解读、软件环境、硬件复位、代码优化、调试器兼容性以及硬件故障等多个方面进行排查。通过系统性的分析与测试,应能够找到问题的根本原因并予以解决。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2025-3-24 19:14:15 | 显示全部楼层
需要注意的是,debug过程中,不能占用仿真使用的外设,和操作仿真所使用的IO模式
例如串口仿真不可以再操作仿真占用的串口,否则就会导致仿真被挤掉退出
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-05-01 10:09:20
已绑定手机

10

主题

15

回帖

110

积分

注册会员

积分
110
发表于 2025-3-24 19:46:20 | 显示全部楼层
王*** 发表于 2025-3-24 19:14
需要注意的是,debug过程中,不能占用仿真使用的外设,和操作仿真所使用的IO模式
例如串口仿真不可以再操作 ...

您好,仿真的口是P3.1和P3.0,我代码里没有配置和动用这两个口,您看这样是不是就不会占用仿真的这两个口了?您看还有别的导致这个问题的可能吗?

点评

[attachimg]89345[/attachimg] 这里还是改动了 P30和P31的IO模式都不要修改,不然也会引起操作IO口造成仿真失败  详情 回复 发表于 2025-3-24 20:34
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2025-3-24 20:34:41 | 显示全部楼层
平*** 发表于 2025-3-24 19:46
您好,仿真的口是P3.1和P3.0,我代码里没有配置和动用这两个口,您看这样是不是就不会占用仿真的这两个口 ...

截图202503242034052892.jpg

这里还是改动了
P30和P31的IO模式都不要修改,不然也会引起操作IO口造成仿真失败
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-05-01 10:09:20
已绑定手机

10

主题

15

回帖

110

积分

注册会员

积分
110
发表于 2025-3-25 10:22:33 | 显示全部楼层
王*** 发表于 2025-3-24 20:34
这里还是改动了
P30和P31的IO模式都不要修改,不然也会引起操作IO口造成仿真失败
...

您好,我把P3.1和P3.0相关的代码都删除了,但还是从上到下一运行EA=1;这一句就显示图示的错误了,您看有啥别的原因嘛?

点评

那需要看一下是否串口操作中,是否出现了对寄存器直接赋值的情况 有一些寄存器是串口1,串口2共用的,如果出现直接赋值,可能会修改掉串口1的部分,就会导致执行出现问题了  详情 回复 发表于 2025-3-25 10:55
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2025-3-25 10:55:51 | 显示全部楼层
平*** 发表于 2025-3-25 10:22
您好,我把P3.1和P3.0相关的代码都删除了,但还是从上到下一运行EA=1;这一句就显示图示的错误了,您看有 ...

那需要看一下是否串口操作中,是否出现了对寄存器直接赋值的情况
有一些寄存器是串口1,串口2共用的,如果出现直接赋值,可能会修改掉串口1的部分,就会导致执行出现问题了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-05-01 10:09:20
已绑定手机

10

主题

15

回帖

110

积分

注册会员

积分
110
发表于 2025-3-25 11:12:20 | 显示全部楼层
王*** 发表于 2025-3-25 10:55
那需要看一下是否串口操作中,是否出现了对寄存器直接赋值的情况
有一些寄存器是串口1,串口2共用的,如 ...

您好,下面是我的写的,我是初学者我找了半天好像没有找到您说的串口1和串口2共用的寄存器,也可能是我学的不好没有找到,您能再给些建议嘛?非常感谢

#include "Config.h"
#include "STC8H.h"
#include "Manchester.h"
#include "STC8G_H_GPIO.h"
#include        "STC8G_H_UART.h"
#include        "STC8G_H_Delay.h"
#include        "STC8G_H_NVIC.h"
#include        "STC8G_H_Switch.h"

/***************  配置IO *****************/
void        GPIO_config(void)
{
        GPIO_InitTypeDef        GPIO_InitStructure;                //结构定义
        GPIO_InitStructure.Pin  = GPIO_Pin_2;               
        GPIO_InitStructure.Mode = GPIO_OUT_PP;               
        GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);        //初始化

        GPIO_InitStructure.Pin  = GPIO_Pin_0 | GPIO_Pin_1;               
        GPIO_InitStructure.Mode = GPIO_PullUp;       
        GPIO_Inilize(GPIO_P1,&GPIO_InitStructure);        //初始化
       
}

/***************  串口初始化函数 *****************/
void        UART_config(void)
{
        COMx_InitDefine                COMx_InitStructure;                                        //结构定义

        COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;       
        COMx_InitStructure.UART_BaudRate  = 115200ul;                       
        COMx_InitStructure.UART_RxEnable  = ENABLE;                               
        UART_Configuration(UART2, &COMx_InitStructure);               
        NVIC_UART2_Init(ENABLE,Priority_1);               
        UART2_SW(UART2_SW_P10_P11);               
}


/*****************主函数*****************/
void main()
{
       
        u8        i;
        u8 byte1, byte2;  // 用于存储接收到的两个字节
        u8 eff_data[6];  // 数据字节
        u8 checksum;  // 校验字节
        EA=1;
        EAXSFR();                /* 扩展寄存器访问使能 */
        GPIO_config();
        UART_config();
       
        while(1)
        {
                delay_ms(1);
                if(COM2.RX_TimeOut > 0)                //超时计数
                {
                        if(--COM2.RX_TimeOut == 0)
                        {
                                if(COM2.RX_Cnt >0)
                                {
                                       
                                   byte1 = RX2_Buffer[0];  // 获取帧头字节
                                   byte2 = RX2_Buffer[1];  // 获取数据字节
                                       
                                         // 获取数据字节
                                         for (i = 2; i < 8; i++)
                                        {
                                            eff_data = RX2_Buffer;
                                        }
                                       
                                        // 获取校验字节
                                       checksum = RX2_Buffer[7];
                                         
                                       // 发送帧头字节
                                       sendManchesterData(byte1);
                                       sendManchesterData(byte2);
                                         
                                         // 发送后6位数据字节
                                         for (i = 2; i < 8; i++)
                                         {
                                             sendManchesterData(eff_data);
                                         }


                                }
                                COM2.RX_Cnt = 0;
                        }
                               
                }
        }               
}

点评

方便发一下完整的工程吗,我测试一下是否可以正常仿真  详情 回复 发表于 2025-3-25 11:34
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2025-3-25 11:34:46 | 显示全部楼层
平*** 发表于 2025-3-25 11:12
您好,下面是我的写的,我是初学者我找了半天好像没有找到您说的串口1和串口2共用的寄存器,也可能是我学 ...

方便发一下完整的工程吗,我测试一下是否可以正常仿真
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-05-01 10:09:20
已绑定手机

10

主题

15

回帖

110

积分

注册会员

积分
110
发表于 2025-3-25 14:49:46 | 显示全部楼层
王*** 发表于 2025-3-25 11:34
方便发一下完整的工程吗,我测试一下是否可以正常仿真

那再感激不过了,我发给您我的工程,里面还有我拿到的下载器手册,我是按照这个手册里的第26页开始进行配置的,麻烦您了十分感谢。 需要仿真的工程.zip (13.01 MB, 下载次数: 4)

点评

你好,我测试是可以正常仿真的 [attachimg]89425[/attachimg] 可以拿我修改好的工程再尝试一下, [attachimg]89426[/attachimg][attachimg]89427[/attachimg]  详情 回复 发表于 2025-3-25 15:27
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 04:28 , Processed in 0.193430 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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