嵌入式编程时那些让你事半功倍的函数
1. void *memset(void *s, int var, unsigned int num);
memset函数可以把s指针指向地址后的num个字节全部替换成变量var,我们常常用于对某段内存空间进行清0操作,比如:
memset(uart2_buffer,0,sizeof(uart2_buffer));
比如我们定义的数组空间uart2_buffer为串口接收到的数据组,上面的用法则可以把数组进行清0 ,以让串口可以接收新的数据。
2. __disable_irq()函数
在全局范围内屏蔽某一个中断(irq num),num为中断号。这个函数很有用,我们常常会在系统中定义一些中断,但是有时候在进行中间函数操作的时候又不希望这个中断去打断该函数的进行,那就可以使用这个函数。如果系统中有多个中断时,就需要定义具体屏蔽的中断号了。它还有其他的家族函数,如__enable_irq()使能某一中断;local_disable_irq()用于屏蔽系统所有中断;—_request_irq()申请某一中断。
3. strstr(const char *str1, const char *str2)函数
这个函数在嵌入式用于判断str2字符串是否在str字符串中出现过(其实该函数是返回的tr2第一次在str1中的位置),但是我经常用来做判断语句使用:
if(strstr((const char *)(&uart2_buffer[2]),AT_BACK_DISCONNECTION))
在串口接收数据时判断是否含有某一段字符串报文。
4. strcpy(char * strDest,const char * strSrc)
从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。这个函数在实际编程时也是很有用的,比如我在串口中接收到了一串报文,而我又要去解析其内容,但是我们串口接收数组要进行下一次的报文接收,那么我们就可以用该函数把其拷贝至一个中间变量中:
strcpy(temp_buffer, uart2_buffer)
5. strcat(char *dest,char *src)
这个函数用于拼接两段字符串,其作用是把src所指字符串添加到dest结尾处。这个函数我常用于AT指令的拼接:
strcat (AT_WSTA_HEAD,GetWifiSSID())
比如上面这种用法,AT_WSTA_HEAD是我们AT指令头部,通过GetWifiSSID()获得wifi 的SSID后将其与AT指令的报文头拼接,最后形成的新的字符串,通过串口再发送出去。
6. memcpy(void *destin, void *source, unsigned int n)
这个函数用于将源source所指的内存地址的起始位置开始拷贝n个字节到目标destin所指的内存地址的起始位置中,这个函数有点类似于strcpy,但是比strcpy多了一个参数n,因此在功能上比strcpy更加灵活。
7. strcmp(const char *s1,const char * s2)
这个函数用于比较两个字符串是否相同,如果相同则返回0,否则返回非0,我们可以用这个函数去判断是否接收到的字符串报文和约定的一致。
除了以上这些函数,string.h头文件还有很多函数供我们调用,以上总结的函数都是我平常用的比较多的,熟练使用这些函数,可以提高我们的编程效率。
本文为原创内容,谢绝转载!