GitHub 上一个高 star 的嵌入式 C 编码规范
在逛 GitHub 时,发现一篇嵌入式 C 编码规范,写的比较详细。在学习的同时,给翻译了下加深学习。
本文翻译自:Recommended C style and coding rules
中文英文推荐的 C 风格和编码规则本文描述了 Tilen MAJERLE 在他的项目和库中使用的 C 代码风格。
最重要的一条规则让我们从 GNOME developer 站点的引用开始。
编写代码时最重要的一条规则是:检查周围的代码并尝试模仿它。
作为一个维护者,如果收到一个明显与周围代码风格不同的补丁,这是是令人沮丧的。这是不尊重人的,就像有人穿着泥泞的鞋子走进一间一尘不染的房子一样。
因此,无论本文档推荐什么,如果已经编写了代码,并且你正在修补它,请保持它当前的样式一致,即使它不是你最喜欢的样式。
一般规则这里列出了最明显和最重要的一般规则。在你继续阅读其他章节之前,请仔细检查它们。
使用 C99 标准
不使用制表符,使用空格代替
每个缩进级别使用 4 空格
在关键字和左括号之间使用 1 空格
1234567891011/* OK */if (condition) while (con ...
在 keil 中使用 Astyle 格式化代码
Astyle 是什么 Astyle 的全称是 Artistic Style,它是一个开源的源代码格式化工具,可以对 C,C++,C# 以及 Java 等编程语言的源代码进行缩进、格式化、美化。Home Page: https://astyle.sourceforge.net/Project Page: https://sourceforge.net/projects/astyle/
如何在 Keil 中使用 Astyle 神器在 Keil μVision 中集成 Astyle(以下 Keil μVison5 为例),可以将凌乱的代码变得整齐起来,方便阅读。
Keil 中配置 Astyle
下载 Astyle,解压到任意位置(Astyle 为绿色软件,无需安装)
keil µVision5 中单击 Tools 菜单 —Customize Tools Menu
添加 Astyle All Files 和 Astyle Current File 菜单 (自定义菜单名,可以随便起名) 这里添加了两个菜单,分别是格式化当前文件和格式化 project 中的所有文件 Command 命令:在刚才解压的位置选择 Astyle.exe。
Arguments: ...
Windows 任务计划程序如何定时执行 Python 程序
引言在 Windows 电脑上如果要实现定时执行 Python 程序,可以借助 Windows 任务计划程序。它是 Windows 操作系统自带的一个功能,可以让您在指定的时间或事件触发时自动执行某些操作。例如,您可以使用任务计划程序来定时执行 Python 脚本,或者在系统启动时自动打开某个程序。任务计划程序可以让您更加方便地管理您的计算机,并且可以帮助您提高工作效率。
使用 Windows 任务计划程序首先在 Windows 任务栏搜索任务计划程序,并打开。
添加一个新的定时计划任务
输入任务名称及描述名称必填,描述可以选择是否填写。这里名称填写阿里云盘签到。
设置任务触发周期可以选择每天、每周、每月等。
点击下一步,具体设置触发时间,如下图设置,从 2023.4.2 号开始,晚上 8 点执行,也就是每天晚上 8 点开始执行这个任务计划。
设置任务要执行的动作选择启动程序。点击下一步,启动程序需要填写以下参数:
程序或者脚本 (必填):指的是任务需要执行的程序或者脚本。
添加参数 (可选):指的是上面的程序或者脚本要添加的参数。
起始于 (可选): 指的是上面的程序或者脚本工作 ...
香橙派迁移系统到新的 SD 卡
前言刚开始用香橙派的时候,用的是一个 16G 的 SD 卡,但随着系统上装的软件越来越多,16G 的空间明显不够用了,于是我打算扩容一下,将 16G 的 SD 卡更换为 64G。但如果换一张大的 SD 卡,重新装系统,装软件、配置环境这些就比较麻烦了,因此考虑将系统迁移,以下方法适用于香橙派以及树莓派。
迁移系统
准备一张新的 SD 卡,一个 USB 读卡器。
空间大于 64G 的 SD 卡一般默认是 exFAT 格式,而香橙派不识别 exFAT 格式,处理方法将 SD 卡格式化为 FAT32 格式。
Windows 系统格式化大于 32G 的 U 盘或者内存卡,只能选择 NTFS、exFAT,无法直接格式化为 FAT32 格式。这里使用 DiskGenius 来格式化 64G 的 SD 卡,具体方法今天先不介绍。
启动香橙派,利用读卡器把新 SD 卡插入树莓派 USB 口。
在命令行输入 df -h,查看 SD 卡是否识别。
1234567891011121314root@orangepi5:~# df -hFilesystem Size Used Avail Use% Mounte ...
教你 1 秒使用 ChatGPT 中文版无需账号
ChatGPT 是由 OpenAI 开发的一款基于自然语言处理技术的聊天机器人。它通过自动分析用户发言,从语义上理解用户想表达的意思,并自动生成回复。ChatGPT 不仅可以进行对话,还可以解答所提的问题、编写邮件、视频脚本、文案、翻译,甚至还能编写程序。可以说它是无所不能!ChatGPT 可以通过丰富多样的语句元素进行快速构建出多样化的问答模型,并实现自我学习,累积知识,越用越聪明。
ChatGPT 最近霸屏了,但想要用上 ChatGPT,很多人卡在注册账号这一步。
其实,不注册也是可以体验 ChatGPT 的强大功能的。
今天给大家推荐几个 ChatGPT 国内中文版,可快速体验 ChatGPT,值得称赞的是它们不需要注册、不需要登录,打开即用。亲测可用,文末可直接获取链接。
https://xc.com/
https://chat.forchhuoange.cn/
https://aicodehelper.com/chat
http://chat.h2ai.cn/home
最新可用国内版网站,持续更新中……
飞书机器人搭建教程
前言飞书允许用户在群组中创建自定义机器人,值得称赞的是,飞书个人账号即可创建机器人,而不像其它的还需要注册一个企业,进行认证等一系列复杂操作后才可以使用机器人。在飞书创建机器人后,在其它渠道可通过 Webhook 的方式将消息发送到该群组中。
Webhook 即网络钩子,也称为用户自定义 HTTP 回调函数(user-defined HTTP callbacks),通常用于监听某些行为事件,当事件触发时会向用户指定的目标地址发送信息。飞书的机器人本质上也就是提供了一个监听 --> 通知的行为逻辑,让用户能够将消息转发到飞书上。
创建飞书机器人安装飞书首先去官网下载飞书,进行安装。安装完毕,
创建群聊飞书机器人是在群聊中使用的,因此需要先创建一个群组。
在飞书界面进行点击加号 - 创建群组。填写群组的相关信息,完成群组创建爱你。
添加自定义机器人在群组界面的设置中点击群机器人然后再点击添加机器人按钮进入到添加界面,选择第一位的「自定义机器人」。
然后填写机器人名称及描述相关信息,即可完成添加。
飞书机器人使用在飞书群组中创建完自定义机器人时,会获得一个 webhook 地址,类似 htt ...
阿里云盘二月签到自动打卡脚本
更新记录
2023.02.23
新增多账号登录,在环境变量 ali_refresh_token 中可添加多个,用逗号,分开。
2023.02.21
新增签到提醒,目前支持 PushPlus 和 server 酱(PushPlus 是我常用的推送渠道)。
本地运行,请自行在代码中修改 PUSH_PLUS_TOKEN 以及 PUSH_KEY。
青龙运行在配置中请至少配置一个。
12PUSH_PLUS_TOKEN = '' # push+ 微信推送的用户令牌 PUSH_KEY = '' # server 酱的 PUSH_KEY,兼容旧版与 Turbo 版
2023.02.19
阿里云二月签到初版
引言
阿里云盘 2 月有个打卡活动,今天分享一个自动打卡 python 脚本,可以本地、青龙、云函数等自动执行。
准备工作自动打卡脚本需要使用阿里云盘的 refresh_token,然后模拟人工进行签到。
首先打开并登录阿里云盘的网页端,打开浏览器” 开发者工具”–” 应用”,按照下图找到 refresh_token,并复制。
运行脚本本地运行下 ...
ESP32 系列教程之空中升级 OTA
准备工作
配置好开发环境,本文是基于 VSCODE + PlatformIO
一个可用于联网的 WiFi
编译一个.bin 固件升级程序,并上传得到一个 http 网址。
首先编写一个程序,每隔 1s 打印 hello world!,并生成.bin 升级固件。关于如何编译生成.bin 升级固件,详见附录。
123456789101112131415#include <Arduino.h>void setup (){ //put your setup code here, to run once: Serial.begin (115200);} void loop (){ //put your main code here, to run repeatedly: Serial.println ("hello world!"); delay (1000);}
空中升级 OTA 代码说明程序流程讲解:开机–> 等待联网–> 成功联网–> 升级。
引入头文件
12#include <WiFi.h&g ...
ESP32 系列教程之 SmartConfig 智能配网
SmartConfig 介绍随着越来越多智能家居设备进入家庭,这些产品大部分都是要连接家庭的 WiFi 网络的。而 WiFi 网络的接入需要知道无线路由器的名称(SSID)和密码,绝大多数的智能家居是没有输入接口的,在设备中预先设置 WiFi 的名称和密码显然是不现实的,这样对于智能家居要连接的无线路由器输入无线路由器的名字和密码就成了一个困难。为了克服这个问题,人们使用了多种配网方法,比如智能家居热点配网,手机热点配网,蓝牙辅助配网等等,这些配网方式都存在一定的不方便之处,而 smartConfig 配网方式是这些无线配网方式里面比较方便和快捷的配网方式之一。ESP8266、ESP32 使用了 ESP-Touch 协议,它适用于 TI 开发的 SmartConfig 技术。SmartConfig 又名快连,用于将基于 Wi-Fi 的新型物联网设备连接到 Wi-Fi 网络。当前设备在没有和其他设备建立任何实际性通信链接的状态下,一键配置该设备接入 WIFI。smartconfig 的配网基本原理是通过手机直接发送报文到待配网设备。手机发送 UDP 广播报文,待配网设备扫描所有的可用无线信道,找到发送 smartConfig 的报文,并锁定 ...
C 语言柔性数组
结构中最后一个元素允许是未知大小的数组,这个数组就是柔性数组。
结构中的柔性数组前面必须至少一个其他成员,柔性数组成员允许结构中包含一个大小可变的数组,sizeof 返回的这种结构大小不包括柔性数组的内存。包含柔数组成员的结构用 malloc 函数进行内存的动态分配,且分配的内存应该大于结构的大小以适应柔性数组的预期大小。柔性数组到底如何使用?
不完整类型 C 和 C++ 对于不完整类型的定义是一样的,不完整类型是这样一种类型,它缺乏足够的信息(例如长度)去描述一个完整的对象。
不完整类型举例:
前向声明就是一种常用的不完整类型
1struct test; //test 只给出了声明,没有给出定义
不完整数据类型必须通过某种方式补充完整,才能使它们进行实例化,否则只能用于定义指针或引用,因为此时实例化的是指针或引用本身,不是 base 和 test 对象
一个未知长度的数组也属于不完整类型:
1extern int a [];
extern 关键字不能去掉,因为数组的长度未知,不能作为定义出现。不完整类型的数组需要补充完整才能使用。不完整类型的数组可以通过几种方式补充完整,大括号形式的初始化就是其中的一 ...