db520136
db520136
This guy hasn't written anything yet

注册于 1 year ago

回答
2
文章
0
关注者
0

找到原因了!
image.png
我把这个理解为日志大小:
image.png
image.png
所以:
image.png
easyflash分区大小要适配。

最后编译烧写进入,第一次启动,还是会出现Log sector header error这样的提示,但是没有下面partition erase error! ... ... 红色的错误字样。
然后接下来复位下,就不会再出来Log sector header error这些打印了

试着把 sal_socket/include/socket/sys_socket/sys/socket.h 复制一份到sal_socket/include/目录中,编译就通过。
这样就怀疑是不是因为路径过深的原因,于是在文档中心看到image.png
但是我的设置里只有C,没有C++的,我就在红框image.png
这改了,还是不行,什么情况,有哪位懂的大哥解释下吗?

Mrp_Young 发表于 2020-6-6 16:55
easyflash 自带写平衡以及掉电保护,在写的过程中掉电数据会回退上次的值


那就是说着个00,肯定是我软件bug引发的吧? 我软件也没有对参数进行清零操作。。

aozima 发表于 2020-4-3 08:37
解析思路 ARM cortex-M 系列 HardFault的诊断

也可以使用 CMbacktrace


嗯嗯! 现在发现硬件电源有突高或者跌落,现在猜想是否是电源的原因影响了,先验证下!

aozima 发表于 2020-4-2 21:30
看着咋这么像电源负载带不动的赶脚,或是强干扰。


后来我不带载也试了,非常频繁的开关操作,又有个别的任务也出现hard fault on thread!
出现hard fault on thread这个一般都是什么错误! 是缓存不够吗?看着也不想。。

    本帖最后由 aozima 于 2020-3-25 16:35 编辑


aozima 发表于 2020-3-21 16:40
stm32 boot有问题的,99.99999%是中断相关的,中断地址配置不对,中断末关闭和清除而提前触发中断等。 ...

感谢! 是我的F0 中断向量表重定向这里之前是main函数开头写入了,rt-thread 中启动文件是先启动rtthread_startup,我吧中断向量表用自动初始化就解决了!再次感谢:handshake
int app_vector_redirection(void)
{
rt_memcpy((void*)0x20000000, (void*)0x08004000, 48*4);
SYSCFG->CFGR1 |= 0x03;
return 0;
}
INIT_BOARD_EXPORT(app_vector_redirection);


aozima 发表于 2020-3-21 14:49
看你图,你的BOOT在后面?APP在前面?

可以试下通用stm32的通用boot

boot 跳转到APP

\ | /
- RT - Thread Operating System
/ | \ 4.0.1 build Mar 16 2020
2006 - 2019 Copyright by rt-thread team
跳转完后,死在rt_system_scheduler_start()这函数里的rt_hw_context_switch_to((rt_ubase_t)&to_thread->sp);
大哥知道这个是什么情况吗?

aozima 发表于 2020-3-21 14:49
看你图,你的BOOT在后面?APP在前面?

可以试下通用stm32的通用boot


按着文档中 吧link.sct对应的改了下,可以跳转了!
奇怪我一开始就有改过的,但是他烧入失败,提示错误,就改回来了!
刚才没办法了,再试了一次,可以了:L
谢谢大哥,解答!

我从STVP上读了下,也发现程序是从0x08000000开始编写的,并不是偏移后的地址开始写的

aozima 发表于 2020-3-21 14:49
看你图,你的BOOT在后面?APP在前面?

可以试下通用stm32的通用boot


boot配置图是后面那张,这个通用的,不支持F0的

sunwan 发表于 2020-3-12 21:35
我发现easyflash的读写操作对父线程(就是调用ef_set_env_blob或ef_get_env_blob函数的线程)的栈要大点 ...


是的,我后来也是这么做的,把ef_set_env_blob函数放在了一个2048字节大小的线程中,就没有死机情况出现了!

感谢大哥,解答!!

    本帖最后由 db520136 于 2020-3-12 08:19 编辑


sunwan 发表于 2020-3-11 21:09
1个扇区写满了,然后把旧数据移动到新扇区,旧扇区擦除备用。

[Flash] (packages\EasyFlash-latest\src\ef_env.c:1059) Trigger a GC check after alloc ENV failed.
[Flash] (packages\EasyFlash-latest\src\ef_env.c:1190) Warning: Alloc an ENV (size 226) failed when new ENV. Now will GC then retry.
[Flash] (packages\EasyFlash-latest\src\ef_env.c:1258) The remain empty sector is 1, GC threshold is 1.
(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread) assertion failed at function:rt_thread_control, line numbe\0

死在了rt_assert_handler()里,这个也是?为什么会死机??这个情况是程序中连续多次设置参数,每次设置参数都会调用ef_set_env_blob进行保存的,多来几次就出现异常死机了

符合你的 total memory: 12056 数据
total memory: 12056
used memory : 8552
maximum allocated memory: 10692

这里用的memory ,.map文件不是也会核算进来的吗?
这里的memory不也是堆栈区(RAW)的吗? 按理来说只要使用map会统计出来的

还有些 ram 被栈和系统中的 ZI RW 数据占用了[/quote]
   Total RO  Size (Code + RO Data)               141948 ( 138.62kB)
    Total RW  Size (RW Data + ZI Data)             20096 (  19.63kB)
    Total ROM Size (Code + RO Data + RW Data)     142768 ( 139.42kB)

这段是我工程.map文件里的,ZI+Data 用了最多不到20k ,我的是32k的,按理来说只要用到了.map文件都会表示出来

回到
顶部

发布
问题

投诉
建议