09 2019 档案
摘要:这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式。 #pragma pack (n) 作用:C编译器将按照n个字节对齐。#pragma pack () 作用:取消自定义字节对齐方式。 #pragma pack (push,1) 作用:是指把
阅读全文
摘要:电子负载中需要用到,所以记录下。来源是德科技 SCPI(可编程仪器的标准命令)是一种基于 ASCII 的仪器编程语言,供测试和测量仪器使用。 SCPI 命令采用分层结构,也称为树系统。 相关命令归组于共用结点或根,这样就形成了子系统。 下面一部分 SENSe 子系统说明了这一点。 SENSe: VO
阅读全文
摘要:High Addresses ---> .----------------------. | Environment | ...
阅读全文
摘要:原文:C# Socket网络编程精华篇转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念:TCP/IP层次模型 当然这里我们只讨论重要的四层 01,应用层...
阅读全文
摘要:前言字节对齐是我们初学C语言就会接触到的一个概念,但是到底什么是字节对齐?对齐准则又是什么?为什么要字节对齐呢?字节对齐对我们编程有什么启示?本文将简单理一理字节对齐的那些事。什么是字节对齐计算机中内存大小的基本...
阅读全文
摘要:前言 字节对齐是我们初学C语言就会接触到的一个概念,但是到底什么是字节对齐?对齐准则又是什么?为什么要字节对齐呢?字节对齐对我们编程有什么启示?本文将简单理一理字节对齐的那些事。 什么是字节对齐 计算机中内存大小的基本单位是字节(byte),理论上来讲,可以从任意地址访问某种基本数据类型,但是实际上
阅读全文
摘要:原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次模型 当然这里我们只讨论重要的四层 01,应用层(Application):应用层是个很广泛的概念,有一些基本相同的系统级TCP/IP应用以及应用协议,
阅读全文
摘要:本文属网络编程部分。socket的引入是为了解决不同计算机间进程间通信的问题。 端口是TCP/IP协议中的概念,描述的是TCP协议上的对应的应用,可以理解为基于TCP的系统服务,或者说系统进程!如下图,FTP就需要占用特定的TCP端口。 TCP TCP 而 socket 呢,是网络编程中的概念,对T
阅读全文
摘要:在开发STM32的时候,无论你试试用库开发还是使用寄存器来开发首先最重要的你必须的理解STM32的启动流程,启动流程封装在启动文件里面。而这个启动文件就是Bootloader。Cortex M3的内核有三种启动方...
阅读全文
摘要:STM32单片机有三级流水线,指令周期不定的,arm给出的是1.25MIPS/Mhz,一个平均执行速度就是1Mhz的频率,每秒钟可以执行1.25M指令。72M,那么就是72*1.25MSTM32单片机多为单周期...
阅读全文
摘要:在keil中编程时,写了一行代码,然后就想知道,执行这句C代码需要多长时间。时钟周期在这就不解释了,频率的倒数。指令周期,个人理解就是cpu执行一条汇编指令所需要的时间。我们知道cm3使用的三级流水线,那么到底一...
阅读全文
摘要:看到有朋友遇到Hard Fault 异常错误,特地找到一篇飞思卡尔工程师写的一片经验帖,定位Hard Fault 异常。 Kinetis MCU 采用 Cortex-M4 的内核,该内核的 Fault ...
阅读全文
摘要:STM32出现HardFault_Handler故障的原因主要有两个方面:1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。2、堆栈溢出。增加堆栈的大小。出现问题时排查的方法:发生异...
阅读全文
摘要:所谓PID指的是Proportion-Integral-Differential。翻译成中文是比例-积分-微分。 记住两句话: 1、PID是经典控制(使用年代久远) 2、PID是误差控制() ...
阅读全文
摘要:Modbus RTU模式的协议字段 起始位 设备地址 功能码 数据 CRC校验 结束符 至少3.5个字符 ...
阅读全文
摘要:Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行...
阅读全文
摘要:玩过TI 的ZigBee或者BLE的人,都会接触到OSAL。OSAL是什么?OSAL英文全称:operating system abstraction layer(操作系统抽象层)。基于OSAL的调度机制,OSAL支持多任务,而且一个任务内支持多个事件执行。有关OSAL调度机制的实现原理,可以去网上
阅读全文
摘要:首先我们的熟悉实时系统的概念,实时系统它分为软实时和硬实时;软实时系统它是指系统的目的是为了使各个任务尽快的执行,而不要求限定的某一个任务在多长时间内完成,也就是该系统超过规定时间对系统不会产生很大的影响,系统依然可以运行。而硬实时系统则不仅要求任务执行无误,而且还要做到准时;也就是说在一到达规定的
阅读全文
摘要:int main( ){short b;//b放置在栈上,占用2个字节char a[100];//需要在栈上开辟100个字节,a的值是其首地址char s[]=”abcde”;//s在栈上,占用4个字节,“abc...
阅读全文
摘要:https://www.cnblogs.com/Mysterious/p/4804188.html STM32L0 HAL库 UART 串口读写功能 串口发送功能: uint8_t TxData[10]= "01234abcde"; HAL_UART_Transmit(&huart2,TxData,
阅读全文
摘要:1、尽量显式地指定数组的边界#define MAX 10…int a[MAX]={1,2,3,4,5,6,7,8,9,10};在 C99 标准中,还允许我们使用单个指示符为数组的两段“分配”空间,如下面的代码所示...
阅读全文
摘要:杰杰 物联网IoT开发 2017-10-12大家好,我是杰杰。 今晚,设计电路搞了一晚上,终于从模电渣渣的我,把MOS管理解了那么一丢丢,如有写的不好的地方,请指出来。谢谢。 我带的师弟选的...
阅读全文
摘要:今天发现我的 Keil MDK5.28z win10系统上面,点击 Project 菜单立即崩溃。网上找到了解决方法简单粗暴的处理方法:重装keil ,但是依然点击 project 崩溃。通过搜索发现解决办法:清...
阅读全文
摘要:51 是大端模式arm的cortex m 默认小端,可以设置大端x86是小端大端模式:低位字节存在高地址上,高位字节存在低地址上 小端模式:高位字节存在高地址上,低位字节存在低地址上 ...
阅读全文
摘要:#include struct argvs{ char a[64]; int b;};int pfunc(struct argvs *a){ printf("argvs.a=%s argvs.b...
阅读全文
摘要:在调试过程中,可以使用keil自带的逻辑分析仪查看变量的试试信息,减少串口输出,提高部分cpu的效率,可以添加以下信息:1、gpio引脚2、全局变量全局静态变量、局部变量是不行的。然后,添加变量后,需要右键设置:...
阅读全文
摘要:溢出检测我们可以通过下面的方式来检测溢出:if(a > INT_MAX - b){ printf("overflow\n");}我们利用整型的最大值减去其中一个数,然后与另一个数进行比较。其中INT_MAX...
阅读全文
摘要:前言缓冲区溢出通常指的是向缓冲区写入了超过缓冲区所能保存的最大数据量的数据。如果说之前所提到的一些问题可能只是影响部分功能的实现,那么缓冲区溢出将可能会造成程序运行终止,被不安全代码攻击等严重问题,因此我们不得不...
阅读全文
摘要:前言什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题。什么是初始化初始化指的是对数据对象或者变量赋予初始值。例如:int value = 8; /...
阅读全文
摘要:#include int main(void){ int a = 4; int b = 3; int c = a / b; float d = *(float *)(&c); lo...
阅读全文
摘要:#include#includevoid AllocateMemory(int **pGetMemory, int n){ int *p = (int*)malloc(sizeof(int) * n); ...
阅读全文
摘要:C中的volatile变量是什么?回答:的易失性的关键字是类型限定符防止从编译器optimization.According至C标准的对象,具有挥发性限定类型可以以实施方式未知进行修改或具有其他未知侧effect...
阅读全文
摘要:回答:在C语言中,有很多方法可以将2d数组作为参数传递。在下面的部分中,我描述了将2d数组作为参数传递给函数的几种方法。使用指针传递2d数组以在c中运行 多维数组的第一个元素是另一个数组,所以在这里,当我们传递一...
阅读全文
摘要:请参阅下面的示例,其中我将交换两个变量的值。 do-while(0)结构很不错#include #define swap(x,y,T) do { \ T temp = (*x);\ (*x) =...
阅读全文
摘要:函数指针有何用函数指针的应用场景比较多,以库函数qsort排序函数为例,它的原型如下:void qsort(void *base,size_t nmemb,size_t size , int(*compar)(c...
阅读全文
摘要:#include #include #define STU_NAME_LEN 16/*学生信息*/typedef struct student_tag{ char name[STU_NAME_LEN]; ...
阅读全文
摘要:回答:传递大型结构喜欢服务器请求或响应数据包。 实现链表和二叉树。 使用GPIO或硬件寄存器。 从函数中获取地址或更新值(通过引用调用) 创建动态数组。 使用函数指针创建回调函数。注意:除此之外,还有很多需要使用...
阅读全文
摘要:回答: 1 2 3 4 5 6 7 8 9 10 unsigned int NumberSetBits(unsigned int n) { un...
阅读全文
摘要:回答: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #define CHAR_BITS 8 // size of...
阅读全文
摘要:回答:在这里,我正在编写一个小算法来检查2的幂。如果一个数是2的幂,则函数返回1。 1 2 3 4 int CheckPowerOftwo (unsigned int x) ...
阅读全文
摘要:方法1((使用算术运算符): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include ...
阅读全文
摘要:1、先定义结构体类型后再定义结构体变量; 格式为;struct 结构体名 变量名列表; struct book s1,s2,*ss;//注意这种之前要先定义结构体类型后再定义变量;2、在定义结构体类型的同时定义结...
阅读全文
摘要:如果是为指针p申请一段内存,上面的代码能达到目的吗? 通过前面的内容分析,肯定是达不到预期效果的。运行结果: 这是为什么呢?我们还是利用前面所知来分析,由于传递给getMemory函数的参数都是一个副本,因此函数内的p也是外部p的一个副本,因此即便在函数内部,将p指向了一块新申请的内存,仍然不会改变
阅读全文
摘要:首先从静态变量说起. C语言里面静态变量有三种: 分别是外部链接性,内部链接性和无链接性.声明外部链接的变量的方法是在代码块外面声明它. 此变量是全局变量,多文件中亦可用.声明内部链接的变量的方法是在代码块外面声明它并加上static限定符. 此变量是全局变量,但仅在本文件中可用.声明无链接的变量的
阅读全文
摘要:int p; //一个整数 int p [5]; //一个包含5个整数的数组 int * p; //指向整数的指针 int * p [10]; //一个包含10个整数指针的数组 int ** p; //指向整数的指针 int(* p)[3]; //指向3个整数数组的指针 int(* p)(char
阅读全文
摘要:C中有哪些数据类型? 回答: 有两种类型的数据类型,用户定义和预定义。预定义的数据类型是int,char,float,double等,用户使用标签struct,union或enum创建用户定义的数据类型。基本上,数据类型描述变量的大小和内存布局。 在C语言中,不同的数据类型具有不同的范围。范围因编译
阅读全文
摘要:查找:^.*main.*$替换为:(空) 删除空行 \n\r 替换为:(空)
阅读全文
摘要:两种表达都不同。让我们看一个示例代码来理解两个表达式之间的区别。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> int main(void) { int aiData[5] = {100,200,300,400,500}; int *piDa
阅读全文
摘要:上面的代码会漏掉A,使用下面的解决了 for循环最好使用++i, 当我们需要一个循环或者只需要增加操作数时,预增量远远好于后增量,因为在后增量的情况下,编译器可能创建了一个需要额外时间的旧数据副本。这不是100%正确,因为现在编译器非常聪明,他们正在以一种在前后增量之间没有区别的方式优化代码。所以这
阅读全文
摘要:// 写一个程序检查一个整数是2的幂?// 在这里,我正在编写一个小算法来检查2的幂。如果一个数是2的幂,则函数返回1。int CheckPowerOftwo (unsigned int x){ return ...
阅读全文
摘要:#define my_sizeof(type) ((char *)(&type+1)-(char*)(&type))同时大小端测试 如下#include #include #define my_sizeof(ty...
阅读全文
摘要:计算机中的数分为整数与实数。对于实数,绝大多数现代的计算机系统采纳了所谓的浮 点数表达方式。 这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa ), 一 个基数(Base),一个指数 e(阶码...
阅读全文
摘要:话要从业务代码里的bug说起,大致过程是前端运算 2.07-1 之后结果却是1.0699999999999998,老司机们都知道是浮点数运算的精度丢失导致的,在查看了下具体代码,果然处理不当。因此我深究一番,并诞...
阅读全文
摘要:float、double的计算是比较复杂的,尤其是软件计算,要比较指数,有效数字等,肯定是需要好几个汇编指令的。浮点数的加法运算(不要问哥为啥只讲加法~)分为下面几个步骤:对阶位数求和规格化舍入校验判断因此总结以...
阅读全文
摘要:一般来说 gcc 3.0 以上都是支持 C99 的但是编译的时候得加上 -std=c99检测 gcc 是否支持 C99 方法,新建 c99.c 文件,内容如下#include int main(void) {#i...
阅读全文
摘要:【glibc,uclibc,eglibc的简介】1.Glibcglibc = GNU C Library是GNU项(GNU Project)目,所实现的 C语言标准库(C standard library)。目前...
阅读全文
摘要:经常在代码中看到使用malloc来分配,然后memset清零,其实calloc更加方便,一句顶两句~头文件:#include calloc() 函数用来动态地分配内存空间并初始化为 0,其原型为: void...
阅读全文
摘要:原文:玩转单片机2019-08-24 16:50:29越学到后面,基础知识更加不能忘记,温故而知新~~还记得当年的打印机,鼠标和调制解调器吗?他们都有巨大笨重的连接器和粗电缆,并且必须拧到你的电脑上。这些设备正是...
阅读全文