嵌入式技术william hill官网
直播中

王艳

7年用户 1276经验值
私信 关注
[问答]

RT-Thread程序运行一段时间一直复位是什么原因?

int fal_env_init(void)
{
struct rt_spi_device spi_bus;
struct rt_device flash_dev;
stm32_spi_bus_attach_device(33, "spi2", "spi20");
spi_bus = (struct rt_spi_device ) rt_device_find("spi20");
if (RT_NULL == rt_sfud_flash_probe(FAL_USING_NOR_FLASH_DEV_NAME, "spi20"))
{
return RT_ERROR;
}
/
config spi /
{
struct rt_spi_configuration cfg;
cfg.data_width = 8;
cfg.mode = RT_SPI_MODE_3 | RT_SPI_MSB; /
SPI Compatible: Mode 0 and Mode 3 /
cfg.max_hz = 30 * 1000000; /
100kHz /
rt_spi_configure(spi_bus, &cfg);
}
fal_init();
flash_dev = fal_mtd_nor_device_create("filesystem");
if (flash_dev == NULL)
{
LOG_E("Can't create mtd nor device on '%s' partition.", "filesystem");
}
else
{
LOG_D("Create a mtd nor device on the %s partition of flash successful.", "filesystem");
}
// /
格式化放在这句话前面控制器就可以正常启动,但是存储的参数就成了默认参数,脱离预期
/
// /
程序这么写也符合设计标准,但是运行一段时间后复位,一直复位,删除掉这一行程序也可以正常运行//只是读不到存储的数据*/
if (dfs_mount(flash_dev->parent.name, "/", "lfs", 0, 0) == 0)
{
LOG_D("Filesystem initialized!");
}
else
{
dfs_mkfs("lfs", flash_dev->parent.name);
if (dfs_mount(flash_dev->parent.name, "/", "lfs", 0, 0) == 0)
{
LOG_D("Filesystem initialized!");
}
else
{
LOG_E("Failed to initialize filesystem!");
}
}
{
read_para(); // 读取设置的参数
}
if (chdir("/sys") >= 0)
{
chdir("/");
return 0;
}
dfs_mkfs("lfs", "filesystem");
mkdir("/sys", 0);
mkdir("/image", 0);
mkdir("/usr", 0);
mkdir("/usr/para", 0);
mkdir("/usr/history", 0);
return 0;
}
//运行问题,解决问题的过程已经在上述注释中进行描述,还有一种解决的方式就是重新下载另一个格式化W25Q128 flash的程序,然后再下载当前程序,程序就可以正常运行。
不对flash进行格式化操作,程序就一直复位。

回帖(1)

李军

2023-4-3 14:19:11
分析下来,可能是因为flash中文件系统已损坏,造成程序运行出错了。
建议从几个方面来排除
把出问题的flash全片备份下供深层次的分析
尝试升级下文件系统,看能否在flash里面文件系统已出错的情况下还能不重启
不停重启时,有没什么有效果的日志?最好能想办法打印出详细的报错信息。
举报

更多回帖

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