自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

liming0931的专栏

不积小流,无以成江海

  • 博客(43)
  • 资源 (3)
  • 收藏
  • 关注

转载 pid 及参数调试方法

所谓PID指的是Proportion-Integral-Differential。翻译成中文是比例-积分-微分。 记住两句话: 1、PID是经典控制(使用年代久远) 2、PID是误差控制() 对直流电机速度进行定速控制: 1、L293作为电机驱动;2、光电传感器-作为输出反馈;3、PWM做为输入控制。 PID怎么对误差控制,听我细细道来: 所谓“误差...

2019-09-14 17:44:17 8324 1

原创 堆栈的分布

High Addresses ---> .----------------------. | Environment | |----------------------| | | Functions and ...

2019-09-24 19:29:31 381

原创 Socket网络编程(TCP/IP/端口/类)和实例

原文:C# Socket网络编程精华篇转自:微冷的雨我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念:TCP/IP层次模型 当然这里我们只讨论重要的四层 01,应用层(Application):应用层是个很广泛的概念,有一些基本相同的系统级TCP/IP应用以及应用协议,也有许多的企业应用和互联网应用。http协议在应用层运行。...

2019-09-24 19:21:48 259

原创 c语言字节对齐

前言字节对齐是我们初学C语言就会接触到的一个概念,但是到底什么是字节对齐?对齐准则又是什么?为什么要字节对齐呢?字节对齐对我们编程有什么启示?本文将简单理一理字节对齐的那些事。什么是字节对齐计算机中内存大小的基本单位是字节(byte),理论上来讲,可以从任意地址访问某种基本数据类型,但是实际上,计算机并非逐字节大小读写内存,而是以2,4,或8的 倍数的字节块来读写内存,如此一来就会对基...

2019-09-24 19:20:08 1123

转载 SMT32 启动文件详细解说

在开发STM32的时候,无论你试试用库开发还是使用寄存器来开发首先最重要的你必须的理解STM32的启动流程,启动流程封装在启动文件里面。而这个启动文件就是Bootloader。Cortex M3的内核有三种启动方式,其分别是:A.通过boot引脚设置可以将中断向量表定位于SRAM区,即起始地址为0x2000000,同时复位后PC指针位于0x2000000处;B.通过boot引脚设置可以将中断向...

2019-09-20 08:32:35 298

转载 主流单片机指令周期介绍

STM32单片机有三级流水线,指令周期不定的,arm给出的是1.25MIPS/Mhz,一个平均执行速度就是1Mhz的频率,每秒钟可以执行1.25M指令。72M,那么就是72*1.25​MSTM32单片机多为单周期​指令​AVR单片机​51是CISC结构的单片机,而AVR是RISC结构的,RISC结构基本上是一个时钟周期一条指令。​avr一个时钟周期(晶振周期)执行一条指令,相对来说...

2019-09-17 18:14:53 1680

转载 STM32的指令周期

在keil中编程时,写了一行代码,然后就想知道,执行这句C代码需要多长时间。时钟周期在这就不解释了,频率的倒数。指令周期,个人理解就是cpu执行一条汇编指令所需要的时间。我们知道cm3使用的三级流水线,那么到底一条指令的执行需要多少个时钟周期。下面通过keil软件仿真,来计算一个指令所需的时钟周期。使用STM32F103RC,。配置其主时钟HCLK为72mhz测试代码如下:...

2019-09-17 18:10:03 2684

转载 stm32 HardFault_Handler调试及问题查找方法——飞思卡尔

看到有朋友遇到Hard Fault 异常错误,特地找到一篇飞思卡尔工程师写的一片经验帖,定位Hard Fault 异常。 Kinetis MCU采用Cortex-M4的内核,该内核的Fault异常可以捕获非法的内存访问和非法的编程行为。Fault异常能够检测到以下几类非法行为: · 总线 Fault:在取址、数据读/写、取中断变量、进入/退出中断时...

2019-09-14 17:52:45 1053

原创 stm32 HardFault_Handler调试及问题查找方法

STM32出现HardFault_Handler故障的原因主要有两个方面:1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。2、堆栈溢出。增加堆栈的大小。出现问题时排查的方法:发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、Ret...

2019-09-14 17:46:57 698

转载 ModbusRTU模式和结束符(转)

Modbus RTU模式的协议字段 起始位 设备地址 功能码 数据 CRC校验 结束符 至少3.5个字符 8bit 8bit N*8bit 16bit ...

2019-09-12 10:03:47 2299 1

原创 modbus字符串的结束符介绍

Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它...

2019-09-12 10:02:02 1845

原创 单片机的存储区范例

int main( ){short b;//b放置在栈上,占用2个字节char a[100];//需要在栈上开辟100个字节,a的值是其首地址char s[]=”abcde”;//s在栈上,占用4个字节,“abcde”本身放置在只读数据存储区,占6字节。s是一个地址//常量,不能改变其地址数值,即s++是错误的。char *p1;//p1在栈上,占用4个字节char *p2 ="1...

2019-09-08 20:50:46 360 1

原创 c语言数组越界的避免方法

1、尽量显式地指定数组的边界#define MAX 10…int a[MAX]={1,2,3,4,5,6,7,8,9,10};在 C99 标准中,还允许我们使用单个指示符为数组的两段“分配”空间,如下面的代码所示:int a[MAX]={1,2,3,4,5,[MAX-5]=6,7,8,9,10};在上面的 a[MAX] 数组中,如果 MAX 大于 10,数组中间将用 0 值元素进...

2019-09-08 16:27:15 5233

转载 MOS管做开关之初理解

杰杰物联网IoT开发2017-10-12大家好,我是杰杰。 今晚,设计电路搞了一晚上,终于从模电渣渣的我,把MOS管理解了那么一丢丢,如有写的不好的地方,请指出来。谢谢。 我带的师弟选的题目是自动恒温控制的系统 ,打算用闭环的控制,对比继电器,MOS管更精确的控制一点。所以才用上MOS管。 在数字电路中使用三极管就可以做开关,但是一般是...

2019-09-07 17:46:59 5613

原创 keil mdk 菜单 “project” 崩溃问题解决

今天发现我的 Keil MDK5.28z win10系统上面,点击 Project 菜单立即崩溃。网上找到了解决方法简单粗暴的处理方法:重装keil ,但是依然点击 project 崩溃。通过搜索发现解决办法:清除最近项目列表即可。 操作如下:1.运行 REGEDIT 2.删除 计算机\HKEY_CURRENT_USER\Software\Keil\uVision5\Recent Pr...

2019-09-06 11:03:21 589

原创 51 arm x86 的大小端记录

51 是大端模式arm的cortex m 默认小端,可以设置大端x86是小端大端模式:低位字节存在高地址上,高位字节存在低地址上小端模式:高位字节存在高地址上,低位字节存在低地址上...

2019-09-05 21:15:25 715

原创 (C99)复合字面量

#include <stdio.h>struct argvs{ char a[64]; int b;};int pfunc(struct argvs *a){ printf("argvs.a=%s argvs.b=%d\n", a->a, a->b);}int func(struct argvs a){ printf(...

2019-09-05 20:45:18 162

原创 如何的keil试试调试中,看逻辑分析仪Logic viwer

在调试过程中,可以使用keil自带的逻辑分析仪查看变量的试试信息,减少串口输出,提高部分cpu的效率,可以添加以下信息:1、gpio引脚2、全局变量全局静态变量、局部变量是不行的。然后,添加变量后,需要右键设置:如下g_u32tick 是8位的全局变量...

2019-09-05 17:02:29 1147

原创 c语言之——整型的隐式转换与溢出检测

溢出检测我们可以通过下面的方式来检测溢出:if(a>INT_MAX-b){printf("overflow\n");}我们利用整型的最大值减去其中一个数,然后与另一个数进行比较。其中INT_MAX定义在limit.h头文件中,它表示整数的最大值。当然,我们还可以通过下面的方式来检测:if((unsignedint)a+(unsignedi...

2019-09-05 11:56:51 464

原创 C语言入坑指南-缓冲区溢出

前言缓冲区溢出通常指的是向缓冲区写入了超过缓冲区所能保存的最大数据量的数据。如果说之前所提到的一些问题可能只是影响部分功能的实现,那么缓冲区溢出将可能会造成程序运行终止,被不安全代码攻击等严重问题,因此我们不得不特别重视。一个缓冲区溢出的例子对于下面的程序:#include<stdio.h>#include<string.h>intmain(vo...

2019-09-05 11:16:21 254

转载 C语言入坑指南-被遗忘的初始化

前言什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题。什么是初始化初始化指的是对数据对象或者变量赋予初始值。例如:intvalue=8;//声明整型变量并初始化为8intarr[]={1,2,3};//声明整型数组arr,并初始化其值为1,2,3为什么要初始化我们来看一个示例程序。te...

2019-09-05 11:03:50 892

原创 你所不知道的printf函数

#include <stdio.h>int main(void){ int a = 4; int b = 3; int c = a / b; float d = *(float *)(&c); long long e = 0xffffffffffffffff; printf("a/b:%f,a:%d\n", a / b, ...

2019-09-05 11:00:45 977

原创 c语言二级指针的使用,malloc内存申请

#include<stdio.h>#include<stdlib.h>void AllocateMemory(int **pGetMemory, int n){ int *p = (int*)malloc(sizeof(int) * n); if (p == NULL) { *pGetMemory = NULL; ...

2019-09-05 10:06:19 2227

原创 volatile相关知识

C中的volatile变量是什么?回答:的易失性的关键字是类型限定符防止从编译器optimization.According至C标准的对象,具有挥发性限定类型可以以实施方式未知进行修改或具有其他未知侧effects.You也可以说,一个对象可以随时更改volatile限定对象的值,而不需要代码执行任何操作。如果一个对象被volatile限定符限定,那么每次程序访问它时,编译器都会从内存...

2019-09-04 08:47:59 108

原创 如何在C中传递二维数组作为参数?

回答:在C语言中,有很多方法可以将2d数组作为参数传递。在下面的部分中,我描述了将2d数组作为参数传递给函数的几种方法。使用指针传递2d数组以在c中运行多维数组的第一个元素是另一个数组,所以在这里,当我们传递一个2D数组时,它将被分割成一个指向数组的指针。例如,如果int aiData [3] [3]是一个整数的二维数组,它将被拆分成一个指向3个整数数组的指针(int(*)[...

2019-09-04 08:40:22 1153

原创 如何在C中定义多行宏定义?

请参阅下面的示例,其中我将交换两个变量的值。do-while(0)结构很不错#include <stdio.h> #define swap(x,y,T) do { \ T temp = (*x);\ (*x) = (*y); \ (*y) = temp; \} while (0) int main(void) { int a =...

2019-09-04 08:39:14 833 1

原创 qsort中的函数指针,及函数解释

函数指针有何用函数指针的应用场景比较多,以库函数qsort排序函数为例,它的原型如下:voidqsort(void*base,size_tnmemb,size_tsize,int(*compar)(constvoid*,constvoid*));看起来很复杂对不对?拆开来看如下:voidqsort(void*base,size_tnmemb,si...

2019-09-04 08:35:50 422

原创 函数指针,使用qsort,进行结构体排序

#include <stdio.h>#include <stdlib.h>#define STU_NAME_LEN 16/*学生信息*/typedef struct student_tag{ char name[STU_NAME_LEN]; //学生姓名 unsigned int id; //学生学号 int scor...

2019-09-04 08:34:23 429

原创 我们什么时候应该在C程序中使用指针?

回答:传递大型结构喜欢服务器请求或响应数据包。 实现链表和二叉树。 使用GPIO或硬件寄存器。 从函数中获取地址或更新值(通过引用调用) 创建动态数组。 使用函数指针创建回调函数。注意:除此之外,还有很多需要使用指针的地方。...

2019-09-03 14:46:04 717

原创 编写一个c程序来计算整数中的设置位数?

回答: 1 2 3 4 5 6 7 8 9 10 unsigned int NumberSetBits(unsigned int n) { unsigned int CountSetBits= 0; while (n) { CountS...

2019-09-03 14:44:36 395

原创 如何在C中以二进制格式打印十进制数?

回答: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #define CHAR_BITS8// size of character #define INT_BITS( sizeof(int) * CHAR_BITS) ...

2019-09-03 14:41:54 422

原创 写一个程序检查一个整数是2的幂?

回答:在这里,我正在编写一个小算法来检查2的幂。如果一个数是2的幂,则函数返回1。 1 2 3 4 int CheckPowerOftwo (unsigned int x) { return ((x != 0) && (!(x & (x - 1)))); } 要么...

2019-09-03 14:41:19 218

原创 编写程序交换两个数字而不使用第三个变量?

方法1((使用算术运算符): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> int main() { int a = 10, b...

2019-09-03 14:40:49 246

原创 关于c语言中结构体的初始化

1、先定义结构体类型后再定义结构体变量;格式为;struct 结构体名 变量名列表;structbook s1,s2,*ss;//注意这种之前要先定义结构体类型后再定义变量;2、在定义结构体类型的同时定义结构体变量;格式为;struct 结构体名{成员列表;}变量名列表;//这里结构体名是可以省的,但尽量别省;struct book{char title[...

2019-09-03 13:19:30 731

原创 写一个程序检查一个整数是2的幂

// 写一个程序检查一个整数是2的幂?// 在这里,我正在编写一个小算法来检查2的幂。如果一个数是2的幂,则函数返回1。int CheckPowerOftwo (unsigned int x){ return ((x != 0) && !(x & (x - 1)));}...

2019-09-01 21:36:30 115

原创 自己实现sizeof+大小端测试

#define my_sizeof(type) ((char *)(&type+1)-(char*)(&type))同时大小端测试 如下#include <stdio.h>#include <stdlib.h>#define my_sizeof(type) ((char *)(&type+1)-(char*)(&type))...

2019-09-01 21:11:25 157

转载 死磕浮点数——浮点数格式与存储

计算机中的数分为整数与实数。对于实数,绝大多数现代的计算机系统采纳了所谓的浮 点数表达方式。 这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa ), 一 个基数(Base),一个指数 e(阶码 E=e+127 或者 e+1023)(exponent)以及一个表示正负 的符号(Sign)来表达实数。 比如 123.45 用十进制科学计数法可以表达为 1.2345 × 10^2 ,...

2019-09-01 18:35:28 400

转载 死磕浮点数——浮点数精度之谜

话要从业务代码里的bug说起,大致过程是前端运算 2.07-1 之后结果却是1.0699999999999998,老司机们都知道是浮点数运算的精度丢失导致的,在查看了下具体代码,果然处理不当。因此我深究一番,并诞生了此文。此处重点强调两个认识误区:浮点数运算精度丢失问题并不是js独有的!js浮点数的加减乘除运算都可能导致精度丢失问题!首先不得不说说浮点数的表示方法,任何数在计算机面前都会...

2019-09-01 18:33:15 328

原创 提升代码的运算速度——代码优化的方法总结

float、double的计算是比较复杂的,尤其是软件计算,要比较指数,有效数字等,肯定是需要好几个汇编指令的。浮点数的加法运算(不要问哥为啥只讲加法~)分为下面几个步骤:对阶位数求和规格化舍入校验判断因此总结以下几个方法:1、1维数组比2维数组好2、可以把小数转换为整数的乘除,乘法比除法快3、乘除可以使用移位运算,但前提是2的N次方。同样,如果不是,可以进行通分转换为2的...

2019-09-01 17:02:28 2455

转载 检测 gcc 是否支持 C99 标准的方法

一般来说 gcc 3.0 以上都是支持 C99 的但是编译的时候得加上 -std=c99检测 gcc 是否支持 C99 方法,新建 c99.c 文件,内容如下#include <stdio.h>int main(void) {#ifdef __STDC__ printf("%s\n", "stardard C");#endif#ifdef __STDC...

2019-09-01 15:10:25 2432

经典的c语言解释器ch 8.0

这个软件比较好,可以把c语言当作脚本来执行,验证一些代码,比较方便

2022-11-07

经典的工具:Turbo-c-3.0-DOSBox.7z

这个软件已经集成了dosbox,可以在win10运行,集成了turbo c2.0编译软件,适合回味经典。

2022-11-07

经典的工具:Turbo-C-3.0-DOSBox.7z

这个软件已经集成了dosbox,可以在win10运行,集成了turbo c3.0编译软件,适合回味经典。

2022-11-07

CRC计算工具V3.3.0-64.7z

比较好的crc计算工具,32位64位系统都可以用的。crc的校验方法也很多。推荐使用,希望能够帮助到大家

2019-11-19

C指针好资料,值得学习

C指针好资料,值得学习,所以特地上传,给大家看看,里面有现成的代码,可以自己加以学习,实践

2018-08-28

华清远见共享给学员的面试题

CC++的试题库,不错的,可以供大家参考参考,欢迎大家阅读

2018-05-21

空空如也

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

TA关注的人

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