打印
[GW低功耗蓝牙MCU]

GW3323常见报错

[复制链接]
1303|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Lana636|  楼主 | 2024-4-30 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Lana636 于 2024-12-19 17:45 编辑

GW3323开发时常见报错代码:1.0 程序烧录不进去,提示“错误 芯片不支持功能请求”

原因:芯片供电不足。测试Vbat输入是否有3.3V,输出的电压Vddio是否有3.3V?


1.1、ERR: 2, EPC: 13e原因:指令跑飞异常。

1.2、ERR: 4原因:RAM溢出异常(野指针、空指针)。

1.3、ERR: 20原因:除0异常。


2、ERROR ======> GIE-DIS in Flash: 1, EPC=19602 MISS=1005a452
原因:关中断临界区内调用flash函数产生异常,1005a452是调用的位置。

内存报错,变量非法访问,函数调用异常,解决方法:
2.1、中断中的打印函数要用printk函数,里面的全局变量要用volatile申明,中断函数要放到com_text区域;即添加AT(.com_text.isr)。以下为示例:
AT(.com_rodata.isr)
const char str_1[] = "Tim3 done\r\n ";
AT(.com_rodata.isr)
const char str_2[] = "Tim3 %d\r\n ";
volatile u32 duty_n;
AT(.com_text.isr)
void timer3_isq(void)
{
    if (tmr_get_flag(TMR3, TMR_FLAG_UPDATE2) != RESET)
    {
        tmr_clear_flag(TMR3, TMR_FLAG_UPDATE2);
         func_A();//例如:gpio_toggle_bits(GPIOB_REG, GPIO_PIN_2);
        printk(str_1);
         printk(str_2,TMR3CON);
    }
}
例如func_A()中调用了func_B(),那么func_B()也要放入AT(.com_text.isr)区。

2.2、关中断程序及其在开中断前的操作都要放到flash中执行,否则会报此类错误。
备注:u32 isq_ALL;
void ARMDisableInt(void)
{
    isq_ALL = PICEN;
    PICEN = 0;
}

void ARMEnableInt(void)
{
    PICEN = isq_ALL;
}

2.3、
函数内某些变量没有初始化,导致运行时读到的是随机地址数据,也会出现ERROR异常

2.4、强制执行非对齐访问可能导致硬件错误中断,异常区域在.ld中添加. = ALIGN(512)或. = ALIGN(4);

3、ERROR ======> thread suspend: thread disorder, 2
原因:中断问题导致线程挂起
解决方法:中断中的打印函数要用printk函数,里面的全局变量要用volatile申明,中断函数要放到com_text区域;即添加AT(.com_text.isr)

4、“ERROR ======> timer_thread miss: 178a2, 4c624”
原因:系统timer函数中调用了flash函数,在.map文件中找到“178a2”即可定位发生异常的函数。
解决方法:把timer函数中flash函数加AT(.com_text),改到公共区。中断里面建议少跑点东西。

5、ERROR ======> CRC: 5085 c29f
原因:读取地址内容CRC检验结果不一样就报错。
解决方法:可能是你操作的时候把flash原来的程序破坏了,不然就是load flash的配置被改了"config.h"中更改#define FLASH_SIZE  FSIZE_1M

6、riscv32-elf-ld.exe:Output\obj\ram.o:1: syntax error
原因:工程路径中含括号()或中文
解决方法:检查路径名称并修改

7、appxm.o    unrecognize function"setfotaddr"
解决方法:在app.xm添加地址设置setfotaddr(addr); 注意,此命令需在setflash后进行设置,且在make命令之前,此时第二份代码实际存放的地址为 0x2000 + addr。举个例子,如果要将第二份代码存放在1M的位置,设置如下:setfotaddr(0xFE000); 若设置后编译报错,请将编译链(RV32-Toolchain-Setup)更新到最新版本(v1.3.9及以上)。

8、程序卡死在delay_ms()这个函数中
原因:TMR0CON寄存器由0x85变成0x10,故无法正常执行延时的功能。
解决方法:打印异常前TMR0CON的值,找到出现变化的位置,即可定位问题。例如未插入USB,就调用ude_rx_ack(),会造成TMR0CON的值被改写。






使用特权

评论回复
沙发
Lana636|  楼主 | 2024-5-7 09:40 | 只看该作者
本帖最后由 Lana636 于 2024-11-1 09:48 编辑

6666

使用特权

评论回复
板凳
Lana636|  楼主 | 2024-8-7 16:32 | 只看该作者
函数内某些变量没有初始化,导致运行时读到的是随机地址数据,也会出现ERROR异常

使用特权

评论回复
地板
Lana636|  楼主 | 2024-8-27 09:19 | 只看该作者
6、riscv32-elf-ld.exe:Output\obj\ram.o:1: syntax error
原因:工程路径中含括号()或中文
解决方法:检查路径名称并修改

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

9

帖子

0

粉丝