C
oshan2012
这个作者很懒,什么都没留下…
展开
-
编写优质嵌入式C程序
前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序。感觉是有一定的参考价值,所以拿出来分享,抛砖引玉。转载请注明出处:http://blog.csdn.net/zhzht19861011/article/details/45508029摘要:本文首先分析了C语言的陷阱和缺陷,对容易犯错的地方进行归纳整理;分析了编译器语义检...转载 2019-10-18 15:12:58 · 339 阅读 · 0 评论 -
曾让我哭笑不得抓狂的C语言
1.关于+=以及-=这是两个运算符,但你否有过这种经历: int temp; char i for(i=0;i<MAX;i++) { ... temp=+2; //这里本意是每次循环,temp都自增2,但是却将'+='写成了'=+',按照这种写法,每次循环都为temp赋值正数2,与本意相差甚远 }2. 关...转载 2019-10-18 13:45:30 · 260 阅读 · 0 评论 -
((void *) 0)的含义和void的一些细节
一、在c语言中,0是一个特殊的值,它可以表示:整型数值0,空字符,逻辑假(false)。表示的东西多了,有时候不好判断。尤其是空字符和数字0之间。为了明确的指出,0是空字符的含义,用用到了:((void*)0)这个表达式。表示把0强制转换为空字符,不管以前代表的什么含义。在c的标准头文件中,就是这样定义NULL的:#define NULL ((void *) 0)...转载 2019-07-05 14:50:21 · 1128 阅读 · 0 评论 -
(void)0和0的区别及用法
(void)0相当于宏NULL,NULL本身的含义为“空”,在c语言代表“不存在、不确定”的含义。0不能简单的理解为“没有”的意思,在c语言及二进制中,0和1代表的是“一件事物的正反两个方面“,0是一种明确的状态,不是没有含义。举例:1、就像一个led灯开关一样,0代表关,1代表开。”关“是一种明确的状态,代表灯没有亮,”开“也是一种明确的状态,代表灯亮了。”空“代表什么呢?代表没有看...转载 2019-07-05 15:34:37 · 1370 阅读 · 2 评论 -
如何用C代码生成二维码
如何用C代码生成二维码 当下因微信和支付宝等手机应用广泛使用,而基于二维码/一维条码的移动支付,也借助手机移动端席卷全国,使得越来越多的人知道有“二维码”这么一种东西。 对于普通用户而来,一般只知道将自己的二维码展示给别人,别人使用软件识别这个二维码即可完成一定的功能。比如,扫码二维码付款、扫码二维码加微信好友、扫码二维码访问网页、扫码二维码下载app等等。这些个功能,在日常行为中,已...转载 2019-07-12 08:41:55 · 2655 阅读 · 0 评论 -
printf() 详解之终极无惑
编译环境:Linux 环境以 g++ 4.4.6 编译成 64 位程序的执1.printf()简介printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。函数原型:int printf ( const char * format, ... );1返回值:正确返回输出的字符总...转载 2019-07-29 15:18:31 · 589 阅读 · 0 评论 -
va_start和va_end使用详解
转载于:http://www.cnblogs.com/hanyonglu/archive/2011/05/07/2039916.html 本文主要介绍va_start和va_end的使用及原理。 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。 介绍这两个宏之前先看一下C中传递函数的参数时的用法...转载 2019-07-29 15:56:57 · 186 阅读 · 0 评论 -
c语言中的inf和nan
计算calcDistanceToHead的距离时,发现有输出-nan的打印。跟踪打印数据后,发现有sqrt数据异常的嫌疑。首先,解释一下它们的意思: INF表示“无穷大”,是infinite的缩写。 NAN表示“无效数字”,是Not a number的缩写。其次,这两个是值会在浮点运算结果未定义或者无法表示的时候出现 比如,float a =0.0f; printf("\n 1/a = %f\...转载 2019-07-27 16:16:40 · 11526 阅读 · 0 评论 -
mx25l1606e SPI FLASH驱动代码
mx25l1606e SPI FLASH驱动代码1. yc_drv_mx25l1606e.c#include <stdint.h>#include <string.h>#include "nrf_drv_spi.h"#include "yc_drv_mx25l1606e.h"#include "nrf_delay.h"#include "yc_ssd...转载 2019-09-10 13:23:30 · 886 阅读 · 0 评论 -
C语言基于printf下加入debug等级
实现方法1:#include <stdio.h> unsigned int debugflags = 1; //这里设计debug值,我默认全部输出 #define mprintf(level,args...) \do { if((debugflags & level)) printf(args);} while(0); //或者使用此方式#define ...转载 2019-07-05 11:53:16 · 748 阅读 · 0 评论 -
C中的packed
packed的涵义研究[@more@]在C中,声明结构体时可以用__attribute__ ((__packed__))来修饰,表示压缩结构体所占用的内存空间,使后一个元素紧贴钱一个元素放置。见下面的示例程序:#include #include struct upack{char s;int i;};struct packs{char s;int i;}__att...转载 2018-10-20 16:32:58 · 1476 阅读 · 1 评论 -
signed char -- char -- unsigned char
// S8ToU8.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){ signed char temp=-40; char temp2; unsigned char temp3; temp2=temp; temp3=temp; p...原创 2018-11-20 15:39:41 · 161 阅读 · 0 评论 -
乒乓球队进行比赛对手算法
// pingpang.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"/*两个乒乓球队进行比赛,各出3人.甲队为A,B,C 3人,乙队为X,Y,Z三人。已抽签决定比赛。有人向队员打听比赛名单。A说他不和X比,C说他不和 X,Z比,请用编程找出3对赛手名单*/int _tmain(int argc, _TCHAR* argv[]){ ch...转载 2018-11-22 09:35:09 · 495 阅读 · 0 评论 -
STM32Fatfs遍历文件(C语言实现)
//遍历文件//path:路径//返回值:执行结果u8 mf_scan_files(u8 * path){ FRESULT res; char *fn; /* This function is assuming non-Unicode cfg. */ char *p;#if _USE_LFN fileinfo.lfsize = _MAX_LFN ...转载 2019-03-04 14:22:42 · 845 阅读 · 0 评论 -
FATFS f_open测试
FATFS移植部份忽略123456.txt的文件内容如下:0123456789abcdefghijklmnopqrstuvwxyzres=f_open(&fnew,"0:123456.txt",FA_OPEN_EXISTING|FA_READ);//只读存在文件if (res== FR_OK)//打开成功 { printf("文件打开成功...原创 2019-03-04 15:59:09 · 809 阅读 · 0 评论 -
STM32位带操作
位带操作公式:#define BITBAND(addr, bitnum) ((addr&0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2))支持位带操作的两个内存区的范围是:0x2000_0000-0x200F_FFFF(SRAM区中的最低1MB )0x4000_0000-0x400F...转载 2019-03-18 13:52:52 · 684 阅读 · 0 评论 -
STM32F030系列实现仿位带操作
1、闲言最近开发的时候,用到了STM32F030F4P6型号的单片机,它只有20个引脚,价格非常便宜,但是功能齐全;定时器、外部中断、串口、IIC、SPI、DMA和WWDG等等,应用尽有,非常适合用来做小设备。可是有个问题是,它是Cortex-M0内核的,不像M3,M4内核一样,可以支持位带操作(就是一位一位地操作,像80C51单片机一样),这就给程序移植或者开发带来了一点点小麻烦,因此我就利...转载 2019-03-18 13:53:52 · 1557 阅读 · 1 评论 -
Modbus通信CRC16校验程序
ModBus 通信协议的CRC ( 冗余循环校验码)含2个字节, 即 16 位二进制数。CRC码由发送设备计算, 放置于所发送信息帧的尾部。接收设备再重新计算所接收信息的CRC, 比较计算得到的CRC是否与接收到的CRC相符, 如果两者不相符, 则认为数据出错。1. CRC16计算方法1) 预置 1 个 16 位的寄存器为十六进制FFFF(即全为 1) , 称此寄存器为 CRC寄存器...转载 2019-05-18 08:41:40 · 1583 阅读 · 0 评论 -
最详细易懂的CRC-16校验原理(附源程序)
from:http://www.openhw.org/chudonganjin/blog/12-08/230184_515e6.html最详细易懂的CRC-16校验原理(附源程序)1、循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为...转载 2019-05-18 08:53:26 · 6475 阅读 · 1 评论 -
CRC原理详解(附crc16校验代码)
参考链接:https://www.cnblogs.com/esestt/archive/2007/08/09/848856.htmlCyclicRedundancyCheck循环冗余检验,是基于数据计算一组效验码,用于核对数据传输过程中是否被更改或传输错误。算法原理假设数据传输过程中需要发送15位的二进制信息g=101001110100001,这串二进制码可表示为代...转载 2019-05-18 08:54:54 · 56310 阅读 · 2 评论 -
单片机全局变量的使用
我们都知道有一个规则,那就是尽量不要使用全局变量,但自己写程序,有时感觉使用全局变量很方便,而且并没感到有什么缺点。将网上查的的资料总结一下,发现全局变量的缺点主要有两个,其它具体的危害一般都是这两个的具体的显现。全局变量缺点:1.全局变量存在周周期长,将会占用更多的内存。2.全局变量多处被调用,使全局变量的值变得不确定。(1)用全局变量会增加程序的耦合性,会有一定移植麻烦,代...转载 2019-07-02 13:09:29 · 5005 阅读 · 0 评论 -
理解字节对齐
贴一篇文章,理解字节对齐一、什么是对齐,以及为什么要对齐:1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。2. 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特...转载 2018-10-20 16:30:49 · 163 阅读 · 0 评论