rt-thread
文章平均质量分 56
小盼你最萌哒
这个作者很懒,什么都没留下…
展开
-
RT-Thread中STM32F4代码执行时间计算
在嵌入式应用时,往往需要对代码执行时间进行计算,RT-Thread的系统时钟通常以1ms为单位,无法精确计算1ms以下的操作耗时,可以使用自带的硬件定时器进行操作。RT-Thread自带定时器外设,但操作相对较复杂,在仅用技术的情况下,可以通过操作寄存器来实现。由《STM32F4xx中文参考手册.pdf》可知,定时器1-14均挂载在APB1和APB2下,启用定时器之前需要开启对应的时钟。不同定时器的时钟频率是不一样的,结合CubeMX配置的时钟,可以获知定时器的输入时钟。假如我们使用的是定时器原创 2021-05-05 15:25:48 · 1957 阅读 · 1 评论 -
RT-Thread OTA HTTP升级日志记录
在局域网下实现2个文件下载功能:在RT-Thread Studio中配置其中一个URL:则可以通过http_ota或者http_ota http://192.168.168.108:8080/file/download/cheche2.0.1.rbl 实现升级功能。[SFUD]Find a Winbond flash chip. Size is 16777216 bytes.[SFUD]spi flash device is initialize success. __ ___原创 2021-04-05 17:31:09 · 1103 阅读 · 0 评论 -
RT-Thread OTA固件打包器 浅谈固件分区名和固件版本,并利用OTA功能向外部Flash写入factory固件
使用RT-Thread的打包器时,有固件版本和固件分区名两个参数。由于BootLoader是基于fal操作的,即将download分区中存放的rbl文件解压后拷贝到指定分区。在BootLoader中设置了应用分区为app分区,而bl通常用于更新固件,所以官方教程这里写的是app分区。假如现在我有一个字库(不依赖文件系统访问),想存放至font分区,假设这个字库还是需要加密的,那么就可以用打包器打包吧分区名改成font,将打包后的文件上传到服务器,在嵌入式应用程序里将该文件下载到download分区,重原创 2021-04-04 18:46:35 · 2594 阅读 · 0 评论 -
RT-Thread OTA升级失败The application must link to the begin of app partition!
使用官方的固件,并且按照BootLoader的分区改写了程序的偏移,下载没问题,但是重启升级会提示链接地址错误。由于STM32的内部Flash是从0x08000000开始存储的,而CM3上电后是从0x00000000开始取指的,所以当BOOT选择00方式启动后,会自动把0x08000000映射到0x00000000,即对于用户来说,这两片地址是重叠的。了解了这一点,博主在修改Flash偏移的时候就直接将BootLoader生成时写的偏移粘贴过来了,即没有加上0x08000000这个基地址,但是Boot原创 2021-04-04 18:30:03 · 305 阅读 · 0 评论 -
RT-Thread Ymodem文件传输失败Update firmware fail.
最近想研究下rt的BootLoader,就看到了ymodem的应用。组件开启得很少,就只有ota_downloader和fal抽象层,用于将文件通过串口写入W25Q的download分区。直接按照官方的wiki走,输入ymodem_ota指令后就可以通过XShell的Ymodem协议传输文件了,但是提示Update firmware fail.错误。网上有各种说比如传输时不能有日志输出,我把ymodem换到了UART3,和控制台的UART1区分开,并且把波特率也降低到了9600,数据传输成功,以下是原创 2021-04-04 14:51:19 · 2773 阅读 · 1 评论 -
RT-Thread中wchar_t的用法
因为需要创建USC2(UTF16BE) 编码的字符串,就想研究一下wchar_t这种方式。先查一下“你好”这个词的utf16编码。尝试以下4种写法,其中中间两种写法是不合法的。将产生的结果打印出来:第一种转换结果正常,可以看到字符已经被转成了utf16编码,但是中间会有两个字节的00,能去掉肯定是最好的。第二种没有加L,转化出来占用了6个字节,查询发现是其utf8编码的HEX值。注意,上述操作的时候,我的源文件是utf8编码的,这个时候我们把代码剪贴出来,修改文件为GB2312,再粘贴回原创 2020-09-22 20:07:15 · 333 阅读 · 0 评论 -
RT-Thread 使用paho-mqtt上传频率过快导致的错误
使用RT-Thread的paho-mqt组件进行数据推送,把上传频率设置成1秒1次,运行了一分多钟就出现了硬件错误,CmBackTrace定位到是strlen错误??昨天看github上的issue有人也遇到过做压力测试会死机,昨晚晚10点多挂机做了个压力测试,3个线程每隔10秒分别进行数据上报,4个mqtt线程同时上报。查看日志这里显示的并不全,本来想佐证降低频率可以避开这个问题,空了再去优化源码,但今早上来发现自己在mqtt_online_callback中写了一个malloc但忘了free的原创 2020-09-22 10:27:40 · 1124 阅读 · 3 评论 -
RT-Thread 回调函数触发流程
RT-Thread和硬件相关的外设,虽然有回调函数设置功能,但其实都是在相应的硬件中断函数中层层调用,最后运行的,如串口中断和外部中断:RT-Thread的时钟是依靠滴答定时器来完成的,所谓的软件定时器,虽然不像硬件定时器有各自的中断服务程序,但也是在抵达定时器的中断程序中遍历各个定时器是否到达时间的。所以在中断回调函数中,不要尝试进行类似于等待信号量这种保护操作。...原创 2020-09-19 10:06:24 · 1437 阅读 · 0 评论 -
RT-Thread elmfat使用f_gets函数
RT-Thread 默认是没有使能f_gets函数的,再ffconf.h中可以对其进行设置。将其中的宏定义改为#define _USE_STRFUNC 1/* This option switches string functions, f_gets(), f_putc(), f_puts() and/ f_printf().// 0: Disable string functions./ 1: Enable without LF-CRLF conversion./ 2: Enab原创 2020-09-12 11:01:09 · 751 阅读 · 1 评论 -
RT-Thread AT组件添加自定义URC功能
这里需要在RT-Thread的AT组件中,添加自定义URC命令的解析功能,比如我这里是新短信到来的通知处理,首先就需要编写一个URC的响应函数urc_cmti_func,然后根据URC指令的前缀和结束符,修改urc_table以支持该命令的解析路由即可。extern rt_mailbox_t mb_sms;static void urc_cmti_func(struct at_client *client, const char *data, rt_size_t size){ RT_ASSER原创 2020-09-07 20:29:09 · 1257 阅读 · 0 评论 -
RT-Thread Studio ENV的本地缓存导致git下载不同步问题
事情的经过是这样的,新建了一个package,第一次发布的时候pdulib.c文件用了ANSI格式存储,导致中文显示有问题。在github删除了该tag,修改为UTF-8之后重新发布,重新发布后,直接下载可以看到文件是UTF-8格式的;此时再次使用ENV工具导入该库,文件依然是ANSI格式。RT-Thread Studio官方给的回复是ENV具有本地缓存功能。删除local_pkgs对应的package.zip,重新安装就可以了。如图,再次安装就是UTF-8格式了。...原创 2020-09-07 14:26:06 · 276 阅读 · 0 评论 -
RT-Thread使用sscanf %X时,需要启用libc
目标将字符串char str[]="12345678"转成数组array,使得array[0]=0x12;array[1]=0x34;array[2]=0x56;array[3]=0x78。因为将代码下载到单片机中太费时间,就使用了RT-Thread的QEMU在线仿真进行。C:\RT-ThreadStudio\workspace\pdulib_test>C:/RT-ThreadStudio/repo/Extract/Debugger_Support_Packages/RealThread/QEMU原创 2020-09-06 15:59:46 · 2900 阅读 · 0 评论 -
RT-Thread 自定义AT指令
RT-Thread的AT组件,可以很方便的对AT指令进行解析。如EC200x模块,使用AT+CMGR=1指令,可以读取index=1的短信内容:通过AT命令可以看到接收到的数据,因为这里开启了回传模式,所以收输入的AT+CMGR=1一并显示出来了:前两行是空行,第三行是指令回复,第四行是数据内容,第五行是空行,第六行是OK。======== Welcome to using RT-Thread AT command client cli ========Cli will forward your原创 2020-08-27 15:13:06 · 1679 阅读 · 0 评论 -
RT-Thread 使用CmBacktrace解决在freemodbus调用easyflash卡死的问题
根据项目需求,改写了eMBRegHoldingCB函数,在其中调用了easyflash的ef_get_env_blob函数,程序卡死,打印信息如下:thread pri status sp stack size max used left tick error-------- --- ------- ---------- ---------- ------ ---------- ---开启了CmBacktrace组件,使用除0错误验证,组件工作正常。thread原创 2020-08-09 22:35:58 · 1765 阅读 · 0 评论 -
RT-Thread nmealib库WH-GN100模块设置仅支持北斗
RT-Thread nmealib库主页在nmea_thread_init函数的末尾,添加以下代码块,发送配置指令,仅使用北斗卫星,即可配置成仅GPS卫星工作模式。 char cmd[] = "PGKC115,1,0,0,0"; //GPS off,Glonass off,Beidou on,Galieo off int bcc_value = nmea_calc_crc(cmd, sizeof(cmd)); //计算校验和//LOG_D("b原创 2020-08-05 14:04:07 · 622 阅读 · 1 评论 -
RT-Thread OneNET通过方式3上传多组数据
RT-Thread提供的OneNET包,只能同时上传单个数据。参考官方文档,实际上协议可以将多组数据一起上传。以下只是一个实例,用于实现多组数据的推送。static rt_err_t onenet_mqtt_get_diy_data(char **out_buff, size_t *length){ rt_err_t result = RT_EOK; cJSON *root = RT_NULL; char *msg_str = RT_NULL; RT_ASSERT(原创 2020-07-14 17:01:55 · 952 阅读 · 0 评论 -
RT-Thread检测联网状态
通过ifconfig可以查看网络状态:ifconfignetwork interface device: ec200x (Default)MTU: 1500IMEI: 868626040635271FLAGS: UP LINK_UP INTERNET_UP DHCP_ENABLEip address: 10.145.106.8gw address: 0.0.0.0net mask : 0.0.0.0dns server #0: 183.230.126.225dns server #1:原创 2020-07-13 20:17:02 · 1882 阅读 · 0 评论 -
RT-Thread cJSON库的使用
RT-Thread包含cJSON包,但是并没有教程,结合网上的资料,以组成一下json字符串为例,记录一下使用笔记。{ "datastreams": [{ "id": "location", "datapoints":[{ "value":{ "lat": 0, "lon": 0 } }] }] }cJSON库所有数据都用cJSON指针来保存。cJSON对象使用大括号包着,数组使用中括号包着,字符串对象用双引号包着,数值则不用。使用cJS原创 2020-07-13 19:55:11 · 3167 阅读 · 0 评论 -
rt-thread AT设备EC20获取GNSS信息
EC20的某些版本,如EC20CEFILG-128-SGNS是具有GPS定位功能的,参照手册有对应的AT指令集可以读取,通过at_exec_cmd可以很方便的执行。#include <rtthread.h>#define DBG_TAG "main"#define DBG_LVL DBG_LOG#include <rtdbg.h>#include <at.h>static void show_information(){ at_respons原创 2020-06-16 13:12:11 · 2280 阅读 · 0 评论 -
rt-thread AT设备EC20参数配置
在使用AT软件包的时候,这里有一个电源引脚和电源状态引脚的配置。对应的代码包含电两个管脚的初始化配置和上电断电函数。static void ec20_power_on(struct at_device *device){ struct at_device_ec20 *ec20 = RT_NULL; ec20 = (struct at_device_ec20 *)device->user_data; /* not nead to set pin configurat原创 2020-06-12 18:09:44 · 3047 阅读 · 6 评论 -
RT-Thread Studio 在编译结果中显示内存占用
在项目配置中,添加下列命令:-print-memory-usage编译就有结果了~原创 2020-03-26 11:55:10 · 1626 阅读 · 0 评论 -
RT-Thread Studio RTC使用笔记
使能RTC:拷贝drv_rtc.c和drv_log.h;使能#define HAL_RTC_MODULE_ENABLED:修改main函数即可使用:#include <time.h>int main(void){ struct tm *t; t=rt_malloc(sizeof(struct tm)); time_t now=0; LOG_D...原创 2020-03-25 18:16:59 · 2316 阅读 · 1 评论 -
RT-Thread Studio 红外Infrared使用笔记
使用rt-thread的infrared组件,可以轻松上手红外遥控功能。开启NEC解码,根据硬件设计修改使用的引脚和定时器标识。先使能hwtimer驱动然后在main函数调用:#include <infrared.h>struct infrared_decoder_data infrared_data;int main(void){ ir_select_de...原创 2020-03-24 17:24:28 · 1477 阅读 · 0 评论 -
RT-Thread Studio部分定时器时钟不正确的解决方案
在昨天的RT-Thread Studio硬件定时器hwtimer在stm32f411上的使用笔记中,遇到了部分定时器速度想象中和实际不一致的情况,具体表现在定时器2、3、4、5、9、10、11都正常,但定时器1要快一倍。仔细查看代码,找到了原因。因为代码使用的是工程是直接生成的时钟代码,实际的时钟频率是这样的:而实际的定时器时钟配置代码如下: { rt_uint32...原创 2020-03-24 09:58:14 · 1155 阅读 · 0 评论 -
RT-Thread Studio硬件定时器hwtimer在stm32f411上的使用笔记
创建基于F411的芯片空工程。启用hwtimer:拷贝以下三个文件到drivers目录,路径分别为C:\RT-ThreadStudio\download\rt-thread-sdk\rt-thread-src\v4.0.2\bsp\stm32\libraries\HAL_Drivers\config\f4和 C:\RT-ThreadStudio\download\rt-thread-sd...原创 2020-03-23 16:39:33 · 2958 阅读 · 2 评论 -
RT-Thread Studio片上Flash 实现Flash抽象层FAL笔记
使用ATK-NANO STM32F411的开发板, 实现Flash抽象层FAL。先添加fal的软件包,并复制fal_cfg.h到drivers目录下:复制C:\RT-ThreadStudio\download\rt-thread-sdk\rt-thread-src\v4.0.2\bsp\stm32\libraries\HAL_Drivers\drv_flash目录下的drv_flash.h文...原创 2020-03-20 11:45:18 · 4299 阅读 · 0 评论 -
RT-Thread中的数码管显示Demo
因为数码管显示的过程中,经常会使用延时函数,在裸机中实现起来常常会长时间占用CPU。使用rt-thread的rt_thread_mdelay可以通过线程调度的方法,合理使用cpu资源。新建一个smg.c文件:/* * Copyright (c) 2006-2020, RT-Thread Development Team * * SPDX-License-Identifier: Apac...原创 2020-03-18 21:25:50 · 799 阅读 · 0 评论 -
RT-Thread Studio 外部flash挂载虚拟文件系统笔记
使用ATK-NANO STM32F411的开发板,实现外部flash挂载虚拟文件系统。参考基于 RT-Thread Studio 的 SPI 驱动开发文档,基于自己使用的芯片,创建空工程,实现hello world。rt-thread将hal库的接口驱动都放在了C:\RT-ThreadStudio\download\rt-thread-sdk\rt-thread-src\v4.0.2\bsp\...原创 2020-03-18 11:58:50 · 2805 阅读 · 1 评论 -
RT-Thread Studio 更新V1.0.3失败解决办法
错误提示:An error occurred during the org.eclipse.equinox.internal.p2.engine.phases.CheckTrust phase.session context was:(profile=profile, phase=org.eclipse.equinox.internal.p2.engine.phases.CheckTrust,...原创 2020-03-16 15:37:20 · 641 阅读 · 2 评论 -
lwip设置recv接收函数超时时间
在socket编程中,经常使用recv函数阻塞等待接收数据。如果对方GG了(接收到你的数据之后并没有返回,你这里会一直等待下去),显然我们是不希望出现这种情况的。一般情况下,考虑到对方的数据处理时间,我们可以设置一个超时时间,比如10s,10s之后如果对方还没返回消息,我们就应该做相应的处理。下方是一个demo,其中使用了ulog组件可以方便的查看日志时间,我们把超时时间设置的5s,可以看到...原创 2020-02-22 16:45:30 · 8167 阅读 · 1 评论 -
LwIP之TCP Server多client连接发送和接收Demo
msh调用时对端口进行监听,监听到有客户端连接时,创建新的线程进行连接。监听时设置最大连接数为4,使用SocketTool工具模拟client连接,实际效果如下。/* * Copyright (c) 2006-2019, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Log...原创 2020-02-22 12:29:18 · 5124 阅读 · 3 评论 -
lwip绑定端口失败
使用lwip调试tcpserver时,出现绑定端口失败,通过ifconfig发现是dhcp还未获取到ip导致的,等到ip获取成功之后就可以通过sal的bind进行绑定端口了。msh >tcpserverBind fail!close listener...msh >tcpserverBind fail!close listener...msh >ifconfign...原创 2020-02-22 12:08:01 · 1639 阅读 · 0 评论 -
void* param类型变量传值
因为在rt-thread中,线程参数传递实际上传递的是一个指针,当有多个参数需要传递的时候,就可以使用结构体对参数进行传递。/* * Copyright (c) 2006-2020, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date ...原创 2020-02-21 18:24:55 · 3053 阅读 · 0 评论 -
LwIP之TCP Server发送和接收Demo
在sal的基础上,tcp server的操作和pc端的流程基本一致,这里做一个小demo,server监听5000端口,向发起连接的client对象发送一个字符串,然后阻塞接收client发回的数据,再断开连接,等待下一个连接请求。/* * Copyright (c) 2006-2019, RT-Thread Development Team * * SPDX-License-Ident...原创 2020-02-21 10:22:55 · 4747 阅读 · 1 评论 -
LwIP之TCP Client发送和接收Demo
在sal的基础上,tcp client的操作和pc端的流程基本一致,代码和UDP相比多了个connect的步骤,sendto变成了send,recvfrom变成了recv,其他就没有什么区别了。/* * Copyright (c) 2006-2019, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 *...原创 2020-02-20 17:43:52 · 6536 阅读 · 0 评论 -
LwIP之UDP发送和接收Demo
使用RT-Thread Studio基于rt-thread4.0.2构建的工程:这里记录一下最基本的收发代码。/* * Copyright (c) 2006-2019, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Autho...原创 2020-02-20 17:20:12 · 3688 阅读 · 0 评论 -
rt-thread W5500包的rt_hw_spi_device_attach
w5500的包不带有rt_hw_spi_device_attach对spi设备进行注册,所以会提示找不到设备: \ | /- RT - Thread Operating System / | \ 4.0.2 build Jan 3 2020 2006 - 2019 Copyright by rt-thread team[I/sal.skt] Socket Abstrac...原创 2020-01-03 22:30:11 · 2649 阅读 · 3 评论 -
rt-thread 使用mqtt连接onenet对资源的占用
使用warship-V3开发板调试,开启了AT-8266和OneNET功能,运行着mqtt协议栈,编译后的ROM占用如下:16:09:39 **** Incremental Build of configuration Debug for project OneNET-MQTT ****make -j12 all Invoking: GNU ARM Cross Print Sizearm-...原创 2019-12-31 16:15:57 · 1026 阅读 · 0 评论 -
RT-Thread Studio stm32f1使能5个串口
#define BSP_USING_UART1#define BSP_USING_UART2#define BSP_USING_UART3#define BSP_USING_UART4#define BSP_USING_UART5#if defined(BSP_USING_UART1)#define UART1_TX_PORT GPIOA#define UART1_R...原创 2019-12-30 18:48:16 · 983 阅读 · 0 评论 -
RT-Thread Studio悬浮提示窗口颜色设置
在作死的修改了主题之后,出现了提示框为黑色的情况:在把主题恢复为默认颜色之后依然改不回去,修改源代码悬浮提示框之后就好了~原创 2019-12-26 15:54:42 · 926 阅读 · 0 评论