出出啊
出出啊
It is Not the Mountain We Conquer, but Ourselves

注册于 4 months ago

回答
627
文章
13
关注者
39

编译成的rt-smart.imx下载到我1GB SD卡的1KB偏移处

文件系统被破坏了吧。分区表也在这个位置的吧

卸载重装吧,如果是单独安装的 env,重下载,解压。
studio 里自带了一个,也可以试试那个。这个不行只能卸载 studio 重新安装。

看情况,如果读写都可以是一条汇编语句完成的,完全没有影响。多条汇编完成的也分以下几种情况。
如果是一个写,一个读,读的时候是判断固定值,比如 while 等待某个变量被置1。这种情况也可以不加锁。
多个写必须加锁,这种可能出现结果并不是两种中的任何一种。
一边写,另一边读走并且可能有多种值,变量的值不定可能引起后续业务逻辑不同的,这种情况可能引起后续代码跟预期的不一样。

灰的就是没参加编译,去 dfs 目录下打开那几个 sconscript 脚本文件,看看是哪个宏定义开关让他们没有被添加

要么没初始化,要么是那个对象被破坏了。检查所有使用消息队列的地方,特别是 rt_mq_recv 调用的时候,消息队列对象有没有初始化过。

#define LED_PIN_NUM 57 这里是可以使用 GET_PIN 的。
57 是芯片的引脚号吧,如果 57 这个值是对的,程序正常运行。那么就肯定不是 PB1 ,这是 PD9 啊

环形缓冲区,一个代表写位置,一个代表读位置,做比较是因为不能读没有写的数据。
其实,这个清零操作,是环形缓冲区从尾移到头的操作。

静态初始化的线程在编译期申请的内存,不占用任何栈空间,因为它不能属于栈空间。动态初始化的线程在运行期从堆上申请内存,也不占用“父线程”的栈空间。
RT_HEAP_SIZE 指的是堆大小。不叫栈。

关中断太多。很多时间是在关中断里,导致中断不能及时响应。

哪儿来的代码?你没有改动过?目测很多错误,第一个没有定义 ret ,自己改一下就好了

workqueue.h 添加这个头文件

卸载 studio ,下载 env。
用 env 生成 mdk 项目文件。需要下载什么用 env 下载。不需要转来转去

prinf 出问题了,怎么排查?指望 prinf ?
如果仅仅用打印输出,去掉 dma 去掉中断,直接输出。
再就是单步走一下,看一下 rt_kprintf 执行的过程有没有异常

回到
顶部

发布
问题

投诉
建议