您尚未登录。

楼主 # 2024-05-06 11:07:46

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

d133打开网口后,编译报错。

报错如下。

bsp\artinchip\hal\syscfg\hal_syscfg.c: In function 'syscfg_gmac_init':
bsp\artinchip\hal\syscfg\hal_syscfg.c:408:42: error: 'SYSCFG_GMAC_RXDLY_SEL_SHIFT' undeclared (first use in this function); did you mean 'SYSCFG_GMAC_TXDLY_SEL_SHIFT'?
  408 |         cfg |= (AIC_DEV_GMAC0_RXDELAY << SYSCFG_GMAC_RXDLY_SEL_SHIFT);
      |                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                            CC bsp\artinchip\sys\d13x\time.c
SYSCFG_GMAC_TXDLY_SEL_SHIFT
bsp\artinchip\hal\syscfg\hal_syscfg.c:408:42: note: each undeclared identifier is reported only once for each function it appears in
  CC bsp\artinchip\sys\d13x\trap_c.c
scons: *** [output\d13x_cbs-nor_rt-thread_can2eth\bsp\artinchip\hal\syscfg\hal_syscfg.o] Error 1
scons: building terminated because of errors.

之前遇到过这个问题,忘了是怎么解决的了,好像是自己加了个这个定义。
今天更新到1.0.4后,再次编译,又遇到这个错误了。
请教,该如何解决?

离线

楼主 #1 2024-05-06 11:32:52

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: d133打开网口后,编译报错。

追踪SYSCFG_GMAC_RXDLY_SEL_SHIFT这个定义,发现需要AIC_SYSCFG_DRV_V10这个宏定义使能才有其定义。没找到怎么打开这个功能。

        #if AIC_DEV_GMAC0_RXDELAY
        cfg |= (AIC_DEV_GMAC0_RXDELAY << SYSCFG_GMAC_RXDLY_SEL_SHIFT);
        #endif

然后返回来,看到AIC_DEV_GMAC0_RXDELAY这个定义,是在me菜单里gmac0参数设置里配置的,默认是12,改成0后,就不执行下边那行了,可以通过编译了。

离线

楼主 #2 2024-05-14 11:29:04

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: d133打开网口后,编译报错。

网口又遇到问题了,这个板子之前用1.0.3版本sdk时,网口能调通。
现在用1.0.4,pc可以ping通板子,板子无法ping通pc。

离线

楼主 #3 2024-05-14 11:51:15

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: d133打开网口后,编译报错。

板子没问题,pc切到ubuntu后,板子可以ping通pc。
看样子是win10需要做些配置修改。

那么有个问题,如果不像修改win10配置,就这样ping不通win10,那么影响板子通过udp和tcp连接win10吗?

最近编辑记录 Gentlepig (2024-05-14 12:03:05)

离线

楼主 #4 2024-05-16 16:57:15

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: d133打开网口后,编译报错。

想在屏幕上显示本机ip,查看ifconfig命令的实现,看到是读取了全局变量netif_list或netif_default。
于是在Lvgl界面初始化里加了个label,初始化值为netif_list->ip_addr,按钮回调函数里,也更新这个label值为netif_list->ip_addr.
结果下载后第一次运行,能正常显示本机地址。但是重启后,就进不到应用程序了,串口中断也卡住不更新了。

后来发现在设置lalbe值为netif_list->ip_addr之前,加个rt_thread_mdelay(),不管多小。界面就又正常了。

请教,这是为什么?

void test_ui_init()
{
    lv_obj_t * btn = lv_btn_create(lv_scr_act());     /*Add a button the current screen*/
    lv_obj_set_pos(btn, 50, 50);                            /*Set its position*/
    lv_obj_set_size(btn, 120, 50);                          /*Set its size*/
    lv_obj_add_event_cb(btn, btn_event_cb, LV_EVENT_ALL, NULL);           /*Assign a callback to the button*/

    lv_obj_t * label = lv_label_create(btn);          /*Add a label to the button*/
    lv_label_set_text(label, "get ip address");                     /*Set the labels text*/
    lv_obj_center(label);

    rt_thread_mdelay(1);

    labelIpaddr = lv_label_create(lv_scr_act());
    lv_label_set_text_fmt(labelIpaddr, "local ip addr:0x%X", 0xaa55);
    lv_label_set_text_fmt(labelIpaddr, "local ip addr: %s", ip4addr_ntoa(&netif_list->ip_addr));
    lv_obj_set_pos(labelIpaddr, 200, 50);
    lv_obj_set_size(labelIpaddr, 400, 50);
}

离线

楼主 #6 2024-05-17 08:50:35

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: d133打开网口后,编译报错。

aozima 说:

比如 netif_list 为空?甚至还没初始化,是个脏值。

不检查就直接访问么?

确实是这个问题,lvgl线程和lwip_test_example优先级相同,改成lwip线程优先级更高一点就没事了。

请教,netif_list没初始化时,lvgl线程调用netif_list->ip_addr为什么会卡死?因为该指针是个不正常的位置值,进行读取造成程序无法运行?

另,如何检查呢?不懂指针的检查方法?

-------------------------------

搜了下,说是c语言指针未初始化时为NULL,也就是0.
那么netif_list为0时,调用netif_list->ip_addr为什么程序会卡死?

-------------------------------

gpt回答的:
在C语言中,如果一个指针未初始化,那么访问该指针所指向的结构体变量会导致未定义的行为。这可能会导致程序崩溃、产生奇怪的结果,或者其他不可预测的行为。

未初始化的指针会包含一个未知的内存地址,当你尝试通过这个指针去访问结构体的成员时,实际上是在尝试读取一个未知内存地址的内容,这是非常危险的行为。这种行为可能导致程序崩溃,或者读取到不可预测的数据,因为该内存区域可能被其他数据所覆盖,或者根本不存在有效数据。

因此,在使用指针之前,一定要确保将其初始化为合适的值,比如将其设置为一个有效的内存地址,或者使用NULL来表示空指针。

最近编辑记录 Gentlepig (2024-05-17 09:02:52)

离线

楼主 #9 2024-05-17 10:36:01

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: d133打开网口后,编译报错。

海石生风 说:

复习下C语言的基础吧。只有位于BSS段的全局变量才会被自动初始化为0,而且这个初始化不是语言本身实现的,而是执行main函数之前的启动代码执行的。

受教。

15231831111 说:

解决了

将rx tx延时设置为0,就不会报错了。

最近编辑记录 Gentlepig (2024-05-17 10:39:20)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn