静/动态库 IIC(arm) day58
十七:动态库和静态库
库:一堆可执行二进制文件的集合,由若干个.o文件归并生成
一:静态(链接)库:libxxx.a
生成一个独立的可执行程序(运行时仅需要一个文件即可) 使用方便 不需要安装
文件比较大
多个程序使用同一个静态库时,每个程序独立链接
库文件有改动则需要编译整个工程
静态库生成:
gcc -c fun.c -o fun.o //生成.o文件
ar -rcv libfun.a fun.o //生成静态库
gcc main.c libfun.a //链接静态库
二:动态(链接)库:libxxx.so
编译时动态链接,可执行程序不会复制库文件,仅会在内部记录库文件 的位置等链接信息。
程序执行时,需要可执行文件及库文件同时存在,并且可执行文件能找 到库文件。
使用:
1.将libxxx.so拷贝到系统PATH目录下
或者
2.将libxxx.so所在的 路径添加到系统PATH
生成的可执行程序较小
多个程序使用同一个库,库只需要存在一份
库文件有改动时,只需要单独更新库即可(不需要全更改),可执行程序不需要重新编译
动态库生成:
gcc -fPIC -shared fun.c fun1.c -o libfun.so 程序编译:
gcc main.c -lfun //libfun.so必须存在于系统PATH下
gcc main.c -lfun -L ./ //指定链接路径
gcc mian.c libfun.so -o dmain //链接到main.c文件
./dmain //运行库
十三:IIC
一:基础概念
SDA和SCL线都为双向的。
配制IIC总线:可以编程ICCON寄存器中的4位预分频器值来控制串行时(SCL)的频率。IIC总线接口地址被储存在IC总线地址(IICADD)寄存器中。(默认IIC总线接口地址包含一个未知值。)
二:代码
#include <s3c2440.h>
#include "iic.h"void iic_init(void)
{//ÅäÖÃGPE14¡¢15Òý½Å¹¦ÄÜΪIICSCL¡¢SDAGPECON &= ~(0xf << 28);GPECON |= (0xa << 28);IICCON = (1 << 7) | (1 << 6) | (1 << 5);
}unsigned char iic_write(unsigned char addr, unsigned char * data, unsigned char len)
{unsigned char i = 0;IICDS = addr;IICSTAT = 0xf0;IICCON &= ~(1 << 4);while(!(IICCON & (1 << 4)));for(i = 0; i < len; i++){IICDS = data[i]; IICCON &= ~(1 << 4);while(!(IICCON & (1 << 4)));}IICSTAT = 0xd0;IICCON &= ~(1 << 4);delay(100);
}
#if 0
unsigned char iic_read(unsigned char addr, unsigned char * data, unsigned char len)
{unsigned char i = 0;IICDS = addr;IICSTAT = 0xb0;IICCON &= ~(1 << 4);while(!(IICCON & (1 << 4)));for(i = 0; i < len; i++){data[i] = IICDS; IICCON &= ~(1 << 4);while(!(IICCON & (1 << 4)));}IICSTAT = 0x90;IICCON &= ~(1 << 4);delay(100);
}
#endif
unsigned char iic_read(unsigned char addr,unsigned char * data,unsigned char len)
{unsigned char i = 0;IICDS = addr; //addr write IICDSIICSTAT |= (0xb0 << 0); //0xf0 write IICSTAT// send IICDS datewhile(!(IICCON &(1 << 4)));for(i = 0;i<len;i++){data[i] = IICDS;IICCON &= ~(1 << 4);while(!(IICCON & (1 << 4)));} IICSTAT |= (0x90 << 0);IICCON &= ~(1 << 4);delay(100);
}