Justice Gao

专注无线网络领域,wifi,zigbee,ble,4G,NB-iot.....
私信 关注
Justice_Gao
码龄9年

嵌入式软件设计,蓝牙,wifi,移动模块,NB-IOT应用

  • 493,842
    被访问量
  • 123
    原创文章
  • 13,567
    作者排名
  • 2,624
    粉丝数量
  • 于 2012-07-05 加入CSDN
获得成就
  • 获得256次点赞
  • 内容获得103次评论
  • 获得591次收藏
荣誉勋章
兴趣领域
  • #硬件开发
    #单片机#arm开发
TA的专栏
  • zigbee
    14篇
  • Linux
    22篇
  • freertos
    2篇
  • MT7688
    8篇
  • STM32学习
    22篇
  • 嵌入式硬件
    1篇
  • MAX326XX系列学习
    11篇
  • ESP系列学习
    16篇
  • 开发工具及技术
    5篇
  • CC2640
    17篇
  • Holtek单片机
    1篇
  • matlab
    2篇
  • nrf52832
    6篇
  • NB-iot
    2篇
  • GD32系列
    6篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

如何利用Beyond Compare更新文件夹内容

适用场景(1)更新备份的软件工程(2)由于编译环境,拷贝多份源代码操作方法(1)打开Beyond Compare软件(2)选择文件夹比较(3)选择比较的两个文件夹(4)加载完成后,可以看文件夹下不同的文件内容变化(5)若左侧是最新的源代码,则点击更新到右侧...
原创
7阅读
0评论
0点赞
发布博客于 3 天前

Linux中常用的命令操作

查看ls 查看当前目录下的内容ll 查看当前目录下的内容详情cat xxx 查看文本内容解压缩
原创
39阅读
0评论
1点赞
发布博客于 2 月前

zigbee学习之JN5169 串口UARTs

本章描述了使用集成外设API的功能对uart (Universal Asynchronous Receiver transmitter)的控制。JN516x微控制器有两个uart,表示为UART0和UART1,它们可以独立启用。这些uart是16550兼容的,可用于串行数据的输入/输出,可编程波特率高达4Mbps。6.1 串口信号和引脚UART采用以下信号接口与外部设备连接:传输数据(TxD)输出-连接到外部设备上RxD接收数据(RxD)输入-连接到外部设备上TxD请求发送(RTS)输出-
原创
70阅读
1评论
1点赞
发布博客于 2 月前

zigbee学习之JN5169 DIO数字输入/输出

本章描述了使用集成外设API的功能对DIOs (Digital input / output)的控制。JN516x微控制器有20条DIO线,编号0到19。每个引脚可以单独配置为输入或输出。另外,DIO引脚与以下片上外设/功能复用:ADC比较器串口UART定时器I2CSPI天线多样性脉冲计数器当相应的外设/特性被启用时,复用的DIO不可用。复位后,所有的外设被禁用和DIOs被配置为输入。除了正常的操作,当配置为输入时,DIOs可以用来产生中断并从休眠中唤醒设备。请注意DIOs触发的
原创
30阅读
1评论
1点赞
发布博客于 2 月前

zigbee学习之zigbee设备对象(ZDO)

1 概述ZigBee 设备对象是一个应用程序,使用了网络和应用支持子层原语来执行 ZigBee 终端设备,ZigBee 路由器和ZigBee 协调器。ZigBee 设备对象 Profile 使用了 Clsuter 来描述其原语。ZigBee 设备 Porile Clusters 不使用属性,类似于一个信息传输协议中的信息。在ZigBee 设备 Profile 内使用Cluster 标识符来枚举 ZigBee 设备对象内使用的信息。ZigBee 设备对象还使用了配置属性。这些属性不是任何Cluster
原创
19阅读
0评论
1点赞
发布博客于 10 天前

zigbee学习之ZDP枚举描述(返回值说明)

本小节解释了ZDP 使用的枚举的含义。表2.137 展示了ZDP 枚举值的描述。
原创
32阅读
0评论
1点赞
发布博客于 2 月前

zigbee学习之设备profile服务器服务

设备Profile 服务器服务支持设备和服务发现请求,终端设备绑定请求,绑定请求,取消绑定请求和网络管理请求的程序。另外,服务器服务支持传输这些响应返回到请求设备。对于发给服务器的所有的广播地址请求(任意一种广播地址类型),如果不支持该命令,服务器应丢掉该数据包。对于任何广播寻址的客户端请求,错误状态不应单播返回给本地设备,包括但不限于服务器不支持的请求。对于发给服务器的所有的单播地址请求,如果不支持该命令,服务器应制定一个只包含响应Cluster ID 和状态域的响应数据包。响应Cluster ID
原创
27阅读
0评论
1点赞
发布博客于 2 月前

zigbee学习之设备profile客户端服务

设备 Profile 客户端服务支持从客户端到服务器传输设备和服务发现请求,终端设备绑定请求,绑定请求,取消绑定请求,以及网络管理请求。另外,客户端服务支持从服务器接收这些请求的响应。1 设备和服务发现客户端服务表2.43 列出了设备 Profile、设备和服务发现客户端服务支持的命令。这些命令将在以下分节一一讨论。2 终端设备绑定,绑定,取消绑定和绑定管理客户端服务原语表2.66 列出了设备 Profile 支持的原语:终端设备绑定,绑定和取消绑定客户端服务。这些命令将在下面的分节中一一讨论
原创
25阅读
0评论
1点赞
发布博客于 2 月前

zigbee学习之设备profile概述

1. 范围ZigBee 应用层规范描述了常用ZigBee 设备功能,比如绑定、设备发现和服务发现是如何在ZigBee设备对象内部实现的。ZigBee 设备Profile 通过定义cluster 能够像任何的ZigBee profile 一样运行。不像应用程序特定的 profile,ZigBee 设备 Profile 内的cluster 定义了所有 ZigBee 设备支持的功能。和任何profile 文件一样,本文件详细叙述了强制和/或可选的cluster。2. 设备profile概述设备Profile
原创
53阅读
0评论
1点赞
发布博客于 2 月前

zigbee学习之zigbee应用框架

1. 创建一个zigbee profile一个ZigBee 网络设备之间通信的关键是一个关于profile 的协议。一种profile 的例子是家庭自动化。这个ZigBee profile 允许一系列设备类型交换控制信息,以形成一个无线家庭自动化应用。这些设备的目的是交换已知信息来实现控制,比如开关灯,给照明控制器发送一个照明传感测量,或如果一个位置传感器探测到移动时发送一个警报信息。另一种类型profile 的例子是定义了ZigBee 设备之间普通行为的设备profile。为了说明这一点,无线网络依
原创
53阅读
2评论
1点赞
发布博客于 2 月前

zigbee学习之APS管理服务

APS 管理实体S A P(APSME-SAP)支持上层和APSME 之间管理命令的传输。APSME-SAP原语访问综述:APSME-BINDAPSME -UNBINDAPSME-GETAPSME-SETAPSME-ADD-GROUPAPSME-REMOVE- GROUPAPSME-REMOVE- ALL-GROUPS1. 绑定原语这组原语定义了设备的上层如何往其本地绑定表中增加(提交)一个绑定记录,或从其本地绑定表中移除一个绑定记录。只有支持绑定表或绑定表缓存的一个设备,可以处理
原创
27阅读
0评论
1点赞
发布博客于 2 月前

zigbee学习之APS数据服务

APS子层提供了两种服务,通过两种服务访问点( SAPs)访问。 它们是APS数据服务,通过APS子层数据实体SAP ( APSDE-SAP) 访问, 以及APS管理服务, 通过APS子层管理实体SAP ( APSME-SAP)访问。这两种服务通过NLDE-SAP 和(在有限的范围内) NLME-SAP接口 ,提供了NHLE和NWK层之间的接口。 NWK层和 APS子层之间的 NLME-SAP接口只支持 NLME-GET和NLME-SET原语:所有其它NLME-SAP原语只能通过ZDO访问 。 除了这些外部
原创
48阅读
0评论
1点赞
发布博客于 2 月前

zigbee学习之JN5169 ADC外设

本章描述了使用集成外设API的功能对模拟外设的控制。4.1 ADCJN516x微控制器包括一个10位模拟数字转换器(ADC)。ADC对模拟输入信号进行采样,以产生输入电压的数字表示。它在某一时刻对输入电压进行采样,并保持该电压(在电容器中),同时将其转换为10位二进制值-总采样/转换持续时间称为转换时间。ADC可以周期性地采样,以产生一系列数字值来表示输入电压随时间的变化。抽样事件发生的速率称为抽样频率。根据奈奎斯特采样定理,采样频率必须至少是输入信号中待测最高频率的两倍。如果输入信号包含超过采样频率
原创
62阅读
1评论
1点赞
发布博客于 2 月前

zigbee学习之JN5169系统控制器

本章主要介绍系统控制器特性以及各功能函数的使用方法。时钟管理电源管理电源电压监测芯片复位中断3.1 时钟管理系统控制器为JN516x微控制器提供时钟,主要分四个模块:系统时钟域、外设时钟域、CPU时钟域和32kHz时钟域。系统时钟域系统时钟是一个高速参考时钟,当芯片完全运行时,外围时钟和CPU时钟由它派生。此域的时钟来自以下之一:外部32 mhz晶体振荡器内部高速RC振荡器该晶体振荡器由连接到设备引脚4和5的32MHz外部晶体驱动。该域将产生一个32兆赫兹系统时钟时,来自晶体
原创
41阅读
0评论
1点赞
发布博客于 3 月前

secureCRT保存带时间戳log方法

(1)选择会话选项(2)选择“日志文件”,修改红框中的两个设置,点击确定(3)关闭重启,选择保存日志文件路径和名称,默认名称session.log(4)完成,所有log都会自动保存
原创
100阅读
0评论
1点赞
发布博客于 3 月前

zigbee学习之JN5169通用函数

通用函数general functions主要包括:(1)API初始化;(2)无线电传输功率的配置;(3)使用随机数生成器;(4)访问内存非易失性内存;(5)保留休眠状态下的调试信息1、API初始化在调用来自JN516x集成外设API的任何其他函数之前,必须调用函数**u32AHI_Init()**来初始化API。这个函数必须在JN516x微控制器的每次复位和唤醒(退出休眠模式)之后调用。注意:如果您使用JenOS (Jennic操作系统),则不能在代码中显式地调用u32AHI_Init(
原创
58阅读
1评论
1点赞
发布博客于 3 月前

ZigBee学习之NXP JN5169开发环境搭建

nxp官网下载资源:https://www.nxp.com.cn/pages/jn516x-7x-zigbee-3-0:ZIGBEE-3-01、下载JN-SW-4141这是一个基于eclipse的IDE开发环境,名称为BeyondStudio for NXP。1.1 安装BeyondStudio for NXP单击 I Agree,一路Next,出现下面界面,可在此更改安装路径,然后Install,最后等待安装完成,点击Finish。2、下载JN-SW-4170,SDK包该安装路径默认与Be
原创
80阅读
0评论
1点赞
发布博客于 3 月前

linux应用程序判断网络是否连通

int Net_is_Ok(char *ip){ int i, status; pid_t pid; printf(">>>>>>>>>>>>> ping_status
"); // 不同则循环检测多次 for (i = 0; i < 3; ++i) { // 新建一个进程来执行ping命令 if ((pid = vfork()) <
原创
78阅读
0评论
1点赞
发布博客于 3 月前

freertos学习之临界区处理

简介每个进程中访问临界资源的那段代码称为临界区(Critical Section) (临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。多个进程中涉及到同一个临界资源的临界区称为相关临界区。注:多线程并发访问全局变量也是临界区问题程序调度法则进程进入临界区的调度原则是:如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。任何时候,处于临界区内的进程不可多于一个。
原创
171阅读
1评论
1点赞
发布博客于 4 月前

freertos学习之任务调度切换

FreeRTOS 的任务具有如下几种状态:运行Running就绪Ready阻塞Blocked挂起Suspended除了运行状态之外的状态统称为非运行状态。因为 FreeRTOS 是为单CPU设计的系统,在任何时刻最多只能允许一个任务处在运行状态,哪怕看起来好像有多个任务同时在运行——这只是多个任务不停地切换带来的效果。当一个任务从运行状态切换到非运行状态时,执行时的现场——CPU寄存器被保存在任务的私有堆栈中;在重新回到运行状态时,再从堆栈中恢复之间保存的寄存器
原创
60阅读
0评论
0点赞
发布博客于 4 月前

Websocket基础知识篇

WebSocket介绍websocket是HTML5的一种新协议,允许服务器向客户端传递信息,实现浏览器和客户端双工通信。先简单介绍下WebSocket。 我们都知道Http是处于应用层的一个通信协议,但是只支持单向主动通信,做不到服务器主动向客户端推送消息。而且Http是无状态的,即每次通信都没有关联性,导致跟服务器关系不紧密。为了解决和服务器长时间通信的痛点呢,HTML5规范引出了WebSocket协议(知道这名字咋来的吧,人家HTML5规范引出的,随爸姓),是一种建立在TCP协议基础上的全双工通信
原创
33阅读
0评论
1点赞
发布博客于 4 月前

Ubuntu输入正确密码后无法登陆桌面仍然跳转输入登陆界面的解决方法

由于安装软件改错了环境变量,导致桌面循环登录,而且ctrl+Alt+F1进入控制台后输入任何命令都无效解决办法:一. 控制台输入命令:echo $PATH查看path是否含有:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin二. 如果没有,先用临时环境变量(重启后消失)控制台输入:export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr
原创
52阅读
1评论
1点赞
发布博客于 4 月前

进程间的五种通信方式

进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。以Linux中的C语言编程为例。一、管道管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。1、特点:(1)它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。(2)它只能用于具有亲缘关系的进
原创
61阅读
0评论
1点赞
发布博客于 4 月前

网络编程socket

socket端口号范围1~65535。其中0不使用,1-1023为系统端口,也叫BSD保留端口。0-1023: BSD保留端口,也叫系统端口,这些端口只有系统特许的进程才能使用;1024~65535为用户端口,又分为:BSD临时端口(1024-5000)和BSD服务器(非特权)端口(5001-65535)。其中:1024-5000: BSD临时端口,一般的应用程序使用1024到4999来进行通讯;5001-65535:BSD服务器(非特权)端口,用来给用户自定义端口。Socket根据数据传输
原创
58阅读
0评论
1点赞
发布博客于 4 月前

cjson安装及libcjson.so: cannot open shared object file: No such file or directory解决方法

一、JSON简介JSON是一种轻量级的数据交换格式,可读性强、编写简单。键值对组合编写规则,键名使用双引号包裹,冒号:分隔符后面紧跟着数值,有两种常用的数据类型是对象和数组。对象:使用花括号{}包裹起来的内容,数据结构{“key1”: “value1”, “key2”:“value2” …},key为对象的属性,value为对象的值。数值:使用中括号[]包裹起来的内容,数据结构{“key”: [“value1”, “value2”, “value3” …]}。1. {"name": "JSON"}
原创
238阅读
0评论
1点赞
发布博客于 5 月前

linux使用popen、system函数执行shell命令无反应的解决方法

1.开发环境硬件:MT7688系统:openwrt(linux)2、解决方法将popen("ls","w");改为popen("ls > /dev/console","w");重点是/dev/console
原创
155阅读
0评论
1点赞
发布博客于 5 月前

Ubuntu无法切换中文输入法的解决方法

1.安装搜狗输入法百度搜索:搜狗输入法linux,根据自己的系统位数和系统版本进行安装2.设置(1)选择系统设置(2)选择语言支持(3)选择键盘输入法系统为:fcitx3.重启系统
原创
841阅读
0评论
2点赞
发布博客于 5 月前

嵌入式操作系统笔试题汇总

操作系统各大公司笔试题汇总.doc操作系统各大公司笔试题汇总.doc操作系统各大公司笔试题汇总.doc操作系统各大公司笔试题汇总.doc操作系统各大公司笔试题汇总.doc操作系统各大公司笔试题汇总.doc
pdf
发布资源于 7 月前

关于嵌入式开发工程师的那些事(持续更新)

蓝牙最小广播间隔 20ms蓝牙最大广播间隔 10.24s蓝牙最小连接间隔蓝牙最大连接间隔 40ms蓝牙最小扫描间隔 2.5ms蓝牙最大扫描间隔 10.24s蓝牙最小扫描窗口 2.5ms蓝牙最大扫描窗口 10.24s
原创
438阅读
0评论
1点赞
发布博客于 7 月前

Linux串口应用编程

1.串口相关操作在Linux下,除了网络设备,其余的都是文件的形式,串口设备也一样在/dev下。打开串口:示例:fd = open("/dev/ttyUSB0",O_RDWR|O_NOCTTY|O_NDELAY);在打开串口时,除了需要用到 O_RDWR (可读写)选项标志外,O_NOCTTY:告诉 Linux “本程序不作为串口的‘控制终端’”。如果不使用该选项,会有一些输入字符影响进程运行(如一些产生中断信号的键盘输入字符等)。O_NDELAY:标志则是告诉Linux,这个程序并不关心DCD
原创
110阅读
0评论
0点赞
发布博客于 8 月前

MT7688如何更新menuconfig中的内容(openwrt)

许多开发者在开发MT7688的时候,使用make menuconfig后发现没有自己需要的lib库或者模块,那么可能是你的feeds太旧了,需要更新更新方法:./scripts/feeds update -a然后./scripts/feeds install -a如果你更新之后还是没有,需要修改某个文件该文件在openwrt文件夹下,即feeds.conf.default比如默认为src-git packages https://github.com/openwrt/packages.g
原创
137阅读
0评论
0点赞
发布博客于 8 月前

SIM7600 USB驱动 linux

开发环境 操作系统:OpenWrt(linux) 客户机:MT7688 拨号方式:NDIS------>wwan0
rar
发布资源于 8 月前

基于压缩感知的无线传感器网络定位算法.rar

包含贝叶斯和正交矩阵压缩感知算法 网络环境: (1)信标节点定位置坐标已知; (2)所有节点的通信半径可调节; (3)节点能量充分;
rar
发布资源于 8 月前

如何查看Ubuntu系统当前版本

一、系统位数在控制台输入:sudo uname --m如果显示i686,则表示安装了32位操作系统如果显示 x86_64,则表示安装了64位操作系统sudo uname --s 显示内核名字sudo uname --r 显示内核版本sudo uname --n 显示网络主机名sudo uname --p 显示cpu二、查看操作系统的版本号cat /etc/issue比如输出:Ubuntu 14.04.4 LTS
\llsb_release -a三、查看系统类型,其中lsb表示
原创
121阅读
0评论
0点赞
发布博客于 8 月前

如何手动升级更新ubuntu系统到最新版

首先安装更新(1)打开终端:Alt+Ctrl+T(2)更新资源sudo apt-get update(3)对软件升级sudo apt-get upgrade(4)接着安装系统更新,如果不希望升级系统版本,完成这步就可以了。sudo apt-get dist-upgrade 升级系统版本(1)安装上面的更新后重新启动一次系统sudo reboot (2)检测是否有ubuntu新版本sudo apt-get update sudo update-manager -
原创
2090阅读
0评论
3点赞
发布博客于 9 月前

Ubuntu/linux调用md5加密数据/文件

安装库sudo apt-get install opensslsudo apt-get install libssl-dev编写程序//gcc -g str_md5_demo.c -o str_md5_demo -lcrypto//#include <string.h>#include <stdio.h>#include <openssl/md5.h> int main(int argc, char* argv[]){ MD5_CTX ct
原创
181阅读
0评论
0点赞
发布博客于 9 月前

openwrt遇到clock_gettime问题解决

开发环境(1)Ubuntu12.04(2)openwrt 最新master解决方法找到/build_dir/host/bison-3.5.1/lib文件夹下的config.h和config.in.h注释掉/* Define to 1 if you have the `clock_gettime’ function. *///#undef HAVE_CLOCK_GETTIME/* Define to 1 if you have the `clock_settime’ function. */
原创
139阅读
0评论
0点赞
发布博客于 11 月前

Ubuntu12.04升级make的方法

官网下载makehttps://ftp.gnu.org/gnu/make/make-4.2.tar.gz解压tar -zxvf make4.2.tar.gz安装cd make4.2./configuresudo makesudo make install删除已安装的make:sudo apt-get remove make替换make文件:sudo cp make /usr/bin/make验证make -v...
原创
109阅读
0评论
0点赞
发布博客于 1 年前

Ubuntu12.04升级gcc的方法

1、添加软件源sudo add-apt-repository ppa:ubuntu-toolchain-r/testsudo apt-get update2、安装gcc高版本(以gcc4.8为例)sudo apt-get upgradesudo apt-get install gcc-4.8 g++-4.83、完成之后,可以查看一下此时的版本号。gcc -v如果版本未更改,那么需要更新下连接。gcc4.8更新链接update-alternatives --install /usr/
原创
150阅读
0评论
0点赞
发布博客于 1 年前

openwrt编译出现libaprutil-1.so: undefined reference to `iconv‘

一、硬件平台1.1 控制器:MT7688二、软件平台2.1、开发环境:Ubuntu12.04 2.2、软件版本:openwrt-hiwooya-stable三、问题描述openwrt下载的lib库里面是apr、aprutil和iconv,而没有apriconv,在编译的时候会出现报错liba...
原创
144阅读
0评论
0点赞
发布博客于 1 年前

bayes定位算法.rar

BCS 理论是由 Shihao Ji 等提出的,BCS 理论解决问题的基本思想是为 CS的恢复问题建立了一个贝叶斯框架,将贝叶斯思想融入到 CS理论中,通过统计学解决问题的新视角来重新对待传统 CS理论的信号重构问题
rar
发布资源于 1 年前

Openwrt如何添加SD_Card?看这里

一、硬件平台1.1 控制器:MT7688二、软件平台2.1、开发环境:Ubuntu12.04 2.2、软件版本:openwrt-hiwooya-stable三、功能说明本文章所选择的目标芯片为MT7688,profile 选择的为“LINKIT7688.dts”。对于openwrt增加对于s...
原创
868阅读
0评论
2点赞
发布博客于 1 年前

Ubuntu安装OSS C SDK出现make install错误的解决方法

环境:Ubuntu安装准备:安装CMake和第三方库OSS C SDK安装时,需要安装编译工具CMake和第三方库curl、apr、apr-util、minixml。安装环境时所需参数如下:名称 描述 版本要求CMake 编译安装工具。 2.6.0及以上版本curl 主要解决网络方面的问题。 7.32.0 及以上版本apr-util 解决内存管理以及跨平台问题。 1.5.2 及以上...
原创
139阅读
0评论
0点赞
发布博客于 1 年前

OpenWrt操作系统移植SIM7600CE驱动及调试

1、开发环境操作系统:OpenWrt客户机:MT7688拨号方式:NDIS------>wwan02、配置文件及参数(1)USB Serial 的内核配置支持在 linux 内核配置中,请确保CONFIG_USB_SERIAL=yCONFIG_USB_SERIAL_WWAN=yCONFIG_USB_SERIAL_OPTION=yCONFIG_USBNET=y(2) 修改...
原创
1345阅读
0评论
0点赞
发布博客于 1 年前

CC2640编译stack成功编译app失败的问题解决方法

问题现象如下Error while running "C:\ti\xdctools_3_32_00_06_core/xs" --xdcpath="C:\ti\tirtos_cc13xx_cc26xx_2_18_00_03\products\tidrivers_cc13xx_cc26xx_2_16_01_13\packages;C:\ti\tirtos_cc13xx_cc26xx_2_18_...
原创
313阅读
0评论
1点赞
发布博客于 1 年前

Linux移植E20模块驱动步骤解析

以openwrt-hiwooya-stable 源码为例, 对应的内核为 linux-3.18.45。 当然, 如果您是其他版本的 Linux 系统, 也可参考本章内容进行修改, 大同小异。(1)添加VIDD和PIDFile: [KERNEL]/drivers/usb/serial/option.cstatic const struct usb_device_id option_ids[]...
原创
422阅读
0评论
0点赞
发布博客于 1 年前

ubuntu如何安装openjdk8

执行更新$ sudo apt-get update安装sudo ap[t-get install openjdk-8-jdk配置openJDK环境变量sudo vi /etc/environment加入下面值JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"JRE_HOME=${JAVA_HOME}/jreCLASSPATH=.:JA...
原创
142阅读
0评论
0点赞
发布博客于 1 年前

MT7688开发之EC20模块移植编译错误问题解决

开发环境:openwrt-hiwooya-stablegithub源码地址:https://github.com/hi-wooya/openwrt-hiwooya-stable问题现象:Package quectel_cm is missing dependencies for the following libraries:libc.so.6make[3]: *** [/work/op...
原创
558阅读
0评论
0点赞
发布博客于 1 年前

nrf52832进入DFU升级之前卡死问题

nrf52832 SDK版本:nRF5_SDK_13.0.0_04a0bfd找到进入DFU BootLoader的函数,如下static void on_hvc(ble_dfu_t * p_dfu, ble_evt_t * p_ble_evt){ ble_gatts_evt_hvc_t * p_hvc = &p_ble_evt->evt.gatts_evt.params...
原创
648阅读
0评论
1点赞
发布博客于 1 年前

如何解决CC2640用IAR下载固件出现Fatal error: Failed to load the CPU core driver Session aborted的问题

问题描述:用IAR下载固件时弹出Debug Log窗口显示内容解决方法:在IAR安装目录下C:\IAR_Systems\Embedded_Workbench_7.5\arm\drivers\ti-xds点击安装ti_emupack_setup.exe,重新用IAR下载就可以成功了...
原创
1107阅读
5评论
2点赞
发布博客于 1 年前

CC2640蓝牙丢包问题(notify发送返回0x16:blePending)

发送间隔:24ms发送包长度:20字节从机 Notification发送方式有两种,用户根据自身要求选择:(1)调用GATT_Notification( uint16 connHandle, attHandleValueNoti_t *pNoti, uint8 authenticated );直接发送(2)调用GATTServApp_ProcessCharCfg函数,这个函数内部最终会导致...
原创
6029阅读
0评论
2点赞
发布博客于 2 年前

esp-idf版本更新及切换方法

ESP-IDF 版本简介ESP-IDF 的 GitHub 仓库时常更新,特别是用于开发新特性的 master 分支。如有量产需求,请使用稳定版本。发布版本您可以通过以下链接访问各个版本的配套文档:最新稳定版 ESP-IDF:https://docs.espressif.com/projects/esp-idf/zh_CN/stable/最新版 ESP...
原创
2407阅读
0评论
3点赞
发布博客于 2 年前

ESP32之软件SPI驱动及SPI、HSPI和VSPI的理解

ESP32 共有 4 个 SPI 控制器,用于连接支持 SPI 协议的设备。 SPI0 控制器作为 cache 访问外部存储单元接口使用, SPI1 作为主机使用, SPI2 和 SPI3 控制器既可作为主机使用又可作为从机使用。作主机使用时,每个 SPI 控制器可以使用多个片选信号 (CS0~CS2) 来连接多个 SPI 从机设备。 SPI1 ~ SPI3 控制器共享两个 DMA 通道。...
原创
9424阅读
3评论
7点赞
发布博客于 2 年前

编译CC2650出错问题一之解决方法

编译出现一下内容:Building configuration: cc2650em_app - FlashROM Updating build tree... Performing Pre-Build Action Error while running "C:\ti\xdctools_3_32_00_06_core/xs" --xdcpath="C:\ti\tirtos_cc13xx_c...
原创
453阅读
0评论
1点赞
发布博客于 2 年前

GPIO口模拟SPI四种模式

void delay(){ unsigned char m,n; for(n=0;n<5;n++); for(m=0;m<100;m++);}/************************************************ 端口方向配置 与输出初始化***********************************...
原创
2404阅读
0评论
3点赞
发布博客于 2 年前

nrf52832之RTC的使用

nrf52832有三个RTC,即RTC0、RTC1和RTC2。其中RTC0用于蓝牙,也就是说,如果使用到蓝牙功能,则RTC0被占用,用户无法使用,否则会报错RTC1用于FreeRTOS,而RTC2是用户最常用到的,RTC2的配置公式RTC的功能极低,只有0.1uA...
原创
3501阅读
0评论
2点赞
发布博客于 2 年前

ESP32之官方文档--------严重错误fatal error

严重错误概述在某些情况下,程序的执行,没有按照定义的方式持续执行.在 ESP-IDF 中,这些情况包括:CPU 异常:Illegal Instruction, Load/Store Alignment Error, Load/Store Prohibited error, Double Exception.(非法指令,加载/存储对齐错误,加载/存储禁止错误,双重异常)系统级别检查和安全...
原创
1773阅读
0评论
3点赞
发布博客于 2 年前

ESP32之蓝牙配网blufi

概览BluFi 是一款基于蓝牙通道的 Wi-Fi 网络配置功能,适用于 ESP32。它通过安全协议将 Wi-Fi 配置和证书传输到 ESP32,然后 ESP32 可基于这些信息连接到 AP 或建立 SoftAP。BluFi 流程的关键部分包括数据的分片、加密、校验和验证。用户可按需自定义用于对称加密、非对称加密和校验的算法。这里我们采用 DH 算法进行密钥协商、128-AES 算法用于...
转载
6496阅读
0评论
1点赞
发布博客于 2 年前

ESP32之进入低功耗模式保持GPIO的状态

进入低功耗前gpio_hold_en(GPIO_NUM);gpio_deep_sleep_hold_en();进入低功耗模式esp_deep_sleep_start();唤醒gpio_hold_dis(GPIO_NUM);gpio_deep_sleep_hold_dis();必须这么操作,该操作一般是gpio初始化中,否则唤醒后GPIO还是上一次的状态...
原创
1704阅读
0评论
1点赞
发布博客于 2 年前

ESP32之esp-idf版本的切换与更新方法

很多新手开发者从github上clone了最新的esp-idf固件包,但是可能不是想使用最新的esp-idf版本,而是想要某个指定的版本。下面,我介绍一下。(1)下载esp-idf固件包如果是第一次下载,可以选择全部的release版本,建议不要单独下载zip压缩包,用git命令直接获取git clone --recursive https://github.com/espres...
原创
3765阅读
0评论
2点赞
发布博客于 2 年前

ESP32之code dump的backtrace分析crash问题

文件:projectname.elf:工程编译后再build文件夹下可以找到pyton准备工作:(1)menuconfig设置串口打印crash信息(2)利用命令xtensa-esp32-elf-addr2line -pfiaC -e build/PROJECT.elf ADDRESS追踪问题结果如下:...
原创
1280阅读
0评论
1点赞
发布博客于 2 年前

ESP32之core dump分析crash问题

文件:projectname.elf:工程编译后再build文件夹下可以找到core_dump.txt:这个需要新建,从串口打印消息中将内容复制过来pyton准备工作:(1)menuconfig设置串口打印crash信息(2)将crash信息复制到core_dump.txt,(CORE DUMP START 以下的内容)(3)使用python编译,命令pytho...
原创
641阅读
0评论
0点赞
发布博客于 2 年前

"The string '__checksum' was not found in the string table"解决办法

错误现象ielftool error: The string '__checksum' was not found in the string tableError while running ielftool "--fill" "0xFF;0x9004-0x12fff" "--checksum" "__checksum:2,crc16,0x0;0x9004-0x12fff" "--ver...
原创
701阅读
0评论
0点赞
发布博客于 2 年前

CC2640之协处理器Sensor Controller Studio中的COMPB

COMPB简称低功耗时钟比较器Low-power clocked comparatorThe COMPB peripheral is low-power clocked comparator that is updated at 32 kHz. COMPB can be used to continuously monitor slow signals and wake up the Sens...
原创
558阅读
0评论
0点赞
发布博客于 2 年前

CC2640之合并bim+app+stack出现的Data overlapped at address 0x1FB00问题

如果开发者需要使用到CC2640的OAD功能,则会遇到合并固件的过程,OAD的升级操作过程可以参考一下文章CC2640之OAD固件升级及合并方法在合并bim+app+stack过程中可能会出现一下问题 错误提示为Data overlapped at address 0x1FB00则可以修改一下配置文件,如图左图为修改前的值,右图为修改后的值修改成功后,重新编译一...
原创
291阅读
0评论
2点赞
发布博客于 2 年前

CC2640之OAD固件升级及合并方法

文章转自https://blog.csdn.net/zzfenglin/article/details/52336612#comments经过原文作者同意后转载什么是OADOAD是TI在BLE协议栈基础上扩展的一种无线更新技术。OAD使用客户端-服务器的机制工作。需要固件更新的目标芯片叫做OAD Target/Client,用来管理OAD功能的一端叫做OAD Manager/Ser...
转载
768阅读
0评论
3点赞
发布博客于 2 年前

CC2640之固件烧录(包括BootLoader、app和OAD升级固件)

这一篇文章的目的就是让使用CC2640的朋友们熟悉一下CC2640的BootLoader、app和OAD固件的物理地址分配情况,不同于其他的单片机升级过程是在BootLoader中,CC2640的升级过程单独分配了一块空间,分配空间如下图所示 烧录的时候可以使用Flash Programmer,如图第一次烧录需要这样,如果你后面需要烧录你修改的app程序,可以直接通过I...
原创
2140阅读
0评论
0点赞
发布博客于 2 年前

CC2640之RTOS配置

原创
423阅读
0评论
0点赞
发布博客于 2 年前

CC2640之应用程序app和协议栈程序stack合并烧录方法

CC2640之应用程序app和协议栈程序stack合并烧录方法如下
原创
718阅读
0评论
1点赞
发布博客于 2 年前

CC2640之概述

原创
128阅读
0评论
0点赞
发布博客于 2 年前

介绍CC2640芯片组成架构及是如何工作达到低功耗的

文章转载自http://www.tuner168.com/html/xinwenzhongxin/xingyedongtai/20171031/764.html 蓝牙无线技术是全球使用范围最广泛的短距离无线标准之一,作为一种小范围无线连接技术,能够在设备间实现方便快捷、灵活安全、低成本、低功耗的数据和语音通信。  CC2640 是TI公司的一款无线微控制器 (MCU),主要适用...
转载
1029阅读
2评论
2点赞
发布博客于 2 年前

ESP32遇到“Skipped 1 tasks with bad TCB”和“Crashed task has been skipped!”的解决方法

如果遇到ESP32打印出来的信息如下[17:22:05.454] abort() was called at PC 0x40082a1f on core 0Backtrace: 0x40090de8:0x3ffbe1f0 0x4009107d:0x3ffbe210 0x40082a1f:0x3ffbe230 0x40082b29:0x3ffbe260 0x400e7f46:0x3ffbe...
原创
565阅读
3评论
2点赞
发布博客于 2 年前

ESP32中 SO_REUSEADDR 设置(socket返回118错误解决方法)

1、一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。    SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。TCP,先调用close()的一方会进入TIME_WAIT状态2、SO_R...
原创
613阅读
0评论
1点赞
发布博客于 3 年前

【GD32F350开发分享六】USART0和USART1的双串口应用

如图所示,GD32F350有两个串口,分别是USART0和USART1,分别是哪几个脚复用成串口,具体可以看手册。我的GPIO复用配置如下 串口初始化函数为void gd_eval_com_init(uint32_t com) {     uint32_t COM_ID;          if(EVAL_COM1 == com){         COM_...
原创
1854阅读
0评论
1点赞
发布博客于 3 年前

【GD32F350开发分享五】GPIO模拟SPI控制液晶显示屏

大家都应该知道,用GPIO模拟SPI的话,涉及GPIO的输出高低电平、读取电平,先来看GPIO的寄存器(1)GPIOx_CTL寄存器控制GPIO的模式(Pin0~Pin15)00:输入模式(复位值) 01:GPIO输出模式 10:备用功能模式 11:模拟模式(2)GPIOx_OMODE寄存器控制GPIO的输出模式(Pin0~Pin15)该位由软件置位和清除。 0:输出推挽模式(复位...
原创
876阅读
0评论
1点赞
发布博客于 3 年前

【GD32F350开发分享四】定时器T0中断:外部高速时钟源8MHz

开发板上的8Mhz晶振X3和匹配电容没有焊接,我自己焊接了外部晶振,然后设置外部晶振作为系统时钟源 配置T0中断定时100ms,  T0定时中断函数如下,  结果如下, ...
原创
822阅读
3评论
0点赞
发布博客于 3 年前

【GD32F350开发分享三】定时器T0中断:内部高速时钟源

GD32F350定时器有TIMER0~TIMER5,绝对够用,我是用的是TIMER0,向上计数模式 在这种模式,计数器的计数方向是向上计数。计数器从0开始向上连续计数到自动加载值(定 义在TIMERx_CAR寄存器中),一旦计数器计数到自动加载值,会重新从0开始向上计数。如果 设置了重复计数器,在(TIMERx_CREP+1)次上溢后产生更新事件,否则在每次上溢时都会...
原创
1539阅读
0评论
0点赞
发布博客于 3 年前

【GD32F350开发分享二】GD32F350时钟配置,非常重要

大家应该都知道,微控制器最重要的就是时钟频率,时钟频率会影响指令周期、定时器、RTC等等所有涉及时钟的总线。GD32F350开发板的外部高速时钟8MHZ晶振和外部低速时钟32.768KHZ晶振没有焊接,大家有需要自行焊接。我用的是内部时钟8MHZ,当然,如果需要用时钟频率进行定时器中断设置的,建议使用外部晶振,因为外部晶振精度高,偏移量小,但是缺点在于功耗就大了,内部时钟功耗低,但是精度会差一...
原创
2891阅读
0评论
0点赞
发布博客于 3 年前

【GD32F350开发分享一】GPIO之点亮LED灯

Colibri-F350RB开发板做工还是挺精美的,今天分享一下GD32F350的GPIO的输出控制,以GPIO为例,电量LED灯。   如图所示,三个LED灯分别接PB8、PB9和PB10;     配置成输出的原理如图       实现的代码程序如下:   /************...
原创
1033阅读
0评论
0点赞
发布博客于 3 年前

中国电信物联网开发平台API参考(NB-iot)

本文档系统化描述 IoT Platform(下文简称平台)对外开放的能力全集、集成原理和集 成参考样例等信息,帮助集成开发者快速而准确的掌握集成方法从而高效实现特定的 业务需求。本文档主要包含如下几个部分: 一接口列表 主要描述能力开放的接口集合,详细介绍每个接口的功能、输入参数、输出参数、和 消息样例等信息。 二常用数据结构定义 是对多个接口都会用到的数据结构做一个详细介绍,方便开发者集中查看。
rar
发布资源于 3 年前

电信NB-iot平台对接资料

电信NB-IOT0501对接电信平台的资料,对接成功后,可以直接通过AT命令使用COAP协议进行数据传输
rar
发布资源于 3 年前

(原创)nrf52832低功耗模式SYSTEM OFF注意事项及配置方式

System OFF是最低功耗模式,在该模式下,系统的内核和所有在运行的任务都会停止,也就是说时钟也停止,相当于关机状态。可以直接控制POWER相关的寄存器使系统进入System OFF模式,也可以通过API函数,大家可以参考nrf_pwr_mgt例子中的方式。系统进入System OFF后,可以通过以下方式进行唤醒:1、GPIO信号2、LPCOMP模块3、NFC信号4、复...
原创
18549阅读
2评论
3点赞
发布博客于 3 年前

nrf52832 DFU详细步骤 SDK13

1. 以下是我测试的环境,大家的环境和我的有不同也不需要太担心,随机应变。环境:win7,64位,IAR集成开发环境Sdk:nRF5_SDK_13.0.0_04a0bfd协议栈:s132_nrf52_4.0.2_softdevice.hexBootloader工程:secure_dfu_ble_s132_pca10040application工程:ble_app_buttonless_dfu_p...
原创
10424阅读
4评论
3点赞
发布博客于 3 年前

STM32F103出现CPU could not be halted问题的解决方案

问题描述:**JLink Warning: CPU could not be halted***JLink Error: Can not read register 15 (R15) while CPU is running***JLink Error: Can not read register 16 (XPSR) while CPU is running***JLink Error: Can ...
原创
6412阅读
0评论
1点赞
发布博客于 3 年前

NB05-01设备接入运行商IOT平台服务器流程

(1)注册设备(2)NB模块开机开启错误提示AT+CMEE=1 设置对接IP AT+NCDP=180.101.147.115,5684(加密)设置频段AT+NBAND=5入网 AT+CGATT=1查询IP AT+CGPADDR查询设备状态AT+NMSTATUS?上报信息 AT+NMGS=2,0001然后发送数据即可...
原创
2502阅读
0评论
1点赞
发布博客于 3 年前

搭建NB-IoT中国电信物联网开放平台实验环境

1. 获取实验环境账号微信关注公众号”天翼物联产业联盟”step1:点击联盟服务选择平台对接认证step2:完成申请表格填写并提交step3:等待申请审核,账号申请通过后,会收到账号和初始密码,用于登录SP Portal和开发者Portal。2. 创建应用2.1 创建APP应用登录中国电信物联网开放平台对接测试环境 SP Portalhttps://180.101.147.135:8...
转载
16431阅读
8评论
6点赞
发布博客于 3 年前

ESP32系列:三线SPI硬件设计及程序驱动设计(SPI FLASH为例)

(1)三线SPI硬件设计首先,ESP32是支持三线制和四线制的,三线制为半双工通信,四线制为全双工通信。如果你们用的芯片不支持三线制,就不要再折腾了,支不支持三线制,看芯片的datasheet。如图,所谓三线制就是CS、SCK和MOSI。其中MOSI为双向通信,先发送数据,则接收数据。这里的10K电阻必须接,如果不接,EPS32的MOSI引脚怎么接收SPI FLASH返回来的数据呢??那为什么ES...
原创
6254阅读
0评论
3点赞
发布博客于 3 年前

sizeof求结构体大小问题

举个很简单的例子:typedef struct{    uint32_t magic;    uint64_t create_time;    uint8_t sample_rate;    uint8_t mark;    uint16_t head_type;    uint32_t reserved1;    uint64_t reserved2;} raw_ecg_object_heade...
原创
1108阅读
0评论
0点赞
发布博客于 3 年前

nrf52832学习系列一:saadc两种配置使用方法(DMA:PPI+TIMER;非DMA:TIMER+单通道单次转换)

nrf52832的saadc基本功能:1、支持差分输入方式,测量结果为两输入端口电压差的转换的有符号数值,这个功能对于啥桥式传感器的数据采集真是太爽了,可以省一个电平平移放大电路2、原始分辨率最高提升到12位,14位那个过采样方式实现的,使用限制很多,不能扫描,还不如自己软件解决要多少位有多少位。3、新增“通道”概念,每个通道可以选定使用的+-信号源,转换是以通道为个体进行的,如果...
原创
19551阅读
1评论
4点赞
发布博客于 3 年前

nrf52832系列--------saadc单次转换

52832的ADC和之前51822系列还是有蛮大差别的:1、支持差分输入方式,测量结果为两输入端口电压差的转换的有符号数值,这个功能对于啥桥式传感器的数据采集真是太爽了,可以省一个电平平移放大电路2、原始分辨率最高提升到12位,14位那个过采样方式实现的,使用限制很多,不能扫描,还不如自己软件解决要多少位有多少位。3、新增“通道”概念,每个通道可以选定使用的+-信号源,转换是以通道为个体进行的,如...
原创
71阅读
0评论
0点赞
发布博客于 8 月前

ESP32学习之开发环境搭建(包含eclipse)

一、所需工具由于项目要用ESP32模块进行开发,折腾了下集成开发环境,现将过程记录下来,以便需要的人使用。其中需要的有交叉编译工具,esp-idf示例代码以及C/C++版的eclipse。交叉编译工具MSYS32:https://dl.espressif.com/dl/esp32_win32_msys2_environment_and_toolchain-20180110.zip示例代码esp-i...
转载
9160阅读
13评论
5点赞
发布博客于 3 年前

ESP系列:教你如何擦出ESP8266、ESP32的flash全部内容

Esp8266擦除整个flash,使其为空方法第一步、安装Python环境下载地址https://www.python.org/downloads/在下载完成之后,一直点击下一步就OK了。在安装完成之后,打开控制台,输入“Python”,我们能够看到下面的效果:原因很简单,是因为python.exe文件在 Python 目录下,我们还没有设置环境变量。所以我们需要手动添加环境变量:鼠标右键我的电脑...
原创
13845阅读
3评论
4点赞
发布博客于 3 年前

MAX32630/MAX32625学习:MAX32630本身存在问题:AD通道切换引起的干扰

MAX32630的10位AD有多个通道,每个通道共用一个寄存器,如图 我在调试的时候使用1个通道AIN0的时候,用示波器查看波形并没有问题,但是在使用AIN0和AIN1时就出现问题,代码程序如下:void TMR0_IRQHandler(void){        static uint8_t ADC_GET_Time=0;                        ADC_GET_Time+...
原创
352阅读
1评论
0点赞
发布博客于 3 年前

原创:STM32 SPI主从通信中断方式和非中断方式(包含Hal、库函数及寄存器版本)

今天给大家分享一篇精文章,关于STM32的SPI主从通信,网上的最多分享的大多都是WQ25L128、SD、单个字节的SPI传输以及单个字节接收发送中断的例子,这里,我给大家分享多个字节自定义协议的SPI通信,考虑到有些同学喜欢用STM32cube建立工程,一般称Hal类工程,也有同学喜欢用库函数或者寄存器版本的工程,后两者比较常见,网上都有STM32F103和STM32F407、STM32F429...
原创
15256阅读
0评论
4点赞
发布博客于 3 年前

MAX32630/MAX32625学习:类似STM32F4的模拟I2C协议驱动(KEIL平台开发)

MAX32630自带I2C协议,可直接调用相应的库函数,我们知道,STM32F4的库函数典型的I2C协议用SCK和SDA的输出高低电平建立握手机制。今天,我们将这种方式应用于MAX32630(1)以MAX30100血氧传感器为例其实将STM32F4的模拟I2C协议移植过来非常简单,主要是管脚输出输入的配置,代码如下:/*---------------------------------------...
原创
415阅读
0评论
0点赞
发布博客于 3 年前

MAX32630/MAX32625学习:定时器的使用(Keil版本)

(1)定时器资源介绍 MAX32630系列的微控制器单元的定时器资源非常丰富,其定时器可以作为GPIO口的PWM输出,GPIO对应的定时器,如下图 定时器的使用可以输出不同占空比的PWM,也可以作为定时轮询中断触发事件,下面介绍一下定时器的定时中断使用(2)定时器的初始化,以定时器TM0为例uint8_t TIM0_Int_Init(uint32_t time_ms){              ...
原创
708阅读
0评论
0点赞
发布博客于 3 年前

MAX32630/MAX32625学习:UART串口初始化、发送函数,接收中断及实验(绝对实用)

/*******************************************************************内容:串口配置,给出中断式串口通信,详细的寄存器作用解析作者:Justice_Gao日期:2017年7月29日问题描述:参考源代码中串口通信程序初始化设置以及通信的方式,比较难理解,和STM32F4的串口通信不同,特别是接收这里我提供一个中断式的串口接收处理函数以...
原创
1227阅读
0评论
0点赞
发布博客于 3 年前

MAX32630/MAX32625学习:AD测量范围的设置,四种(及注意事项)

/*******************************************************************内容:ADC配置,AIN0~AIN3作者:Justice_Gao日期:2017年7月15日问题说明:源代码程序的ADC采样使用的参考电压为内部参考电压1.2V,可测量的电压值范围为0~0.6V(参考电压/2),这里我将提供ADC初始化设置,提供多种可测...
原创
235阅读
0评论
0点赞
发布博客于 3 年前

KEIL MDK5.23安装包及破解工具

keil MDK5.23安装包及破解工具,可用于开发STM32、maxim等常用嵌入式软件
txt
发布资源于 3 年前

CC2640协处理器SensorController移植sc_uart串口程序到simple_peripheral工程,实现串口与手机的通信

协处理器串口程序移植过程(1)通过sensorcontroller软件配置好串口初始化程序(2)将生成的IAR project代码复制到simple_peripheral工程相应文件夹下(1)      将.c和.h文件添加当工程中的GY_SerialPort/UART中,并添加编译路径(2)      改写sc_uart.c文件,这个文件由main_tirtos.c根据开发者自身需求改写而成,这...
原创
1590阅读
1评论
1点赞
发布博客于 3 年前