PICC库函数

QQ172082520

int buf[10], cow[10], i; buf[0] = 1; buf[2] = 4; cow[0] = 1; cow[2] = 5; buf[1] = 3; cow[1] = 3;

i = memcmp(buf, cow, 3*sizeof(int)); if(i < 0)

printf(\else if(i > 0)

printf(\else

printf(\}

4. 参 阅

strncpy(), strncmp(), strchr(), memset(), memchr() 5. 返回值 当内存块变量s1分别小于、等于或大于内存块s2变量时, 函数返回值分别为-1,0或1。

3.32 MEMCPY函数

1. 提 要

#include

/* 低级或中级系列单片机 */

void * memcpy (void * d, const void * s, size_t n) /* 高级系列单片机 */

far void * memcpy (far void * d, const void * s, size_t n) 2. 描 述 memcpy()函数的功能是, 将指针s指向的、内存开始的 n 个字节复制到指针d指向的、内存开始的单元。复制重叠区的结果不确定。与strcpy()函数不同的是,memcpy()复制的是一定数量的字节,而不是复制所有结束符前的数据。 3. 例 程

#include #include void

main (void) {

char buf[80];

memset(buf, 0, sizeof buf);

60

QQ172082520

memcpy(buf, \printf(\\\n\}

4. 参 阅

strncpy(), strncmp(), strchr(), memset() 5. 返回值 memcpy()函数返回值为函数的第一个参数。

3.33 MEMMOVE函数

1. 提 要

#include

/* 低级或中级系列单片机 */

void * memmove (void * s1, const void * s2, size_t n) /* 高级系列单片机 */

far void * memmove (far void * s1, const void * s2, size_t n) 2. 描 述 memmove()函数与memcpy()函数相似,但memmove()函数能对重叠区进行准确的复制。也就是说,它可以适当向前或向后,正确地从一个块复制到另一个块,并将它覆盖。 3. 参 阅

strncpy(), strncmp(), strchr(), memcpy() 4. 返回值 memmove()函数同样返回它的第一个参数。

3.34 MEMSET函数

1. 提 要

#include

/* 低级和中级系列的单片机 */ void * memset (void * s, int c, size_t n)

/* 高级系列单片机 */

far void * memset (far void * s, int c, size_t n) 2. 描 述 memset()函数将字节c存储到指针s指向的,内存开始的n个内存字节。 3. 例 程

#include #include void

main (void) {

char abuf[20];

strcpy(abuf, \

61

QQ172082520

memset(abuf, ’x’, 5);

printf(\\\n\}

4. 参 阅

strncpy(), strncmp(), strchr(), memcpy(), memchr()

3.35 MODF函数

1. 提 要

#include

double modf (double value, double * iptr) 2. 描 述 modf()函数将参数value分为整数和小数2部分,每部分都和value的符号相同。例如,-3.17将被分为整数部分(-3)和小数部分(-0.17)。其中整数部分以双精度数据类型存储在指针iptr指向的单元中。 3. 例 程

#include #include void

main (void) {

double i_val, f_val;

f_val = modf( -3.17, &i_val); }

4. 返回值 函数返回值为value的带符号小数部分。

3.36 PERSIST_CHECK, PERSIST_VALIDATE函数

1. 提 要

#include

int persist_check (int flag) void persist_validate (void) 2. 描 述

persist_check()函数要用到非可变(non-volatile)的RAM变量,这些变量在定义时被加上限定词persistent。在测试NVRAM(非可变RAM)区域时,先调用persist_validate()函数,并用到一个存储在隐藏变量中的虚拟数据,且由persist_validate()函数计算得到一个测试结果。如果虚拟数据和测试结果都正确,则返回值为真(非零)。如果都不正确,则返回零。在这种情况下,函数返回零并且重新检测NVRAM区域(通过调用persist_validate()函数)。函数被执行的条件是标志变量变量不为0。persist_validate()函数应在每次转换为永久变量之后调用。它将重新建立虚拟数据和计算测试结果。 3. 例 程

62

QQ172082520

#include #include

persistent long reset_count; void

main (void) {

if(!persist_check(1))

printf(\else

printf(\reset_count++; /* update count */ persist_validate(); /* and checksum */ for(;;)

continue; /* sleep until next reset */ }

4. 返回值 如果NVRAM区域无效, 则返回值为假(零);如果NVRAM区域有效, 则返回值为真(非零)。

3.37 POW函数

1. 提 要

#include

double pow (double f, double p) 2. 描 述 pow()函数表示第一个参数f的p次幂。 3. 例 程

#include #include void

main (void) {

double f;

for(f = 1.0 ; f <= 10.0 ; f += 1.0)

printf(\}

4. 参 阅

log(), log10(), exp() 5. 返回值 返回值为 f 的 p 次幂。

63

QQ172082520

3.38 PRINTF函数

1. 提 要

#include

unsigned char printf (const char * fmt, ...) 2. 描 述 printf()函数是一个格式输出子程序,其运行的基础是标准输出(staout)。它有对应的程序形成字符缓冲区(sprintf()函数)。printf()函数以格式字符串、一系列0及其它作为参数。格式字符串都转换为一定的格式,每一规格化都用来输出变量表。

转换格式的形式为%m.nc。其中%表示格式,m表示选择的字符宽度,n表示选择的精度,c为一个字母表示规格类型。字符宽度和精度只适于中级和高级系列单片机,并且精度只对格式%s有效。

如果指针变量为十进制常数,例如格式为%*d时,则一个整型数将从表中被取出,提供给指针变量。对低级系列单片机而言,有下列转换格式: o x X u d 即分别为整型格式——八进制、十六进制、十六进制、十进制和十进制。其中d为有符号十进制数,其它为无符号。其精度值为被输出数的总的位数,也可以强制在前面加0。例如%8.4x将产生一8位十六进制数,其中前4位为0,后为十六进制数。X输出的十六进制数中,字母为A~F,x输出的十六进制中字母为a~f。当格式发生变化时,八进制格式前要加0,十六进制格式的前面要加0x或0X。

S 打印一个字符串——函数参数值被认为是字符型指针。最多从字符串中取n个字符打印,字符宽度为m。

C 函数参数被认为一个单字节字符并可自由打印。

任何其它有格式规定的字符将被输出。那么%%将产生一个百分号。

对中级和高级系列单片机而言,转换格式在低级系列单片机的基础上再加上: l 长整型格式——在整型格式前加上关键字母l即表示长整型变量。

f 浮点格式——总的宽度为m,小数点后的位数为n。如果n没有写出,则默认为6。如果精度为0,则小数点被省略,除非精度已预先定义。 3. 例 程

printf(\输出为’Total = 23%’ printf(\

这里size为长整型十六进制变量。注意当使用%s时,精度只对中级和高级系列单片机有效。

printf(\输出为 ’Name = a1234567’

字符变量宽度只对中级和高级系列单片机有效。 printf(\输出为 ’xx 4’ /* vprintf 例程 */ #include int

64

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4