C

fmt,… 格式化I/O输出

#ifndef __MAIN_H__
#define __MAIN_H__

#include "drivers/mss_uart/mss_uart.h"
#include <stdio.h>

char g_buf[64];
int g_buf_len;
#define uart0_printf(fmt,...)  { \
sprintf(g_buf, fmt, ##__VA_ARGS__);\
for(g_buf_len = 0; g_buf_len < 64; g_buf_len++)\
{\
	if(g_buf[g_buf_len] == '#')\
		break;\
}\
MSS_UART_polled_tx(gp_my_uart, (const uint8_t*)g_buf, g_buf_len-1);}

#endif /* __MAIN_H__ */

C/C++注释规范

整理自互联网,整合了许多大佬及公司的规范,谨记

文件头

/*****************************************************************************
 *   Copyright: zhou
 *   File name: 文件名
 * Description: 用于详细说明此程序文件完成的主要功能,与其他模块或函数的接口,输出值、取值范围、含义及参数间的控制、顺序、独立或依赖等关系
 *      Author: 作者
 *     Version: 版本
 *        Date: 完成日期
 *     History: 修改历史记录列表, 每条修改记录应包括修改日期、修改者及修改内容简述。
 *****************************************************************************/

函数注释

/*****************************************************************************
 *    Function:		// 函数名称
 * Description:		// 函数功能、性能等的描述
 *       Input:		// 输入参数说明,包括每个参数的作
 *                      // 用、取值说明及参数间关系。
 *      Output:		// 对输出参数的说明。
 *      Return:		// 函数返回值的说明
 *      Others:		// 其它说明
 *****************************************************************************/

C\C++中单冒号: 和双冒号:: 的用法

一.单冒号(:)

1. 位域结构

有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:
继续阅读

二进制补码转原码_C实现

typedef struct _Point
{
	int nx;
	int ny;
}Point;

Point originalPoint;          //原始坐标

// 数据有效位为12位
originalPoint.nx = (constell & 0xfff);          // x轴数值,为2进制补码;
originalPoint.ny = ((constell >> 12) & 0xfff);  // y轴数值,为2进制补码;
// 得到补码,将其转换为原码
if(originalPoint.nx >> 11)   //最高位是1,代表是负数的反码,计算原码
{
	originalPoint.nx -= 4096;  // 
}
if(originalPoint.ny >> 11)   //最高位是1,代表是负数的反码,计算原码
{
	originalPoint.ny -= 4096;  // 
}

C 产生伪随机数

计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。)

我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。

主要用到三个函数
rand()函数, srand()函数, time()函数
继续阅读

C字符串与数字之间的转换

字符串转“数”

atoi()

头文件:#include <stdlib.h>

atoi() 函数用来将字符串转换成整数(int),其原型为:
int atoi (const char * str);

【函数说明】atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(‘\0’)才结束转换,并将结果返回。

【返回值】返回转换后的整型数;如果 str 不能转换成 int 或者 str 为空字符串,那么将返回 0。
范例:将字符串a 与字符串b 转换成数字后相加。
继续阅读