张世争
张世争

注册于 8 months ago

回答
189
文章
64
关注者
21

构建的工程,文件有重复,移除一个。
msh_1.c msh.c 其实是一个文件,工程里移除:msh_1.c

delay_ms(300); 这个delay_ms怎么实现的?
关全局中断响应了,systick的延时,会有问题。

  • 做过智能门锁,没用RTOS,功耗控制没那么复杂。复杂的可以使用RTOS。
  • 使用RT-Thread nano,额外增加一项功能:需要适配一个PM框架,然后根据平台适配。
  • 调功耗跟硬件、驱动、业务打交道,这些搞好了,再用PM框架管理,就容易了。

  • PM组件不支持配置时钟的功能,需要根据平台适配。
  • 建议先用起来,发现问题->解决问题。
  • 这种基本的睡眠、中断唤醒操作,PM框架配合平台适配,可以实现。

使用RT-Thread的功能,如IPC、signal等,需要熟悉各个模块的【宏】开关,通过menuconfig或RT-Thread Studio图形配置,使能。
你这个是signal,使能下signal的宏。
2021-04-08_075332.png

 → RT-Thread Kernel
     → Inter-Thread communication 
        [*] Enable signals

线程的优先级,不要设置为0,最高优先级,造成一直抢占。可以改低一些,如10,11

  • 出现问题可以大胆的怀疑,假定,但不能断定,否则影响自己的思路。
  • 既然可以软件调试,可以查看调用函数,数据是由那个函数调用,如何被修改的
  • 这款芯片RAM够大,建议把每个线程栈加大一点。
  • 不排除其他线程的异常操作,指针操作,修改了数据
  • MSH命令工作时可能申请内存,但不至于影响全局变量。

通过报错原因,可以在 led_thread里 发送的地方打个断点,软件调试下。这种情况,应该是【野指针】或空指针引起的。

另外:
(1)注释掉event发送,看看event是否初始化成功,event是否是全局的结构体(非指针)。
(2)rt_event_init 可以判断返回值,而不是只打印error

STM32 HAL 库的模块开一下。一般在如下的文件中,stm32xxxx_hal_config.h

stm32l4xx_hal_conf.h
stm32F1xx_hal_conf.h

如:#define HAL_DMA_MODULE_ENABLED,取消注释

建议使用:STM32CubeMX,把引脚重新配置正确,生成msp文件后,替换掉这部分。

你手动改的,初步看上去有的不正确。如使能GPIOD,你使能的是GPIOA,另外引脚变了,复用AF也变了。

https://club.rt-thread.org/ask/article/2385.html
供参考
先排除硬件的干扰
(1)根据原理图,配置好初始化的CAN引脚、时钟,不要指望CAN框架给你配好,因为CAN框架不知道你的引脚。
(2)注意波特率的设置

先确认下CAN的引脚与时钟配置。
CAN 通讯并不是个纯软件开发,需要清楚硬件接线、引脚配置、保证驱动正常的工作。

看到^M,就想到了回车换行问题。
rn 还是n,要搞清楚。

确认硬件是否正常?如引脚配置。
通过工具看数据接收与发送都正常。

发布
问题