cxhxy12345
cxhxy12345
This guy hasn't written anything yet

注册于 11 months ago

回答
337
文章
0
关注者
3

检查下调试配置里这个地方的配置是否正确, 然后尝试指定高版本jlink软件
image.png

建议你有ADC+DMA+中断方式来实现数据采集,这样你可以在达到一定采样数据量后去获取采样数值再来处理

是指SysTick_Handler中断吗?这个在初始化时调用SystemClock_Config()函数对系统时钟进行配置

你这些问题最根本的是对信号和指针的理解还有问题,其实很简单,中断只是简单的将接受数据放入FIFO中,这个FIFO具体大小自己决定。

RTT在中断接受一个字节后会将信号计数值++,串口接受线程在有信号后就会调用,调用时将获取FIFO的读指针去读取数据。

用户将缓冲的数据读出后可以放入到自己的处理缓冲中等待处理,如果通讯协议时固定字节,也可以通过FIFO的读写指针差判断是不是有完整命令接受,如果有则读取,没有则等待。

而每个串口对象在初始化时需要分配一个缓冲区作为FIFO,pcong.busfz只是你需要的缓冲区最大值定义。

这里调用rt_timer_control的设置函数是希望对timer2重新进行参数设置?
keil的优化等级说明如下:
0 近乎不优化,用于调试代码。出现代码行不能设置断点可如此设置试试。

1 部分优化。移除未调用的内联函数和静态函数,关闭debug窗口优化,此状态也能用于调试

2 默认优化等级。如果处于debug状态,部分代码行将不能被调试,具体做了什么优化好像没说

3 等级3
-O0
最少的优化,可以最大程度上配合产生代码调试信息,可以在任何代码行打断点,特别是死代码处。
-O1
有限的优化,去除无用的inline和无用的static函数、死代码消除等,在影响到调试信息的地方均不进行优化。在适当的代码体积和充分的调试之间平衡,代码编写阶段最常用的优化等级。
-O2
高度优化,调试信息不友好,有可能会修改代码和函数调用执行流程,自动对函数进行内联等。
-O3
最大程度优化,产生极少量的调试信息。会进行更多代码优化,例如循环展开,更激进的函数内联等。
另外,可以通过单独设置 --loop_optimization_level=option 来控制循环展开的优化等级。

因为你这里rt_timer_control函数的设置与初始化的内容是重复的,估计这里给cut 了
你可以在 delay_Temp变量前加 volatile可以禁止优化

网络发送,MQTT是基于TCP的协议协议栈,它的发送是基于窗口,如果你的发送数据是2M,而你的tcp发送缓冲区是1024K则需要发送20次,因此如果你的发送是固定数据2M字节,可以考虑用rt_malloc和rt_free来动态分配内存和释放内存。这样在你数据传送到tcp缓冲后就可以释放内存了。

RT-Thread 的定时器提供两类定时器机制:第一类是单次触发定时器,这类定时器在启动后只会触发一次定时器事件,然后定时器自动停止。第二类是周期触发定时器,这类定时器会周期性的触发定时器事件,直到用户手动的停止,否则将永远持续执行下去。
另外,根据超时函数执行时所处的上下文环境,RT-Thread 的定时器可以分为 HARD_TIMER 模式与SOFT_TIMER 模式

HARD_TIMER 模式
HARD_TIMER 模式的定时器超时函数在中断上下文环境中执行,可以在初始化 / 创建定时器时使用参数 RT_TIMER_FLAG_HARD_TIMER 来指定。

在中断上下文环境中执行时,对于超时函数的要求与中断服务例程的要求相同:执行时间应该尽量短,执行时不应导致当前上下文挂起、等待。例如在中断上下文中执行的超时函数它不应该试图去申请动态内存、释放动态内存等。

RT-Thread 定时器默认的方式是 HARD_TIMER 模式,即定时器超时后,超时函数是在系统时钟中断的上下文环境中运行的。在中断上下文中的执行方式决定了定时器的超时函数不应该调用任何会让当前上下文挂起的系统函数;也不能够执行非常长的时间,否则会导致其他中断的响应时间加长或抢占了其他线程执行的时间。

SOFT_TIMER 模式
SOFT_TIMER 模式可配置,通过宏定义 RT_USING_TIMER_SOFT 来决定是否启用该模式。该模式被启用后,系统会在初始化时创建一个 timer 线程,然后 SOFT_TIMER 模式的定时器超时函数在都会在 timer 线程的上下文环境中执行。可以在初始化 / 创建定时器时使用参数 RT_TIMER_FLAG_SOFT_TIMER 来指定设置 SOFT_TIMER 模式。

要使用这个功能,需要开启 FINSH_USING_SYMTAB和FINSH_USING_DESCRIPTION二个功能,在头文件定义中找到

define RT_USING_FINSH

/ Using symbol table /

define FINSH_USING_SYMTAB

define FINSH_USING_DESCRIPTION

在startup.c 中添加启动函数

ifdef RT_USING_FINSH

Finsh_system_init(); 
Finsh_set_device(RT_CONSOLE_DEVICE_NAME);

endif

Finsh_set_device函数是将finsh指向设备名

你这个无法替你分析,到底是硬件问题还是配置问题、软件问题,很难分析。
https://www.cnblogs.com/silencehuan/p/10950973.html
可以看下这个,上面有详细的SPI驱动写法,也许对你有帮助

你这个因该是版本不对造成的,估计你安装的是64位的版本,而你的电脑是32位的。

LittleFs和FatFs挂载在不同的设备上当然可以,但你必须面对的是二个不同文件系统之间的数据转换和目录查询,文件读写上系统部分开销是双倍的代价,而且针对文件系统的文件对象还有数据、格式转换的问题。
所以你的这个问题比较冷门,因为绝大多数的设备只会用一种文件系统来应对不同的文件处理。
如果自己对文件系统不是很深入地了解,建议你不要这样做,因为会碰到许多你无法咨询的问题,而且很浪费时间。
我猜想你主要是25Q128的存储不够才考虑用LittlesFS,如果换W25X64 有8M空间,因该就没有问题了,这样整个系统只要运行一个FatFs就可以了,而且W25X64与25Q128是pin对pin的,只要换芯片就可以了~~。

不管是那种RTOS,都会面临硬件和软件移植修改,只是有些是你熟悉的,有些你不熟。如果啥都加二个文件,宏定义下就可以,这个是在别人已经移植好的底层的基础上做修改,不是你的移植。如果真的移植,都绕不开那些移植步骤,不管是uscos,freertos还是RTT。

这个好像是要收费的,不过有钱可以去沟通下~

回到
顶部

发布
问题

投诉
建议