自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ShineRoyal

No end on study.

  • 博客(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 803 3

原创 RT-Thread中STM32F4代码执行时间计算

在嵌入式应用时,往往需要对代码执行时间进行计算,RT-Thread的系统时钟通常以1ms为单位,无法精确计算1ms以下的操作耗时,可以使用自带的硬件定时器进行操作。RT-Thread自带定时器外设,但操作相对较复杂,在仅用技术的情况下,可以通过操作寄存器来实现。由《STM32F4xx中文参考手册.pdf》可知,定时器1-14均挂载在APB1和APB2下,启用定时器之前需要开启对应的时钟。不同定时器的时钟频率是不一样的,结合CubeMX配置的时钟,可以获知定时器的输入时钟。假如我们使用的是定时器

2021-05-05 15:25:48 1955 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 1101

原创 ATK-ESP8266-V1.3记录一次固件烧录过程,结果失败。

使用的模块固件版本有点老,不支持CIPDNS_CUR指令,所以准备固件升级。新版的屏蔽罩上面有正点原子的logo,这个明显版本有点老了。背面还是标有正点原子的丝印。因为需要IO_0短接到GND,灵魂焊接飞线大师上线:上电后把USB转TTL那里的VCC拔掉再插上就能进入烧录模式了。然后失败……客服说可能是模块坏了……emm……...

2021-04-05 15:45:46 771

原创 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 2592

原创 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

原创 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 2768 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 7810 1

原创 EC20模块收件箱已满解决方案

EC20模块本身可以存储180条短信,当收件箱满时,一般是不会有异步通知和错误提示的。此时如果有新消息到来,依然会触发断网,但是不会有任何新的提示。可以使用AT+CPMS?查看当前收件箱情况:此时收件箱已满。可以使用CMGD指令进行短信删除操作:删除一条短信:删除后还有170条短信在收件箱:删除所有短信:删除完成后收件箱为空:此时新短信就可以看到了:收件箱有一条:...

2021-01-18 15:51:45 457 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 11393 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 690 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 6315

原创 一加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 3157

原创 一加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 2986

原创 word2019的神奇操作

测试环境:R7000 win10家庭中文版,使用的是预装的正版office:新建一个word,输入2611,然后ALT+X,此时应该变成一个打钩的符号,但显示效果是这样的:因为之前使用的是office2013,所以在同学那里新建了一个word:同样输入2611,然后ALT+X,拷贝到本机打开效果和在他电脑显示效果相同,显示效果如下:这两种打钩都能使用ALT+X还原成2611,这就很神奇……初步怀疑和word的版本有关,至少和创建文件时的word版本有关。建议需要打钩的时候,还是去符号里面

2020-11-25 22:23:46 414

原创 EC20模块需要重启后才能正常使用的情况

记录一些使用EC20模块需要重启才能正常使用的情况:在意外拔出sim卡的一段时间内,ec20是可以正常上网的,大概10s钟后,模块就检查到sim卡不见了,这个时候即使插回去,使用AT查询PIN也会返回sim卡不存在的错误;当sim卡欠费之后,即使话费充值成功,也不会有+CMTI的系统短信新消息提醒,此时用其他手机给模块发短信模块也不会有+CMTI的提示;以上情况断电重启后均能正常使用。...

2020-10-25 17:53:55 2270

原创 RT-Thread中wchar_t的用法

因为需要创建USC2(UTF16BE) 编码的字符串,就想研究一下wchar_t这种方式。先查一下“你好”这个词的utf16编码。尝试以下4种写法,其中中间两种写法是不合法的。将产生的结果打印出来:第一种转换结果正常,可以看到字符已经被转成了utf16编码,但是中间会有两个字节的00,能去掉肯定是最好的。第二种没有加L,转化出来占用了6个字节,查询发现是其utf8编码的HEX值。注意,上述操作的时候,我的源文件是utf8编码的,这个时候我们把代码剪贴出来,修改文件为GB2312,再粘贴回

2020-09-22 20:07:15 332

原创 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

原创 使用逻辑或应该注意的短路现象

短路运算符一般有:&&、||,其原理是:当有多个表达式时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值。以如下代码为例,本意是先执行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 450

原创 RT-Thread 回调函数触发流程

RT-Thread和硬件相关的外设,虽然有回调函数设置功能,但其实都是在相应的硬件中断函数中层层调用,最后运行的,如串口中断和外部中断:RT-Thread的时钟是依靠滴答定时器来完成的,所谓的软件定时器,虽然不像硬件定时器有各自的中断服务程序,但也是在抵达定时器的中断程序中遍历各个定时器是否到达时间的。所以在中断回调函数中,不要尝试进行类似于等待信号量这种保护操作。...

2020-09-19 10:06:24 1435

原创 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 750 1

原创 发送英文短信中括号[]显示错误的原因

在以bit7格式发送短信的时候,按理说中括号[]对应的ascii表中的hex值分别为0x5B和0x5D,应该是能正常显示的。但在实际使用过程中,用模块给手机发送中括号,显示为其他奇怪的符号;用手机给模块发中括号,中括号就像没有输入一样直接被过滤;造成这种现象的原因是, 默认的GSM字母表和ascii表是有出入的,虽然大部分如字母数字都是一样的,但符号还是有区别的,这里一定要注意一下。...

2020-09-07 22:12:10 735 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

原创 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

原创 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 2897

原创 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 922

原创 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 1735 3

原创 EC200短信 使用AT+CNMI设置新消息通知注意事项

使用AT+CNMI=2,1,0,0,0指令,可以设置新短信提示,即当短信来的时候,会有如+CMTI: "ME",1的消息主动上报,其中ME代表短信存储在模块,1代表短信存储的索引。博主使用的是硬件串口进行功能调试,在最近几天中,多次用手机给模块发送短信,但都没有收到通知。初步怀疑这个通知是有的,但是通知到的终端可能不是这个串口,又去整了USB的串口驱动,注意:博主使用的是EC200S模块,是国产内核,需要安装Quectel_ASR_Series_UMTS&LTE_Windows_USB_

2020-09-02 16:55:59 2205 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 1676

原创 结构体指针 比较函数

通常情况下,c语言喜欢使用指针而不是拷贝的方式进行参数传递,提高运行效率。如图可以知道,people类型的数组p,存储在地址未0x402000开始的地方,对于数组成员可以使用&p[i]的方式找到其地址,对于指针的话,其本身就是地址。那么最简单的一个对象比较函数,就是比较结构体对象的存储地址,以实现结构体对象的查找。...

2020-08-20 16:16:13 792

原创 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 802

原创 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 1215 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 806

原创 strncpy使用中需要注意的问题

在使用c语言进行项目开发的过程中,使用strncpy对字符串进行复制操作,因为该函数可以保证拷贝过程中内存不越界,但是该函数在使用过程中需要注意,拷贝的过程中是不会拷贝最后的结束符的。如下图所示,在使用strncpy进行拷贝之前,从flash中读出来的auth_info数组是正常的。通过malloc开辟内存的onenet_info结构体内容是随机的。但是拷贝的时候,虽然拷贝了字符串长度的内容,但是并没有在后面补字符串结束符标志,导致了实际使用的auth_info从sn999变成了sn999N。

2020-08-15 18:04:51 1401

原创 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 1762

原创 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 621 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 5673 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 949

原创 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 4169 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 1881

h743_adc_8ch_dma_timer.ioc

STM32H实现8通道ADC采集(DMA+定时器触发)的CubeMX工程,使用PWM触发,HAL_ADC_Start_DMA启动。

2020-04-26

h743_adc_8ch_dma.ioc

STM32H实现8通道ADC采集(DMA+轮询)的CubeMX工程,使用HAL_ADC_Start_DMA进行AD数据获取

2020-04-26

h743_adc_8ch_poll.ioc

STM32H实现8通道ADC采集(连续转换序列+轮询)的CubeMX工程,使用HAL_ADC_PollForConversion进行AD数据获取

2020-04-26

f411-infrared.zip

基于stm32f411单片机,硬件HS0038H红外接收头,使用infrared组件(hwtimer和pin组件)实现红外接收头的NEC数据解析

2020-03-24

f411-timer.zip

基于stm32f411单片机,rt-thread下使用hwtimer的程序,实现定时器1、2、3、4、5、9、10、11的定时 操作。

2020-03-23

stm32f411rc-fal-onchip+sfud.zip

rtt studio工程,基于stm32f411单片机,通过fal驱动配置实现片上flash的读写访问和片外spi norflash的访问。

2020-03-20

stm32f411rc-fal.zip

rtt studio工程,基于stm32f411单片机,通过fal驱动配置实现片上flash的读写访问。

2020-03-20

f411-nano-sufd.zip

rtt studio工程,基于stm32f411单片机,通过sfud驱动配置的虚拟文件挂载Demo工程。

2020-03-20

2019.9.16 HAL库tim8可以输出指定脉冲.zip

根据CubeMX生成的TIM工程,参考原子的F1标准库代码,编写的程序。

2019-09-16

三线PT100仿真电路

Multisim仿真文件;使用TL431作为恒流源,采集三线PT100热电阻阻值,使用运放消除导线电阻。

2019-03-16

Newtonsoft.Json.dll

c#中Newtonsoft.Json.dll的文件,官方下载地址http://json.codeplex.com/ 比较慢,自己下载下来再传上来的。

2019-02-18

c#tcpClient发送和接收

最简单的tcpClient建立通信、发送数据、接收数据函数,编写TCP通信的第一步。

2019-02-13

使用朴素贝叶斯过滤垃圾邮件样本

机器学习实战中,使用朴素贝叶斯过滤垃圾邮件Demo的样本数据。

2018-10-07

光盘QT5开发及实例(第2版)

购买QT5开发及实例(第2版)对应的光盘文件资料,程序与书本配套使用

2018-10-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除