嵌入式
菁华如风
这个作者很懒,什么都没留下…
展开
-
CMake 简明教程
CMake基本使用原创 2022-07-09 22:47:41 · 964 阅读 · 0 评论 -
Qt警告:Missing reference in range-for with non trivial type (QString) [clazy-range-loop]
Qt编程中遇到Missing reference in range-for with non trivial type (QString) 的警告,感到莫名其妙,原始代码如下, QStringList fileList = QFileDialog::getOpenFileNames(this, title, curPath, filter); for (QString i : fileList) { ui->plainTextEdit->appe.原创 2021-12-16 20:31:48 · 2876 阅读 · 1 评论 -
Linux 服务器socket关闭,客户端为什么还能调用一次send
Linux 服务器socket关闭,客户端为什么还能调用一次send原创 2021-11-24 19:04:23 · 3077 阅读 · 0 评论 -
fread, fwrite和fflush
fread和fwrite是标准IO,在调用文件IO的基础上封装了用户空间缓冲区。这样可以减少系统调用的次数,在频繁使用IO的场景中减少系统开销。因此,调用fwrite向文件中写入数据时,数据不会立即被写入到文件中,而是先被写入到内存中的缓冲区,当缓冲区满或者调用fclose()或者调用fflush()后才会将内存缓冲区中的数据写入到目标文件中。其实,在调用fflush()后,再次调用fsync()方能保证fwite写入的数据写入到磁盘中。调用fread()会一次性从文件中读出相当多的数据到用户.原创 2021-11-20 16:07:41 · 1553 阅读 · 0 评论 -
Linux 无名管道使用示例
/** * @file pipe_no_name.c * @author your name (you@domain.com) * @brief 无名管道 * 无名管道用于具有亲缘关系的进程间通信 * @version 0.1 * @date 2021-11-20 * * @copyright Copyright (c) 2021 * */#include <stdio.h>#include <unistd.h>#include <sys/typ.原创 2021-11-20 15:43:22 · 303 阅读 · 0 评论 -
Linux父子进程的地址空间
Linux不同进程拥有独立的虚拟地址空间。即使是父子进程也是如此。当父进程创建一个子进程时,子进程会复制父进程地址空间中的大部分数据资源,包括代码段、变量和文件描述符等(采用写时复制机制)。因此会有下面有趣的现象,#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <wait.h>int main(){ char buffer[64] = {0原创 2021-11-20 14:06:06 · 3896 阅读 · 0 评论 -
VSCODE C/C++最小配置
平台:Ubuntu使用VSCODE 编写C/C++ 代码,需要至少配置好以下三个文件:c_cpp_properties.json, launch.json, tasks.jsonc_cpp_properties.json 用来配置头文件路径,编译器路径,以及使用的C/C++ 标准等。当VSCODE没有生成该文件时,可以使用"Ctrl + Shift + P" 调出命令搜索,输入"C/C++:Edit", 然后点击第一个选项即可打开该json配置文件。{ "configurati原创 2021-09-10 10:07:47 · 66707 阅读 · 0 评论 -
curl源码编译安装
平台:Ubuntu 20方法一:apt-get使用内置的apt下载工具进行安装,sudo apt-get install curl方法二:从官网下载压缩包在官网可以找到curl的多个版本,http://curl.haxx.se/download/wget https://curl.haxx.se/download/curl-7.55.1.tar.gztar -xzvf curl-7.55.1.tar.gzcd curl-7.55.1./configurema原创 2021-09-09 15:08:26 · 70324 阅读 · 0 评论 -
C语言实现简单HTTP 服务器
开发平台:Microsoft Visual Studio Community 2019#include <stdio.h>#include <winsock2.h>#include <string.h>#include <io.h>#pragma comment(lib, "ws2_32.lib")/** 网络编程 包含头文件: winsock2.h* 引用库文件: ws2_32.lib*/char r原创 2021-09-08 18:30:18 · 69826 阅读 · 0 评论 -
sprintf 函数详解
printf函数大家都熟悉,但是printf一般打印到标准输出,在需要整理、格式化字符串时,sprintf就大显身手了。例如,在处理传感器数据时,为了将得到的数据整合成特定的格式通过网络发送出去,char buffer[100] = { 0 };sprintf(buffer, "temperature: %f; humidity:%f\r\n", tempData, humiData);send(clientSocket, buffer, strlen(buffer));又例如,在进行HT原创 2021-09-08 17:16:16 · 89749 阅读 · 1 评论 -
将C文件改为CPP,头文件不识别问题
在项目中需要将一个C文件重命名为CPP文件,但是修改名称后缀后,编译器就无法找到头文件中定义的函数了。这是由于编译器对C代码和C++代码的函数名称处理方式不同导致的,使用以下方法le原创 2021-06-14 15:05:42 · 69111 阅读 · 0 评论 -
RT-Thread 开启软件IIC
使用RT-Thread Studio,点亮软件IIC,原创 2021-06-14 09:31:29 · 68176 阅读 · 0 评论 -
STM32 PWM 输出绑定与解除 GPIO电平的变化
STM32b原创 2021-06-03 12:36:52 · 68368 阅读 · 0 评论 -
STM32 PWM输出极性的实验
在PWM模式2中,CNT<CCR时输出无效电平,CNT>CCR时输出有效电平。PWM的有效输出电平在TIMx_CCER寄存器设置。原创 2021-06-01 13:14:54 · 3147 阅读 · 0 评论 -
STM32 PWM CCR配置解析
在原子哥的PWM输出例程中,感觉对捕获/比较寄存器(CCR)的设置不太合理。原子哥de原创 2021-06-01 11:53:41 · 17691 阅读 · 2 评论 -
VSCODE编写STM32代码配置
VSCODE提供了丰富实用的插件,可以大幅提升编写代码的体验和效率。下面简单说明如何使用VSCODE编辑Keil中导出的代码(仅编辑),消除恼人的报错,将上述Keil目录结构拖动到VSCODE打开,在main函数中,如果添加2、3行的宏定义,下面的代码会提示找不到定义。但是在Keil中我们确实没有2、3行的宏定义,为什么可以成功编译呢?原因是在stm32f10x.h头文件中,当定义了“USE_STDPERIPH_DRIVER”宏定义时,便会引入"stm32f10x_conf.h"头文原创 2021-04-16 09:41:05 · 68518 阅读 · 1 评论 -
Excel计算BOM物料数量的公式
公式如上。原理为将C2的全部长度减去替换掉逗号后的长度,得到的是逗号的数量,再加1即可。原创 2021-03-19 09:54:19 · 7166 阅读 · 0 评论 -
pads的ECO勾选属性对比
如下,在利用网表使用对比/ECO工具时,需要勾选“对比属性”,才能将网表中元件属性的更改信息导入到ECO中。原创 2021-02-06 18:12:38 · 68110 阅读 · 0 评论 -
STM32F103固件库源码解析——RCC_APB2PeriphClockCmd
RCC_APB2PeriphClockCmd函数用来开启或关闭APB2外设时钟,该函数总览如下,/** * @brief Enables or disables the High Speed APB (APB2) peripheral clock. * @param RCC_APB2Periph: specifies the APB2 peripheral to gates its clock. * This parameter can be any combination o原创 2021-02-06 15:54:18 · 19509 阅读 · 1 评论 -
STM32F103固件库源码解析——GPIO配置
首先,需要熟悉下一些重要的杂散的知识。上图是一个标准的GPIO配置过程。GPIO_InitTypeDef是一个结构体,可以看出,CRL寄存器的每4位控制一个GPIO的工作状态。上面的枚举类型设计得很巧妙,其用低四位代表具体输入/输出模式,低四位右移两位即是对应的寄存器配置,如下:(GPIO_Mode_AIN & 0X0F) >> 2 = 00B(GPIO_Mode_Out_PP & 0X0F) >> 2 = 00B(G原创 2021-02-06 14:23:45 · 67622 阅读 · 0 评论