缓冲区操作 和 字符串操作 标淮库程序, 全部改写成 可重入 类型 !
* 缓冲区操作 和 字符串操作 标淮库程序, 全部改写成 可重入 类型 !* ( 注: strtok 函数除外), 但增加了 strtok_s 函数(可重入),
用以代替 strtok 函数。
* 可轻松应用于 OS系统, 适用于所有 MCS-51系列。
* 不用担心 C51标准库函数, 由于不可重入的原因, 引起系统崩溃死机。
* 使用时, 外挂 STRING_51.LIB 库, 以及用 STRING2.H 头文件,
替换原标准 STRING.H 头文件, 即可。
所含函数文件例表, 除 strtok 函数之外, 其他函数都是可重入的 !
#pragma SAVE
#pragma REGPARMS
extern char *strcat (char *s1, char *s2);
extern char *strncat (char *s1, char *s2, int n);
extern char strcmp (char *s1, char *s2); // (char *R0R4R5, char *R1R2R3)
extern char strncmp (char *s1, char *s2, int n);
extern char *strcpy (char *s1, char *s2); // (char *R0R4R5, char *R1R2R3); *s2-->*s1
extern char *strncpy (char *s1, char *s2, int n);
extern int strlen (char *);
extern char *strchr (const char *s, char c); // (const char *R1R2R3, char R5)
extern int strpos (const char *s, char c); // (const char *R1R2R3, char R5)
extern char *strrchr (const char *s, char c); // (const char *R1R2R3, char R5)
extern int strrpos (const char *s, char c); // (const char *R1R2R3, char R5)
extern int strspn (char *s, char *set);
extern int strcspn (char *s, char *set);
extern char *strpbrk (char *s, char *set);
extern char *strrpbrk (char *s, char *set);
extern char *strstr(char *s, char *sub);
extern char *strtok(char *str, const char *set);
extern char *strtok_s(char *str, const char *set, char **str_p); // 新增
extern char memcmp (void *s1, void *s2, int n); // (void *R0R4R5, void *R1R2R3, int R6R7)
extern void *memcpy (void *s1, void *s2, int n); // (void *R0R4R5, void *R1R2R3, int R6R7); *s2-->*s1
extern void *memchr (void *s, char val, int n); // (void *R1R2R3, char R5, int R6R7)
extern void *memccpy (void *s1, void *s2, char val, int n); // *s2-->*s1
extern void *memmove (void *s1, void *s2, int n);// (void *R0R4R5, void *R1R2R3, int R6R7); *s2-->*s1
extern void *memset(void *s, char val, int n); // (void *R1R2R3, char R5, int R6R7)
#pragma RESTORE
啊 这个用开模拟栈么{:4_194:} _奶咖君_ 发表于 2024-3-8 16:17
啊 这个用开模拟栈么
不用开模拟栈, 属干仿内嵌函数类型, 所有数据参数 仅使用
R0-R7,A,B,PSW,DPTR 13个专用寄存器,
部分程序 局部变量 不够用,
自行 动态占用 SP堆栈(完全等同于 标准可重入函数 方式), 退出时自行销毁.
属于 100% 类 标准可重入函数.
老许 威武 !已广为宣传 技术大拿{:4_174:} LAOXU 发表于 2024-3-8 16:28
不用开模拟栈, 属干仿内嵌函数类型, 所有数据参数 仅使用
R0-R7,A,B,PSW,DPTR 13个专用寄存器,
部分程序 ...
老许 威武,,牛的{:4_168:} 由于 51构架的特殊性, Keil C51(包括 IAR , SDCC 等所有的 C51编译器) , 最大的短板,
就是利用 固定内存(非堆栈, 动态内存)传递参数变量, 以达到减少代码长度.
笔者改写的 缓冲区操作 和 字符串操作 标淮库程序, 全部 使用 R0-R7 传递参数变量,
函数体内如需使用局部变量, 仅占用少量堆栈, 是彻头彻尾的 标准 可重入 函数 类型 !
{:4_250:}{:4_250:} 顶楼主!
页:
[1]