C 语言
文章平均质量分 81
csdn_dx
积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海.。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂.蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。——《荀子劝学篇》
展开
-
原码,反码,补码杂谈
你也许会说,现实世界中所有的减法也可以当成加法的,减去一个数,可以看作加上这个数的相反数。在原码,反码表示法中,我们把减法化为加法的思维是减去一个数,等于加上一个数的相反数,结果发现引入了符号位,却因为符号位造成了各种意向不到的问题。OK,原码,反码,补码之旅就到这里结束。然后说负数的补码等于他的原码自低位向高位,尾数的第一个‘1’及其右边的‘0’保持不变,左边的各位按位取反,符号位不变。负数的补码等于他的原码自低位向高位,尾数的第一个‘1’及其右边的‘0’保持不变,左边的各位按位取反,符号位不变。转载 2022-10-01 12:30:39 · 741 阅读 · 1 评论 -
STM32内部flash存储小数——别样的C语言技巧
今天在进行STM32内部falsh存储的时候,发现固件库历程的函数原型是这样的:第一个是地址,在我的STM32中是2K一页的,第二个是要写入的数据。问题就来了,存储一个小数该怎么办呢?固件库给的是整形数据啊!三种解决办法:第一:最具大众性的把小数乘以系数放大,当做整数存储,然后再除以放大系数得到小数本身。例如 float a=1.23; int b=a*100;把b存进去,取出来的时候再除以100,就可以得到小数a了。这是最简单可能也是最好想到的了,但同时,这也是最麻烦的了...转载 2020-12-20 11:05:23 · 1838 阅读 · 2 评论 -
C语言中的__FILE__、__LINE__和__func__等预定义跟踪调试
C语言中的__FILE__、__LINE__和__func__等预定义跟踪调试 标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义。下面预定义宏表,被我抄了下来。 __LINE__ :当前程序行的行号,表示为十进制整型常量__FILE__ :当前源文件名,表示字符串型常量__DATE__ :转换的日历日期,表示为Mmm dd yyyy 形式的字符串常量,M.转载 2020-12-20 10:53:41 · 431 阅读 · 1 评论 -
如何理解typedef void (*pfun)(void)
问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一“块”东西,而不是两“块”东西呢?那是谁“替代”了谁啊?我总结了一下,一方面是对typedef的概念不清晰,另一方面受了#define的影响,犯了定向思维的错误。 概念理解:typedef 只对已有的类型进行别名定义,不产生新的类型;#define 只是在预处理过程...转载 2020-12-20 00:01:58 · 558 阅读 · 2 评论 -
字符串匹配的KMP算法和C语言代码,不需要思考就能理解</h1>
KMP算法用于判断一个字符串是否包含另一个字符串,如果包含就返回脚标。其实KMP算法本身特别简单,我看了几篇本章都号称简单易懂,结果看得我云里雾里,直到我看到了阮一峰:字符串匹配的KMP算法,才真正看懂。下文的第一部分基本上都是阮一峰文章的转述,第二部分代码也是在网上其他地方找的。第三部分KMP算法的理解,才是笔者的东西,相信看了第三部分你会豁然开朗。一、KMS算法的处理过程下面用 KMP算法在字符串"BBC ABCDAB ABCDABCDABDE"中寻找字符串"ABCDABD":首先,字转载 2020-08-11 23:44:58 · 396 阅读 · 0 评论 -
C语言_单片机_break,return,continue,指针优先级
测试代码如下#include "reg51.h"#include "stdio.h"#include "intrins.h" char putchar(char s){ SBUF=s; while(TI==0) { _nop_(); } TI=0; return 0;}void test_return(unsigned int *i){ while((*i)--) { if((*i)<5) { re.原创 2020-05-22 13:04:59 · 1157 阅读 · 0 评论 -
C语言_浮点数_IEEE 754标准_单片机_浮点数精度
IEEE 754标准浮点格式可分为符号位s,指数位e以及尾数位f三部分。其中真实的指数E相对于实际的指数有一个偏移量,所以E的值应该为e-Bias,Bias即为指数偏移量。这样做的好处是便于使用无符号数来代替有符号的真实指数。尾数f字段代表纯粹的小数,它的左侧即为小数点的位置。规格化数的隐藏位默认值为1,不在格式中表达。在IEEE-754 标准下,浮点数一共分为:NaN:即Not a Number。非数的指数位全部为1 同时尾数位不全为0。在此前提下,根据尾数位首位是否为1,...原创 2020-05-21 23:12:49 · 1836 阅读 · 0 评论 -
BMS_汽车充电桩中的PGN到CAN_ID转换
PGN的格式如图1中的6.4参数组编号所示,高低字节均为00,如BCL 是00 10 00 H(PGN4096)BCS 是00 11 00 H(PGN4352) 图一 ...原创 2020-04-15 20:47:32 · 7889 阅读 · 10 评论 -
单片机_指针读取内容解析
STC单片机自带内部参考电压,单片机生产时内部已经做校准,可分别在ram和rom中读取,(1)rom中读取在rom中读取的时候,需要在下载时候勾选下载软件中的 在程序区的结束处添加重要测试参数,如下图所示:勾选下载后,BandGap电压以mV为单位可以读取。BGV = (int code *)0xeff7; ROM容量大小不同,地址不同如// STC8A8K60S4A10 是...原创 2020-04-07 15:58:40 · 2652 阅读 · 4 评论 -
C语言_钩子函数(回调函数)
钩子函数、回调函数、注册函数,挂钩子这些我们代码中经常涉及到的东西,是否已经困扰你很久了?它们究竟是怎么回事,究竟怎么用?下面我来为你一一解答。什么是钩子函数?钩子函数也叫回调函数,是通过函数指针来实现的,那我们来看看什么是函数指针。首先看看以下例子:int *p;int a,b;我们可以让指针p先后指向a, b,这样,p就先后代表了不同变量的地址p = &a;...转载 2020-03-05 16:20:50 · 6023 阅读 · 0 评论 -
单片机C语言汇编代码
目录if(testaa++>5)if(++testaa>5)testaa=testaa++;if(testaa++>5) 图1 if(testaa++>5)反汇编图1中先将testaa值存在了R7寄存器中,然后对testaa++;再将R7中的数据同5进行做减法,通过判断是否发生借位...原创 2020-01-11 12:18:40 · 486 阅读 · 0 评论 -
C语言中const关键字的用法
目录前言一、修饰局部变量二、常量指针与指针常量三、修饰函数的参数四、修饰函数的返回值前言const修饰符有以下的优点:1、预编译指令只是对值进行简单的替换,不能进行类型检查2、可以保护被修饰的东西,防止意外修改,增强程序的健壮性3、编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作...原创 2019-11-28 10:57:17 · 155 阅读 · 0 评论 -
单片机内部数据离线绘制波形
在调试单片机时,有时为了调试方便需要显示连续的波形,除了发送给上位机显示和用ccs自带的显示波形窗口,本文介绍另外一种离线显示数据波形的方法。之所以用Psim中的SIMview是操作简单,便于缩放和数据处理。本文采用dsp28335实验,也可用于stm32中,或者其它需要显示数据波形并进行分析的地方。目录1.ccs6.0 导出数据2.excel加工数据3.psim显示数据...原创 2019-11-27 21:56:15 · 933 阅读 · 0 评论 -
指针数组和数组指针
容易混淆,在中间加‘的’比较好理解,即指针的数组(表示数组里面全是指针);数组的指针(表示这个指针是指向数组的)。目录(1)指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针(2)数组指针:a pointer to an array,即指向数组的指针(3)USE(1)指针数组:array of pointers,即用于存储指针的数组,...原创 2019-11-24 22:03:15 · 196 阅读 · 0 评论 -
extern volatile struct GPIO_DATA_REGS GpioDataRegs什么意思
http://zhidao.baidu.com/link?url=VFV-BzAHSqJN4O1ZXwoNIBlmve4N7X73AceP2LiOhRS00qiHUbEDE9jnux7UyIdIz30MlcpGO40QHytFsUYDpqGPIO_DATA_REGS 是结构名而GpioDataRegs是该结构类型的变量名extern volatile struct GPIO原创 2016-03-03 22:03:47 · 2952 阅读 · 0 评论 -
stm32 编程的收获,有关C语言(在stm32 公交报站中的收获)
1.char * msg[MSG_NUM] = { //以下内容请自行修改 {"乘客您好,欢迎乘坐"},{"[n1]2[n0]路"}, //车次,采用单个数字变读(1读作幺)模式,读后恢复正常模式 {"公交车,本路车由"},{"开往"},{",前门上车,后门下车,本车无人售票,请自备零钱"},{"车辆起动,请站稳扶好"},{"[2]车辆转弯,请注意安全"...原创 2016-04-06 01:15:20 · 2642 阅读 · 5 评论 -
static作用(修饰函数、局部变量、全局变量),说白了就是隐藏功能
static作用(修饰函数、局部变量、全局变量)在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容chara转载 2016-04-14 01:12:55 · 4475 阅读 · 1 评论 -
usmart_dev.init(SystemCoreClock/1000000); stm32 战舰的usmart 程序
usmart_dev.init(SystemCoreClock/1000000); //初始化USMART对初始化程序的解析。对应 stm32 战舰的usmart 程序来分析usmart_dev是_m_usmart_dev结构体的变量, usmart_dev结构体变量的初始化如下struct _m_usmart_dev usmart_dev={usmart_namet...原创 2016-04-14 12:13:10 · 3589 阅读 · 0 评论 -
keil 中调用printf 的使用 在软件调试下 serial windows 下显示打印信息
致我的青春和一起在路上奔跑的兄弟。愿我们能在路上感到温暖和力量。。。。在程序调试中,不断的打印出变量和一些中间值是相当重要的,在单片机和arm的调试程序中printf 也相当的有用;目录1.软件编程内容2.keil软件设置1.软件编程内容printf 要包含C的头文件#include <stdio.h> 标准的输入输出;printf 在调用的时候要先重写(...原创 2016-04-11 21:50:27 · 22226 阅读 · 7 评论 -
单片机_LCD12864显示自己制作的图片(时钟为例)
1.用ps(Photoshop)新建一个原创 2016-07-01 15:39:36 · 11036 阅读 · 5 评论 -
c 点滴——————
(1)在stm32里面int是有符号数32位,在dsp里面int是16位。(2)stm32里面,有符号数8位,范围是-128----127,在二进制的存储里面,最高位位是符号位,127存的是0111 1111 在加1就是1000 0000 ,十进制是-128.所以-1就是1111 1111;问题, u8(无符号数8位,0---255), 1-254=????结果也存在u8里面答...原创 2017-11-10 19:27:10 · 902 阅读 · 0 评论 -
一阶惯性低通滤波器
一阶惯性滤波传递函数为 采用后向差分离散化可得其中Tsam是采样周期,将z函数写成差分递推式(1)浮点型//k为时间常数,是采样周期的k倍。Target_Value被滤波的值。*temp_IQ_fifter是滤波后的值。void Fifter_P...原创 2019-09-07 10:01:32 · 18143 阅读 · 0 评论 -
printf按8进制、16进制输出
printf()8进制、16进制输出格式控制: int num = 0x9; /*输出4位8进制的num*/ printf("%04o/n",num); /*输出2位16进制的num*/ printf("%02X",num); 结果: 0011 09原创 2014-07-27 09:07:54 · 858 阅读 · 0 评论