- 博客(431)
- 资源 (14)
- 收藏
- 关注
原创 海岛奇兵满分计算公式
公式用于海岛奇兵游戏积分计算,其中cur_score为当前积分,tar_score为目标积分,inc_score为每天开图积分,最终输出的day为到达目标积分的日期。#include <stdio.h>#include <stdlib.h>int main(){ int day=0; double cur_score=43044; double tar_score=43200; double inc_score=2160; while
2021-05-26 20:59:35 830 3
原创 RT-Thread中STM32F4代码执行时间计算
在嵌入式应用时,往往需要对代码执行时间进行计算,RT-Thread的系统时钟通常以1ms为单位,无法精确计算1ms以下的操作耗时,可以使用自带的硬件定时器进行操作。RT-Thread自带定时器外设,但操作相对较复杂,在仅用技术的情况下,可以通过操作寄存器来实现。由《STM32F4xx中文参考手册.pdf》可知,定时器1-14均挂载在APB1和APB2下,启用定时器之前需要开启对应的时钟。不同定时器的时钟频率是不一样的,结合CubeMX配置的时钟,可以获知定时器的输入时钟。假如我们使用的是定时器
2021-05-05 15:25:48 2010 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 1138
原创 ATK-ESP8266-V1.3记录一次固件烧录过程,结果失败。
使用的模块固件版本有点老,不支持CIPDNS_CUR指令,所以准备固件升级。新版的屏蔽罩上面有正点原子的logo,这个明显版本有点老了。背面还是标有正点原子的丝印。因为需要IO_0短接到GND,灵魂焊接飞线大师上线:上电后把USB转TTL那里的VCC拔掉再插上就能进入烧录模式了。然后失败……客服说可能是模块坏了……emm……...
2021-04-05 15:45:46 802
原创 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 2681
原创 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 323
原创 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 2841 1
原创 -bash: /usr/local/nginx/sbin/nginx: No such file or directory
走Django教程时,出现如下错误:是因为我们安装的Nginx1.5.6版本,安装路径是带了版本号的,教程的是没带的,所以会提示找不到文件。换成如下指令就好了。uwsgi --ini /etc/uwsgi9090.ini & /usr/local/nginx-1.5.6/sbin/nginx...
2021-03-04 09:59:19 7876 1
原创 EC20模块收件箱已满解决方案
EC20模块本身可以存储180条短信,当收件箱满时,一般是不会有异步通知和错误提示的。此时如果有新消息到来,依然会触发断网,但是不会有任何新的提示。可以使用AT+CPMS?查看当前收件箱情况:此时收件箱已满。可以使用CMGD指令进行短信删除操作:删除一条短信:删除后还有170条短信在收件箱:删除所有短信:删除完成后收件箱为空:此时新短信就可以看到了:收件箱有一条:...
2021-01-18 15:51:45 478 1
原创 装系统时提示:无法打开所需文件,错误代码0x8007000D解决方案
本来打算用微软官方的MediaCreationTool20H2.exe工具做一个系统U盘,奈何下载到16%的时候无法继续,只得用本地的windows10-1903版本(镜像名为cn_windows_10_consumer_editions_version_1903_updated_sept_2019_x64_dvd_ef681fec.iso)系统加软碟通做一个镜像。软碟通格式化U盘后会把5.2个G的映像文件写入U盘,但4M/s的写入速度居然5分钟就写完了(博主用的USB2.0的U盘),打开一看发现inst
2021-01-02 15:21:55 11760 1
原创 C语言字符串解析&=表达式
项目中传输变量,使用=连接属性的变量名和变量值,使用&连接各个不同的属性,使用c语言写一个解析函数:#include <stdio.h>#include <stdlib.h>int main(){ char ss[]="$cmd=setsensortime&sensor_id=value&sample_intv=value&upload_intv=value&plus_intv=value"; size_t lengt
2020-12-29 15:17:45 702 1
原创 一加8T 使用VIVO 22.5W、一加DASH 20W、小米33W充电功率情况
个人经验,大功率快充都是在电池电量低的时候才能触发的,手机电量用到了4%,依次找同学借了vivo、一加和小米的充电头进行测试。先是使用的vivo的充电器,输出支持5V2A、9V2A和10V2.25A,因为一加8T的原配充电器支持10V6.5A的WARP闪充,而且有vivo的地方就有oppo,先猜测一波触发10V的握手协议都是一样的,上电效果如下:握手成果后功率计显示20W,扣掉转换效率,实际输出功率应该是9V2A的18W输出,这个22.5W是没有触发了,而且也不显示快速充电。然后是一加的DASH闪
2020-12-16 20:16:39 6397
原创 一加8T 口红电源65W PD快充 充电功率记录
使用65W口红电源+一加原装充电线给手机充电。因为口红电源最大电流是65w时的3.25A,没有超过4A,所以就串接了一个typec的功率计。时间充电量(%)充电功率(W)剩余充电时间18:23528.05NULL18:27929.893918:352630.443118:444617.772519:138017.821419:229011.09719:31978.1522刚插上电那会儿屏幕上面
2020-12-15 19:45:34 3189
原创 一加8T 原装65W WARP闪充 充电功率记录
12月10日入手的一加8T,使用标称65W WARP闪充的原装充电器进行充电功率测试。时间充电量 (%)充电功率(W)预计剩余充电时间(分钟)11:34963.593511:351554.623311:382649.423111:424044.522711:444639.242511:465233.932311:567930.581411:598425.561212:018820.
2020-12-14 12:36:12 3020
原创 word2019的神奇操作
测试环境:R7000 win10家庭中文版,使用的是预装的正版office:新建一个word,输入2611,然后ALT+X,此时应该变成一个打钩的符号,但显示效果是这样的:因为之前使用的是office2013,所以在同学那里新建了一个word:同样输入2611,然后ALT+X,拷贝到本机打开效果和在他电脑显示效果相同,显示效果如下:这两种打钩都能使用ALT+X还原成2611,这就很神奇……初步怀疑和word的版本有关,至少和创建文件时的word版本有关。建议需要打钩的时候,还是去符号里面
2020-11-25 22:23:46 432
原创 EC20模块需要重启后才能正常使用的情况
记录一些使用EC20模块需要重启才能正常使用的情况:在意外拔出sim卡的一段时间内,ec20是可以正常上网的,大概10s钟后,模块就检查到sim卡不见了,这个时候即使插回去,使用AT查询PIN也会返回sim卡不存在的错误;当sim卡欠费之后,即使话费充值成功,也不会有+CMTI的系统短信新消息提醒,此时用其他手机给模块发短信模块也不会有+CMTI的提示;以上情况断电重启后均能正常使用。...
2020-10-25 17:53:55 2320
原创 RT-Thread中wchar_t的用法
因为需要创建USC2(UTF16BE) 编码的字符串,就想研究一下wchar_t这种方式。先查一下“你好”这个词的utf16编码。尝试以下4种写法,其中中间两种写法是不合法的。将产生的结果打印出来:第一种转换结果正常,可以看到字符已经被转成了utf16编码,但是中间会有两个字节的00,能去掉肯定是最好的。第二种没有加L,转化出来占用了6个字节,查询发现是其utf8编码的HEX值。注意,上述操作的时候,我的源文件是utf8编码的,这个时候我们把代码剪贴出来,修改文件为GB2312,再粘贴回
2020-09-22 20:07:15 354
原创 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 1140 3
原创 使用逻辑或应该注意的短路现象
短路运算符一般有:&&、||,其原理是:当有多个表达式时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值。以如下代码为例,本意是先执行di0_init和di1_init两个函数,再根据其返回值确定是否创建线程操作:static int di_init(){ if (di0_init() == RT_EOK || di1_init() == RT_EOK) //任意一个通道初始化成功则需要上传数据 { rt_thread_t tid =
2020-09-20 16:08:36 465
原创 RT-Thread 回调函数触发流程
RT-Thread和硬件相关的外设,虽然有回调函数设置功能,但其实都是在相应的硬件中断函数中层层调用,最后运行的,如串口中断和外部中断:RT-Thread的时钟是依靠滴答定时器来完成的,所谓的软件定时器,虽然不像硬件定时器有各自的中断服务程序,但也是在抵达定时器的中断程序中遍历各个定时器是否到达时间的。所以在中断回调函数中,不要尝试进行类似于等待信号量这种保护操作。...
2020-09-19 10:06:24 1460
原创 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 771 1
原创 发送英文短信中括号[]显示错误的原因
在以bit7格式发送短信的时候,按理说中括号[]对应的ascii表中的hex值分别为0x5B和0x5D,应该是能正常显示的。但在实际使用过程中,用模块给手机发送中括号,显示为其他奇怪的符号;用手机给模块发中括号,中括号就像没有输入一样直接被过滤;造成这种现象的原因是, 默认的GSM字母表和ascii表是有出入的,虽然大部分如字母数字都是一样的,但符号还是有区别的,这里一定要注意一下。...
2020-09-07 22:12:10 765 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 1297
原创 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 286
原创 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 2940
原创 EC200模块 CMTI消息解析
博文EC200模块 设置新短信通知输出通道介绍了如何设置+CMTI指令。使用sscanf和简化版的正则表达式,可以解析出存储位置(ME、SM)和所在的索引index。#include <stdio.h>#include <stdlib.h>int main(){ char ss[]="+CMTI: \"ME\",10"; char device[100]; int index=0; sscanf(ss,"+CMTI: \"%[A-Z]\"
2020-09-03 21:36:59 946
原创 EC200模块 设置新短信通知输出通道
前几天遇到了新短信没有通知的问题:EC200短信 使用AT+CNMI设置新消息通知注意事项在今天又重新读了一遍数据手册之后,发现了一个奇怪的指令:AT+QURCCFG这个命令可以设置URC输出的通道。使用QURCCFG可以查看输出通道:AT+QURCCFG=?+QURCCFG: "urcport",("usbat","usbmodem","uart1")对于EC200S模块来说,有"usbat",“usbmodem”,"uart1"三个通道,uart1就是硬件串口,usbat就是接入U
2020-09-02 21:23:19 1815 3
原创 EC200短信 使用AT+CNMI设置新消息通知注意事项
使用AT+CNMI=2,1,0,0,0指令,可以设置新短信提示,即当短信来的时候,会有如+CMTI: "ME",1的消息主动上报,其中ME代表短信存储在模块,1代表短信存储的索引。博主使用的是硬件串口进行功能调试,在最近几天中,多次用手机给模块发送短信,但都没有收到通知。初步怀疑这个通知是有的,但是通知到的终端可能不是这个串口,又去整了USB的串口驱动,注意:博主使用的是EC200S模块,是国产内核,需要安装Quectel_ASR_Series_UMTS<E_Windows_USB_
2020-09-02 16:55:59 2288 2
原创 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 1713
原创 结构体指针 比较函数
通常情况下,c语言喜欢使用指针而不是拷贝的方式进行参数传递,提高运行效率。如图可以知道,people类型的数组p,存储在地址未0x402000开始的地方,对于数组成员可以使用&p[i]的方式找到其地址,对于指针的话,其本身就是地址。那么最简单的一个对象比较函数,就是比较结构体对象的存储地址,以实现结构体对象的查找。...
2020-08-20 16:16:13 815
原创 OneNET MQTT订阅报文抓包解析(SUBSCRIBE&SUBACK)
以下是使用at组件登录OneNET后,订阅报文时,打印的RAW数据:[D/AT] sendline: 0000-0020: 82 0C 00 01 00 07 73 65 74 74 69 6E 67 01 ......setting.[D/AT] recvline: 0000-0020: 20 0D 0A
2020-08-19 21:50:58 818
原创 OneNET MQTT连接报文抓包解析(CONNECT&CONNACK)
以下是使用at组件登录OneNET平台时,打印的RAW数据:[D/AT] sendline: 0000-0020: 41 54 2B 51 49 53 45 4E 44 3D 30 2C 33 37 AT+QISEND=0,37[D/AT] recvline: 0000-0020: 0D 0A
2020-08-19 21:20:46 1249 1
原创 OneNET MQTT发布报文抓包解析(PUBLISH&PUBACK)
msh />onenet_upload_cycle[D/AT] sendline: 0000-0020: 41 54 2B 51 49 53 45 4E 44 3D 30 2C 33 30 AT+QISEND=0,30msh />[D/AT] recvline: 0000-0020: 0D 0A
2020-08-17 20:57:45 823
原创 strncpy使用中需要注意的问题
在使用c语言进行项目开发的过程中,使用strncpy对字符串进行复制操作,因为该函数可以保证拷贝过程中内存不越界,但是该函数在使用过程中需要注意,拷贝的过程中是不会拷贝最后的结束符的。如下图所示,在使用strncpy进行拷贝之前,从flash中读出来的auth_info数组是正常的。通过malloc开辟内存的onenet_info结构体内容是随机的。但是拷贝的时候,虽然拷贝了字符串长度的内容,但是并没有在后面补字符串结束符标志,导致了实际使用的auth_info从sn999变成了sn999N。
2020-08-15 18:04:51 1439
原创 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 1810
原创 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 639 1
原创 记录一个AD7606无法正确采集数据的诡异问题
做的AD7606 spi数据采集,ch4和ch8直接接了地,采集出来的数据大概在几十的样子,基本算是采集到了0V。其他通道悬空,采集出来的数据转换后是8V?(量程选择的10V),量程切换到了5V就直接返回32767了。测量REFCAP电压只有1.2V不到(正常应该4.5V);测量REFIN/REFOUT只有0.1V左右,正常该2.5V。供电是PC机和电路板之间,MicroUSB口供电,JLINK-OB插了GND、SWCLK、SWDIO三根线,USB2TTL模块插了TX和RX两根线,最后把JLINK的3
2020-07-15 11:20:43 5793 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 967
原创 OneNET上传位置数据(经纬度)
参考官方说明文档设备终端接入协议-MQTT.docx:只要按照这样写数据就行了。那么第一步,手写json数据格式字符串(这里可以使用cJSON库,参考另外一篇博客){"datastreams":[{"id":"location","datapoints":[{"value":{"lon":112.408320,"lat":34.636055}}]}]}对应的16进制(ASCII格式)可以先看一看:D/HEX $dp: 0000-000F: 01 00 7F 7B 22 6C 6F 63 61
2020-07-13 22:26:16 4242 3
原创 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 1937
h743_adc_8ch_dma_timer.ioc
2020-04-26
h743_adc_8ch_poll.ioc
2020-04-26
f411-infrared.zip
2020-03-24
stm32f411rc-fal-onchip+sfud.zip
2020-03-20
Newtonsoft.Json.dll
2019-02-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人