打印

GD32H759 用vscode+eide开发的一些问题

[复制链接]
169|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shuwei1984|  楼主 | 2025-4-24 19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
GD32H759IMK6 芯片,野火的开发板

用VSCode + EIDE + Arm GNU Toolchain 工具 11.3.Rell版编译  xpack+openocd + fireDAP仿真器下载运行

用VSCode带的 Cortex-Debug插件进行debug时,内存变量值经常取不到,都显示是个0。先怀疑是缓存的问题,使用SCB_InvalidateDCache_by_Addr命令先对要看的内存进行“Invalidate”操作后,可以看到断点时该变量的值。但只能对专门这样分配的全局内存数据起效果,对于局部变量没有用。

只能进行一些简单的调试判断。

今天又增加了LWIP功能,结果用gcc编译的在启动使用netconn api写的网络数据进程时,直接死掉了。调试因为变量无论怎么断点看都是个0值,没法调试看问题出在哪里。

同样的工程在IAR上编译调度时,没有这个问题。都能正常运行。我是一份代码做了两个调试环境。IAR就没这些问题。

另外,GD自己的模板生成系统生成的示例代码工程中,对GD32H7xx系列的*.ld文件过于简单,1024kB+16+ 16KB的RAM,ld文件里面只给定义了512kB。这个LD文件 有人扩写调试好的版本有没?

除了Keil和IAR两个收费的开发工具外,开源的IDE工具还有哪些能用的?

使用特权

评论回复
沙发
aozima| | 2025-4-24 21:27 | 只看该作者
栈先调大些,或单步确认下栈没有溢出,gcc编译出来的栈消耗会略大些。

使用特权

评论回复
板凳
chenqianqian| | 2025-4-24 21:30 | 只看该作者
开源的话用eclipse加编译器插件开发模式

使用特权

评论回复
地板
shuwei1984|  楼主 | 2025-4-25 10:49 | 只看该作者
aozima 发表于 2025-4-24 21:27
栈先调大些,或单步确认下栈没有溢出,gcc编译出来的栈消耗会略大些。

把栈改成了4K,没有效果.

/* memory map */
MEMORY
{
  FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 3840K
  RAM (xrw)       : ORIGIN = 0x24000000, LENGTH = 512K
}

ENTRY(Reset_Handler)

SECTIONS
{
  __stack_size = DEFINED(__stack_size) ? __stack_size : 4K;




这么一段代码中:

ip_addr_t server_ip;

// 一个用于网络通讯的功能块
void Task_NetCommunate(void* pvParameters)
{

    u16_t server_port = 9999;                                     // 服务器端口号初始化

    // ip4addr_aton("192.168.10.153", &server_ip);                            // 服务器IP地址初始化

    // vTaskDelay(5000);
    server_ip.addr = 3232238233;

    while(DEF_ON)
    {
        NetComm_ClientProcess(server_ip, server_port);

        vTaskDelay(APP_CFG_TASK_COMM_LOCAL_TICKS);
    }
}

运行到循环内,,server_ip.addr的值居然是个0,百思不得其解。Port值是9999倒没错。


gcc编译的锅还是怎么回事儿。

使用特权

评论回复
5
shuwei1984|  楼主 | 2025-4-25 10:51 | 只看该作者
chenqianqian 发表于 2025-4-24 21:30
开源的话用eclipse加编译器插件开发模式

已下单去买GD-Link,到时候试试GD提供的IDE调试看看

使用特权

评论回复
6
laocuo1142| | 2025-4-25 13:28 | 只看该作者
在编译选项中降低优化级别。

使用特权

评论回复
7
stormwind123| | 2025-4-25 13:31 | 只看该作者
GCC编译的工程可能未正确配置中断向量表或中断优先级。

使用特权

评论回复
8
probedog| | 2025-4-25 13:32 | 只看该作者
开源IDE工具可以试试Eclipse + GNU MCU Eclipse插件。

使用特权

评论回复
9
probedog| | 2025-4-25 13:32 | 只看该作者
本帖最后由 probedog 于 2025-4-25 13:34 编辑

使用特权

评论回复
10
flycamelaaa| | 2025-4-25 14:03 | 只看该作者
LWIP的内存分配可能与GCC的内存管理实现不兼容,导致内存泄漏或越界。

使用特权

评论回复
11
shuwei1984|  楼主 | 2025-4-25 14:18 | 只看该作者
laocuo1142 发表于 2025-4-25 13:28
在编译选项中降低优化级别。

不优化方式也是一样

使用特权

评论回复
12
shuwei1984|  楼主 | 2025-4-25 14:19 | 只看该作者
stormwind123 发表于 2025-4-25 13:31
GCC编译的工程可能未正确配置中断向量表或中断优先级。

向量表用的是GD给的模版表

使用特权

评论回复
13
shuwei1984|  楼主 | 2025-4-25 14:23 | 只看该作者
flycamelaaa 发表于 2025-4-25 14:03
LWIP的内存分配可能与GCC的内存管理实现不兼容,导致内存泄漏或越界。

断点跟踪到等待连接信号量时,就卡住不动了,信号量是FreeRTOS系统提供的功能。

ret = xSemaphoreTake(sem->sem, portMAX_DELAY);

到这一句,过几秒系统就崩了。

使用特权

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

本版积分规则

1

主题

6

帖子

0

粉丝