c语言编程一些小技巧
来源:互联网 发布:java学完能做什么工作 编辑:程序博客网 时间:2024/04/25 13:00
这编博客是为了记录自己编程的心路历程,固件编程一直是自己的短板,身为一个硬件工程师偏偏经常接到写固件的活,其实我的内心是拒绝的。但是,这想让自己的短板变成平板并不冲突~所以该好好学就好好用功。总结的只是一些这段时间下来的心得~不喜请轻喷~有什么问题欢迎指出。
(以下是基于stm32的编程)
1:
编程中调用其它文件(如.c)中的参数,全局变量会产生相关性,实时改变某一参数,通过调用函数的办法实现。
//******Main.c********//
Task(){
Set_ip_addr();
}
//******Eth_ip.c*******//
Void set_ip_addr(){
Local_ip_address.m_addr[3] = ReadDip();
}
2:
不同位数变量之间的相互转换,注意存储顺序。
u16 word = 0xabcd1234
u8 *p = (u8 *) &word;
p[0] p[1] p[2] p[3]存储顺序应该是 34 12 cd ab
3:
队列的使用方法之一:
中断函数:参数或数据写入队列->任务函数:从队列取出参数,调用解析数据函数
上面两个函数可写在一个.c函数中。
写义一个struct就是用自己想要的方式来解析一组数据
4:
数组命令匹配调用参数或者函数:
接收命令,调用对应函数
typedef int (*DebugCmdHANDLE) (const char *); //const只分配一次内存, DebugCmdHANDLE为函数指针
//函数占一段连续的内存区域 函数名被转换为首地址与数组类似
//即函数名可以传递给函数指针
//指针函数: int *DebugCmdHANDLE (const char *) 返回值为int指针的函数
typedef struct tg_debug_cmd_handle_tab{
char *m_pCmdStr;
DebugCmdHANDLE m_Handel;
char *m_pHelpStr;
} CmdHandleTAB
static const CmdHandleTAB handle_tab[]= //命令表
{
{“ledon”, ledon_handle, 0},
{“ledoff”, ledoff_handle, 0}
};
const CmdHandleTAB *cmd_handle_tab(void)//命令表要传递出去比较(handle_tab[]),用函数传递相当对外接口,命令表一个文件中,命令表匹配另一个文件
{
Return handle_tab;
}
Int ledon_handle(const char *pData) //调用的函数
{
//
}
//在另一个文件中读取命令表
cmd_line_init(cmd_handle_tab(), cmd_handle_tab_size());
5:
调用原始函数是一个很好的办法,比如atoi();直接将char *所代表的123,转换成了int 的123!
6:
//const 请作为常量使用,并且肯定是个常量 通过指针可修改参数
//volatile 请不要做不靠谱的优化,这值很可能改变掉
//const与volatile并不矛盾
//static
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
7:
int b =1; int *p=&b; int **a=&p;
int **a中a表示的是指针的地址,也就是地址(指针所指对向的地址)的地址(指针的地址);*a则表示前一个地址,a则表示后一个地址。
用到int **的情况是需要对指针的地址进行加减操作并且赋值的。
8:
键盘上的ENTER在ASCII中表示 0x0d、13、某些语言中为’\r’。
在linux系统中ENTER用’\n’表示,Windows系统中用”\r\n”两个字符表示。
9:
两个指针间或数组数据的互传
unsigned char pWifiData[20];
memcpy(pWifiData, &pBuf[1], sizeof(pWifiData)); //区别pWifiData = &pBuf[1];这个只传递了一个地址过去,地址+1后面东西会改变
- c语言编程一些小技巧
- C语言编程小技巧
- c语言编程小技巧:c语言小技巧:枚举
- C语言的一些小技巧 小知识
- c 语言小技巧
- C语言小技巧
- c语言小技巧
- c 语言小技巧
- C语言小技巧
- 这些天学到的一些C语言小技巧
- c编程小技巧
- AVR C语言编程的小技巧-IO口置位
- 编程小技巧:类C语言的__FILE__ 和 __LINE__
- 编程小技巧:类C语言的__FILE__ 和 __LINE__
- C语言编程技巧
- C语言编程技巧
- C语言编程技巧
- C语言编程技巧
- qt configure 时提示【file to open is a directory】
- 第二章:初探Spring Cloud Eureka+Hystrix+Ribbon+Feign微服务搭建
- ActionScript3.0自定义鼠标指针
- svg.js使用中的一个bug
- 整理linux图形化磁盘管理工具使用
- c语言编程一些小技巧
- 使用VS进行远程调试
- 快播CEO认罪_成人网站对技术的要求有多高?
- 理解Maven中的SNAPSHOT版本和正式版本
- sql 语句查询今天、昨天、近7天、近30天、一个月内、上一月 数据
- Qt之JSON生成与解析
- Android Studio 编译Library的jar包与aar包
- radio再次点击后取消
- C语言中的结构体