今天调试程序需要在串口中断里使用strcmp,在网上查找的说strcmp是可重入的。但实际测试结果确实不可重入的,测试环境是
IAR for ARM8.1
STM32l151
测试过程中主循环在不停的调用strcmp,中断里满足特定条件会调用strcmp。所以单步调试的时候就会发现当满足特定条件的时候,程序偶尔会死在调用strcmp的库函数里。
使用《C参考手册.chm》查询
所以就重写一个吧,也不用考虑算法,直接百度一下网上有大堆的代码,贴过来吧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
int Re_strcmp(char *str1, char*str2) { while (*str1 != '\0' || *str2 != '\0') { if (*str1 > *str2) { return 1; } else if (*str1 == *str2) //判断相同往后继续比较 { str1++; str2++; } else { return -1; } } if (*str1 == '\0' || *str2 == '\0') //比较到最后 { return 0; } } |
使用重写的strcmp测试之后就没有问题了。