RT-Thread论坛
直播中

刘埃生

7年用户 1706经验值
私信 关注

ART-PI Smart User运行LED程序崩溃的原因?怎么处理?

使用的master分支下的代码,通过 6ull bootloader 中的tftp获取kernel后能正常运行,并挂载emmc,和sd卡。


\ | /
- RT -     Thread Smart Operating System
/ | \     5.2.0 build Jul  5 2024 05:55:07
2006 - 2024 Copyright by RT-Thread team
lwIP-2.1.2 initialized!
[142] E/gt911: Can't find i2c3 device
[150] I/sal.skt: Socket Abstraction Layer initialize success.
[156] I/drivers.serial: Using /dev/ttyS0 as default console
[216] I/SDIO: SD card capacity 15558144 KB.
[229] I/SDIO: sd: switch to High Speed / SDR25 mode
found part[0], begin: 4194304, size: 14.853GB
[282] I/SDIO: emmc card capacity 7634944 KB, card sec count:15269888.
[291] I/SDIO: emmc: switch to HIGH Speed mode
found part[0], begin: 10485760, size: 500.0MB
found part[1], begin: 629145600, size: 6.712GB
emmc file system initialization done!
sd0 file system initialization done!
open em failed!
hello rt-smart
在userapps中添加led_test.c,代码如下:


#include "led_test.h"
#define LED_PIN  GET_PIN(1,3)
int main()
{
    rt_device_t pin_dev;
    struct rt_device_pin_mode pin_mode;
    struct rt_device_pin_status pin_status;
    pin_dev = rt_device_find("pin");
    if (pin_dev == RT_NULL)
    {
        rt_kprintf("not find pin device!\n");
        return -1;
    }
    rt_device_open(pin_dev, RT_DEVICE_OFLAG_RDWR);
    pin_mode.pin = LED_PIN;
    pin_mode.mode = 0;
    rt_device_control(pin_dev, 0 ,(void*)&pin_mode);
    pin_status.pin = LED_PIN;
    while(1)
    {
        pin_status.status = 0;
        rt_device_write(pin_dev, 0 ,(void*)&pin_status, sizeof(pin_status));
        rt_thread_mdelay(200);
        pin_status.status = 1;
        rt_device_write(pin_dev, 0 ,(void*)&pin_status, sizeof(pin_status));
        rt_thread_mdelay(200);
    }
    rt_device_close(pin_dev);
    return 0;
}






将Userapps 下的hello 和 led 编译后放到sd卡中,kernel运行后运行hello正常,但是运行led,程序直接崩溃了。


msh /sd0>./hello
msh /sd0>hello world! test
msh /sd0>./led
msh /sd0>Function[rt_aspace_fault_try_fix]: scheduler is not available
thread   pri  status      sp     stack size max used left tick   error  tcb addr
-------- ---  ------- ---------- ----------  ------  ---------- ------- ----------
led       25  running 0x00000048 0x00004000    10%   0x000000bc OK      0xc01a0990
tshell    20  suspend 0x0000023c 0x00001000    59%   0x00000008 OK      0xc0197b1c
tsdcard   30  suspend 0x0000011c 0x00000800    31%   0x00000014 EINTRPT 0xc0196a38
wlan      15  suspend 0x000000e8 0x00000800    11%   0x0000000a OK      0xc019290c
ttywork    3  suspend 0x000000e8 0x00001000    05%   0x0000000a OK      0xc0191754
mmcsd_de  22  suspend 0x00000138 0x00001000    41%   0x00000004 EINTRPT 0xc018028c
sys wor   23  suspend 0x000000e8 0x00001000    05%   0x0000000a OK      0xc019059c
tcpip     10  suspend 0x00000180 0x00002000    05%   0x00000014 EINTRPT 0xc018e3e4
erx       12  suspend 0x00000138 0x00002000    03%   0x00000010 EINTRPT 0xc01731ac
pcache    25  suspend 0x00000170 0x00002000    05%   0x00000005 EINTRPT 0xc018c1c4
tidle0    31  ready   0x0000007c 0x00002000    11%   0x00000015 OK      0xc01818e8
timer      4  suspend 0x00000130 0x00001000    07%   0x00000008 EINTRPT 0xc0183d00
backtrace:
0xc00caf70 @ assert_handler
0xc00caf74 @ assert_handler
0xc010ba8c @ rt_assert_handler
0xc006ed74 @ rt_aspace_fault_try_fix
0xc00c9f44 @ check_data_abort
0xc00ca3a8 @ rt_hw_trap_dabt
怀疑是led测试程序的问题,然后将这部分功能直接放到kernel中,通过msh来调用,是可以正常运行的。
看了下运行报错的地方,没太搞懂是为啥出现了这个情况, 有大佬能解答一下么

回帖(2)

王雪

2024-7-5 17:03:29
可以在内核层面加些log看看。出错时的栈回溯是有的,像是访问了非法地址
举报

王浩

2024-7-5 17:43:52
根据你提供的信息,ART-PI Smart User运行LED程序崩溃可能由以下几个原因导致:

1. **硬件问题**:如果硬件连接不稳定或损坏,可能导致程序运行时出现问题。检查LED连接和电源供应是否正常。

2. **驱动问题**:错误日志中提到`[142] E/gt911: Can't find i2c3 device`,这表明系统无法找到I2C3设备。如果LED控制依赖于这个I2C设备,那么驱动问题可能是导致程序崩溃的原因。检查I2C3设备的连接和配置是否正确。

3. **软件问题**:可能是程序代码中存在bug,或者软件与硬件不兼容。检查代码是否有逻辑错误或不恰当的硬件操作。

4. **系统问题**:系统日志显示`lwIP-2.1.2 initialized!`,表明网络协议栈已经初始化。如果LED程序依赖网络功能,需要确保网络配置正确。

5. **权限问题**:确保运行程序的用户有足够的权限访问所需的硬件资源。

处理方法:

- **检查硬件**:重新检查LED和I2C3设备的连接,确保没有物理损坏或连接错误。

- **更新或重新安装驱动**:如果怀疑是驱动问题,尝试更新或重新安装I2C3的驱动。

- **调试程序**:使用调试工具检查程序运行时的行为,查找可能导致崩溃的代码段。

- **检查系统配置**:确保系统配置正确,特别是与LED和I2C3设备相关的配置。

- **查看错误日志**:错误日志中可能包含更多关于崩溃原因的线索。检查系统日志以获取更多信息。

- **咨询社区或技术支持**:如果问题依然无法解决,可以在RT-Thread社区或相关技术支持论坛寻求帮助。

- **回退到稳定版本**:如果问题出现在最近的更新后,可以尝试回退到之前的稳定版本。

- **隔离问题**:尝试在最小系统配置下运行LED程序,逐步增加配置以确定问题来源。

最后,由于你提到使用master分支下的代码,如果问题持续存在,可以考虑切换到其他分支或标签(tag),看看是否有不同的结果。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分