c语言编程一些小技巧
2017-06-09 14:06
232 查看
这编博客是为了记录自己编程的心路历程,固件编程一直是自己的短板
,身为一个硬件工程师偏偏经常接到写固件的活,其实我的内心是拒绝的
。但是,这想让自己的短板变成平板并不冲突~所以该好好学就好好用功
。总结的只是一些这段时间下来的心得~不喜请轻喷~有什么问题欢迎指出
。
(以下是基于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后面东西会改变
,身为一个硬件工程师偏偏经常接到写固件的活,其实我的内心是拒绝的
。但是,这想让自己的短板变成平板并不冲突~所以该好好学就好好用功
。总结的只是一些这段时间下来的心得~不喜请轻喷~有什么问题欢迎指出
。
(以下是基于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后面东西会改变
相关文章推荐
- VB编程的一些小技巧 - 关于vb字符串操作的优化
- VB编程的一些小技巧 - 创建无关硬件的555或565格式的16bit的surface
- 编程人员阅读代码的一些小技巧分享
- MVC中Code First编程一些小技巧
- 您知道Linux下C语言编程的一些注意事项吗_教育中国
- 编程的一些语言
- 一些编程上的小技巧
- 一些编程小技巧----不断更新中
- 在基于 Java 语言的编程中我们经常遇到的一些问题
- cocos2d-x编程的一些小技巧
- VB编程的一些小技巧 - ado如何连接oracle
- ABAP--ABAP语言对象编程的一些样例代码连接收集
- ABAP--ABAP语言对象编程的一些样例代码连接收集
- 一些编程小技巧----不断更新中
- ABAP--ABAP语言对象编程的一些样例代码连接收集
- VB编程的一些小技巧 - vb直接访问dx7屏幕内存的例子
- ABAP--ABAP语言对象编程的一些样例代码连接收集
- Flex 编程的一些小技巧。不定期增加
- Flex 编程的一些小技巧。不定期增加
- 一些编程上的小技巧