文档库 最新最全的文档下载
当前位置:文档库 › 第三步+GPIO(库函数)操作

第三步+GPIO(库函数)操作

第三步+GPIO(库函数)操作
第三步+GPIO(库函数)操作

C语言标准库函数查询手册

C语言标准库函数 郝培林整理

A abort 功能异常终止程序 头文件stdlib.h 语法 void abort(void); abs 功能整数的绝对值 头文件stdlib.h 语法 int abs(int j); 返回值整数 j 的绝对值。如果不能表示 j 的绝对值,那么函数的行为是未定义的。absread 功能读磁盘绝对扇区函数 头文件 dos.h 语法 int absread(int drive,int num,int sectnum,void *buf) 返回值 0:成功;-1:失败。 abswrite 功能写磁盘绝对扇区函数 头文件 dos.h 语法 int abswrite(int drive,int nsects,int lsect,void *buffer) drive=0(A 驱动器)、1(B 驱动器)、 nsects=要写的扇区数(最多 64K 个); lsect=起始逻辑 扇区号; buffer=要写入数据的内存起始地址。 返回值 0:成功;-1:失败。 acos 功能 反余弦头文件 math.h 语法 math.hdouble acos(double x);

返回值 x 的反余弦值。返回值的范围在 0 到π之间。如果 x 的值不在?1 到+1 之间,那么就会发生定义域错误。 asctime 功能把日期和时间转换成 ASCII 码 头文件 time.h 语法 char *asctime(const struct tm *timeptr); 返回值指向以空字符结尾的字符串的指针。 asin 功能反正弦 头文件 math.h 语法 double asin(double x); 返回值 x 的反正弦值。返回值的范围在-π/2 到π/2 之间。如果 x 的值不在-1 到+1 之间, 那么 就会发生定义域错误。 assert 功能诊断表达式的真值 头文件 assert.h 语法 void assert(int expression); atan 功能反正切 头文件 math.h 语法 double atan(double x); 返回值x 的反正切值。返回值的范围在?π/2 到π/2 之间。 atexit 功能在程序退出处注册要调用的函数头文件 stdlib.h 语法

C语言标准库函数2012

常用C语言标准库函数2012 C语言编译系统提供了众多的预定义库函数和宏。用户在编写程序时,可以直接调用这些库函数和宏。这里选择了初学者常用的一些库函数,简单介绍了各函数的用法和所在的头文件。 1.测试函数 Isalnum 原型:int isalnum(int c) 功能:测试参数c是否为字母或数字:是则返回非零;否则返回零 头文件:ctype.h Isapha 原型:int isapha(int c) 功能:测试参数c是否为字母:是则返回非零;否则返回零 头文件:ctype.h Isascii 原型:int isascii(int c) 功能:测试参数c是否为ASCII码(0x00~0x7F):是则返回非零;否则返回零 头文件:ctype.h Iscntrl 原型:int iscntrl(int c) 功能:测试参数c是否为控制字符(0x00~0x1F、0x7F):是则返回非零;否则返回零 头文件:ctype.h Isdigit 原型:int isdigit(int c) 功能:测试参数c是否为数字:是则返回非零;否则返回零。 头文件:ctype.h Isgraph 原型:int isgraph(int c) 功能:测试参数c是否为可打印字符(0x21~0x7E):是则返回非零;否则返回零头文件:ctype.h Islower 原型:int islower(int c) 功能:测试参数c是否为小写字母:是则返回非零;否则返回零 头文件:ctype.h

Isprint 原型:int isprint(int c) 功能:测试参数c是否为可打印字符(含空格符0x20~0x7E):是则返回非零;否则返回零 头文件:ctype.h Ispunct 原型:int ispunct(int c) 功能:测试参数c是否为标点符号:是则返回非零;否则返回零 头文件:ctype.h Isupper 原型:int isupper(inr c) 功能:测试参数c是否为大写字母:是则返回非零;否则返回零 Isxdigit 原型:int isxdigit(int c) 功能:测试参数c是否为十六进制数:是则返回非零;否则返回零 2.数学函数 abs 原型:int abs(int i) 功能:返回整数型参数i的绝对值 头文件:stdlib.h,math.h acos 原型:double acos(double x) 功能:返回双精度参数x的反余弦三角函数值 头文件:math.h asin 原型:double asin(double x) 功能:返回双精度参数x的反正弦三角函数值 头文件:math.h atan 原型:double atan(double x) 功能:返回双精度参数的反正切三角函数值 头文件:math.h atan2 原型:double atan2(double y,double x) 功能:返回双精度参数y和x由式y/x所计算的反正切三角函数值 头文件:math.h cabs

库文件,头文件,库函数,系统调用函数

头文件和库文件的区别:头文件中有函数的申明,库文件实现函数的定义。比如,printf函数。使用时应包括stdio.h,打开stdio.h你只能看到,printf这个函数的申明,却看不到printf具体是怎么实现的,而函数的实现在相应的C库中。而库 文件一般是以二进制形式而不是C源文件形式提供给用户使用的。程序中包括 了stdio.h这个头文件。链接器就能根据头件中的信息找到printf这个函数的实 现并链接进这个程序代码段里。总结起来就是,库文件通过头文件向外导出接口。用户通过头文件找到库文件中函数实现的代码从而把这段代码链接到用户程序 中去。库文件:是C已经封装好的一些基本算法功能。你只需引入相应库文件 的头文件,调用库文件的函数接口就可以实现相应的功能。 头文件:你调用库文件里的函数就的调入相应的头文件.而且头文件你也可以自 己定义。 简单说,头文件可以是库文件,也可以自己定义 库函数和系统调用函数的区别: 所谓系统调用,就是内核提供的、功能十分强大的一系列的函数。这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,一般都通过门(gate)陷入(trap)实现。系统调用是用户程序和内核交互的接口。 人们在长期编程中发现使用系统调用有个重大的缺点,那就程序的移植性,比如说:linux系统提供的系统调用的函数和windows就不一样,2者不单单是实现 的方式不同,提供给用户的函数名,参数都不同,这个可以理解。因此一个实现好的程序,利用了linux的系统调用譬如说wait4函数,那么他在windows上编译是通不过的。于是人们想了个办法,就是封装了windows和linux系统调用,给大家一个统一的函数(我习惯叫它接口),那么这样程序的移植性问题就解决了。 所以可以这么认为库函数是对系统调用的封装(不是所有的库函数都是),为的是解决一些公共的问题和提供统一的系统调用的接口,他和系统调用的优缺点就是:系统调用速度是明显要快于库函数(并不一定全部是,但绝大部分是),但系统调用缺乏移植性。库函数速度要慢,但解决了移植问题。这些在开发过程中要根据自己的实际情况来决定使用那一个。 整个系统调用的过程可以总结如下: 1.执行用户程序(如:fork) 2.根据glibc中的函数实现,取得系统调用号并执行int $0x80产生中断。3.进行地址空间的转换和堆栈的切换,执行SAVE_ALL。(进行内核模式)4.进行中断处理,根据系统调用表调用内核函数。 5.执行内核函数。 6.执行RESTORE_ALL并返回用户模式

STC库函数使用参考

STC库函数使用参考 版本:V10 日期:2013-5-28 编写:STC公司 基本说明: 本函数库适用于STC/IAP15F/L2K61S2系列MCU,具体的MCU的资源,请参考用户手册中对应的章节。 使用以下的库函数,都必须包含“config.h”文件,里面包含了“STC15Fxxxx.H”头文件。 在自己的工程中,加入库函数文件,并且在使用库函数的C文件中,包含对应的头文件。 这个文档仅仅解释各个库函数里的参数定义和取值,具体的应用例子,请参考例程。 相关功能的具体描述,请参考用户手册。 函数目录 IO口初始化函数:GPIO_Inilize ---------------------------------------------------------------------------------------- 2 定时器初始化函数:Timer_Inilize ------------------------------------------------------------------------------------ 3 ADC初始化函数:ADC_Inilize ------------------------------------------------------------------------------------------ 4 ADC电源控制函数:ADC_PowerControl ----------------------------------------------------------------------------- 6 ADC查询转换函数:Get_ADC10bitResult --------------------------------------------------------------------------- 6 通用软件延时函数:delay_ms ----------------------------------------------------------------------------------------- 7 串口初始化函数:USART_Configuration ---------------------------------------------------------------------------- 7 串口1写缓冲函数:TX1_write2buff -------------------------------------------------------------------------------- 9 串口2写缓冲函数:TX2_write2buff ------------------------------------------------------------------------------ 10 串口1写数据块函数:PrintString1 -------------------------------------------------------------------------------- 10 串口2写数据块函数:PrintString2 -------------------------------------------------------------------------------- 10 模拟串口字节发送函数:TxSend ----------------------------------------------------------------------------------- 10 模拟串口写数据块函数:PrintString ------------------------------------------------------------------------------- 11 EEPROM多字节读函数:EEPROM_read_n ----------------------------------------------------------------------- 11 EEPROM多字节写函数:EEPROM_write_n ---------------------------------------------------------------------- 11 EEPROM扇区擦除函数:EEPROM_SectorErase ---------------------------------------------------------------- 12 PCA初始化函数:PCA_Init ------------------------------------------------------------------------------------------- 12 PWM更新占空比函数:UpdatePwm ----------------------------------------------------------------------------- 15 外中断初始化函数:Ext_Inilize ------------------------------------------------------------------------------------- 15

STM32函数库的调用

STM32函数库的调用 一·时钟配置.c void RCC_Configuration(void) { /*将外设RCC寄存器重设为缺省值*/ RCC_DeInit(); /*设置外部高速晶振(HSE)*/ RCC_HSEConfig(RCC_HSE_ON); //RCC_HSE_ON——HSE晶振打开(ON) /*等待HSE起振*/ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) //SUCCESS:HSE晶振稳定且就绪 { /*设置AHB时钟(HCLK)*/ RCC_HCLKConfig(RCC_SYSCLK_Div1); //RCC_SYSCLK_Div1——AHB时钟= 系统时钟 /* 设置高速AHB时钟(PCLK2)*/ RCC_PCLK2Config(RCC_HCLK_Div1); //RCC_HCLK_Div1——APB2时钟= HCLK /*设置低速AHB时钟(PCLK1)*/ RCC_PCLK1Config(RCC_HCLK_Div2); //RCC_HCLK_Div2——APB1时钟= HCLK / 2 /*设置FLASH存储器延时时钟周期数*/ FLASH_SetLatency(FLASH_Latency_2); //FLASH_Latency_2??2延时周期 /*选择FLASH预取指缓存的模式*/ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // 预取指缓存使能/*设置PLL时钟源及倍频系数*/ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); // PLL的输入时钟= HSE时钟频率;RCC_PLLMul_9——PLL输入时钟x 9 /*使能PLL */ RCC_PLLCmd(ENABLE); /*检查指定的RCC标志位(PLL准备好标志)设置与否*/ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } /*设置系统时钟(SYSCLK)*/ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//RCC_SYSCLKSource_PLLCLK ——选择PLL作为系统时钟 /* PLL返回用作系统时钟的时钟源*/ while(RCC_GetSYSCLKSource() != 0x08) //0x08:PLL作为系统时钟 {

linux系统调用和库函数调用的区别.doc

Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions) 0可以参考紅inux程序设计》(英文原版为《Beginning Linux Programming^ ,作者是 Neil Matthew 和 Richard Stones)第三章:Working with fi 1 eSo系统调用实际上就是指最底层的一个调用,在1 inux程序设计里面就是底层调用的意思。面向的是硬件。而库函数调用则面向的是应用开发的,相当于应用程序的api,采用这样的方式有很多种原因,第一:双缓冲技术的实现。第二,可移植性。第三,底层调用本身的一些性能方面的缺陷。第四:让api也可以有了级别和专门的工作面向。 1、系统调用 系统调用提供的函数如open, close, read, write, ioctl等,需包含头文件unistd. ho 以 write 为例:其函数原型为 size t write (int fd, const void *buf, size_t nbytes),其操作对象为文件描述符或文件句柄fd(file descriptor), 要想写一个文件,必须先以可写权限用open系统调用打开一个文件,获得所打开文件的fd,例如fd=open(\7dev/video\〃, 0_RDWR) o fd 是一个整型值,每新打开一个文件,所获得的fd为当前最大fd加lo Linux系统默认分配了3个文件描述符值:0 —standard input, 1 — standard output, 2 —standard error0 系统调用通常用于底层文件访问(low-level file access),例如在驱动程序中对设备文件的直接访问。 系统调用是操作系统相关的,因此一般没有跨操作系统的可移植性。 系统调用发生在内核空间,因此如果在用户空间的一般应用程序中使用系统调用来进行文件操作,会有用户空间到内核空间切换的开销。事实上,即使在用户空间使用库函数来对文件进行操作,因为文件总是存在于存储介质上,因此不管是读写操作,都是对硬件(存储器)的操作,都必然会引起系统调用。也就是说,库函数对文件的操作实际上是通过系统调用來实现的。例如C库函数fwritcO 就是通过肌、ite()系统调用来实现的。 这样的话,使用库函数也有系统调用的开销,为什么不直接使用系统调用呢?这是因为,读写文件通常是大量的数据(这种大量是相对于底层驱动的系统调用所实现的数据操作单位而言),这时,使用库函数就可以大大减少系统调用的次数。这一结果又缘于缓冲区技术。在用户空间和内核空间,对文件操作都使用了缓冲区,例如用fwrite写文件,都是先将内容写到用户空间缓冲区,当用户空间缓冲区满或者写操作结束时,才将用户缓冲区的内容写到内核缓冲区,同样的道理,当内核缓冲区满或写结束时才将内核缓冲区内容写到文件对应的硬件媒介。 2、库函数调用标准C库函数提供的文件操作函数如fopen, fread, fwrite, fclose, fflush, fseek等,需包含头文件stdio. h o以fwrite为例,其函数原型为size t

Labview调用C语言、Matlab脚本节点以及库函数节点的方法

Labview调用C语言、Matlab脚本节点以及 库函数节点的方法 Labview调用C语言的方法 CIN(Code InterfaceNode)节点是LabVIEW中用来调用C/C++代码的功能节点。它与动态链接库的不同之处在于,它能够将代码集成在VI中作为单独的一个VI发布,而不需要多余的文件。另外,它提供了函数入口,它可以根据用户提供的输入输出自动生成函数入口代码,从而使用户专心关注代码功能而不用为函数声明、定义等语句费心。因此CIN节点与DLL在不同的场合有不同的优势,但是CIN节点的使用比调用DLL要复杂得多。 由于LabVIEW中数据的存储格式遵循了C语言中数据的存储格式,并且二者完全相同,所以用户可以向CIN传递任意复合的数据结构。另外,CIN比图形化语言可获得更高的执行效率。 注意:对于完全相同的代码,CIN和DLL的执行效率是完全一样的。 如果要使用CIN节点,你必须安装了C编译器。在Windows下,CIN支持以下编译器: Microsoft Visual C++ Symantec C CIN节点必须调用.lsb文件。.lsb文件是通过外部编译器与CINTools工具结合将C代码编译生成的。 下面我们通过一个Step byStep的实例来看如何在LabVIEW中实现CIN节点调用,本例所用外部编译器为MicrosoftVisual C++6.0。 第一步:在程序框图放置一个空CIN节点; CIN节点位于FunctionsPalette的Connectivity->Libraries& Executables->Code InterfaceNode。 第二步:创建CIN节点的输入输出端口;

调用DSP库函数实现FFT的运算

通信与信息工程学院 2014 /2015 学年第一学期 软件设计实验报告 模块名称调用DSP库函数实现FFT的运算专业通信工程 学生班级 学生学号 学生姓名 指导教师

报告内容 一、实验目的 (1)了解FFT 的原理; (2)了解在DSP 中FFT 的设计及编程方法; (3)了解在DSP 中CFFT 的设计及编程方法; (4)熟悉对FFT 的调试方法; (5)了解用窗函数法设计FFT 快速傅里叶的原理和方法; (6)熟悉FFT 快速傅里叶特性; (7)了解各种窗函数对快速傅里叶特性的影响。 二、实验原理 1,,1,0,][][1 0-==∑-=N m W k x m X km N N k 1,,1,0,][1 ][1 -== --=∑ N k W m X N k x km N N m 如果利用上式直接计算DFT,对于每一个固定的m,需要计算N 次复数乘法,N-1次加法,对于N 个不同的m,共需计算N 的2次方复数乘法,N*(N-1)次复数加法.显然,随着N 的增加,运算量将急剧增加, 快速傅里叶算法有效提高计算速度,利用FFT 算法只需(N/2)logN 次运算。 FFT 并不是一种新的变换,它是离散傅立叶变换(DFT )的一种快速算法。由于我们在计算DFT 时一次复数乘法需用四次实数乘法和二次实数加法;一次复数加法则需二次实数加法。每运算一个X (k )需要4N 次复数乘法及2N+2(N-1)=2(2N-1)次实数加法。所以整个DFT 运算总共需要4N^2 次实数乘法和N*2(2N-1)=2N(2N-1)次实数加法。如此一来,计算时乘法次数和加法次数都是和

调用DSP库函数实现FFT的运算..

通信与信息工程学院 2013 /2014 学年第二学期 软件设计实验报告 模块名称调用DSP库函数实现FFT的运算专业通信工程 学生班级B110107 学生学号 学生姓名 指导教师王奇

报告内容 一、实验目的 (1)了解FFT 的原理; (2)了解在DSP 中FFT 的设计及编程方法; (3)了解在DSP 中CFFT 的设计及编程方法; (4)熟悉对FFT 的调试方法; (5)了解用窗函数法设计FFT 快速傅里叶的原理和方法; (6)熟悉FFT 快速傅里叶特性; (7)了解各种窗函数对快速傅里叶特性的影响。 二、实验原理 1,,1,0,][][1 0-==∑-=N m W k x m X km N N k 1,,1,0,][1 ][1 -== --=∑ N k W m X N k x km N N m 如果利用上式直接计算DFT,对于每一个固定的m,需要计算N 次复数乘法,N-1次加法,对于N 个不同的m,共需计算N 的2次方复数乘法,N*(N-1)次复数加法.显然,随着N 的增加,运算量将急剧增加, 快速傅里叶算法有效提高计算速度,利用FFT 算法只需(N/2)logN 次运算。 FFT 并不是一种新的变换,它是离散傅立叶变换(DFT )的一种快速算法。由于我们在计算DFT 时一次复数乘法需用四次实数乘法和二次实数加法;一次复数加法则需二次实数加法。每运算一个X (k )需要4N 次复数乘法及2N+2(N-1)=2(2N-1)次实数加法。所以整个DFT 运算总共需要4N^2 次实数乘法和N*2(2N-1)=2N(2N-1)次实数加法。如此一来,计算时乘法次数和加法次数都是和

linux系统调用和库函数调用的区别

linux系统调用和库函数调用的区别 Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library func tions)。可以参考《Linux程序设计》(英文原版为《Beginning Linux Programming》,作者是Neil Matthew和Richard Stones)第三章: Working with files。系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思。面向的是硬件。而库函数调用则面向的是应用开发的,相当于应用程序的api,采用这样的方式有很多种原因,第一:双缓冲技术的实现。第二,可移植性。第三,底层调用本身的一些性能方面的缺陷。第四:让api也可以有了级别和专门的工作面向。 1、系统调用 系统调用提供的函数如open, close, read, write, ioctl等,需包含头文件unistd.h。以write为例:其函数原型为size_t write(int fd, const void *buf, size_t nbytes),其操作对象为文件描述符或文件句柄fd(file descriptor),要想写一个文件,必须先以可写权限用open系统调用打开一个文件,获得所打开文件的fd,例如fd=open(\"/dev/v ideo\", O_RDWR)。fd是一个整型值,每新打开一个文件,所获得的fd为当前最大fd 加1。Linux系统默认分配了3个文件描述符值:0-standard input,1-standard o utput,2-standard error。 系统调用通常用于底层文件访问(low-level file access),例如在驱动程序中对设备文件的直接访问。 系统调用是操作系统相关的,因此一般没有跨操作系统的可移植性。 系统调用发生在内核空间,因此如果在用户空间的一般应用程序中使用系统调用来进行文件操作,会有用户空间到内核空间切换的开销。事实上,即使在用户空间使用库函数来对文件进行操作,因为文件总是存在于存储介质上,因此不管是读写操作,都是对硬件(存储器)的操作,都必然会引起系统调用。也就是说,库函数对文件的操作实际上是通过系统调用来实现的。例如C库函数fwrite()就是通过write()系统调用来实现的。 这样的话,使用库函数也有系统调用的开销,为什么不直接使用系统调用呢?这是因为,读写文件通常是大量的数据(这种大量是相对于底层驱动的系统调用所实现的数据操作单位而言),这时,使用库函数就可以大大减少系统调用的次数。这一结果又缘于缓冲区技术。在用户空间和内核空间,对文件操作都使用了缓冲区,例如用fwrite写文件,都是先将内容写到用户空间缓冲区,当用户空间缓冲区满或者写操作结束时,才将用户缓冲区的内容写到内核缓冲区,同样的道理,当内核缓冲区满或写结束时才将内核缓冲区内容写到文件对应的硬件媒介。 2、库函数调用 标准C库函数提供的文件操作函数如fopen, fread, fwrite, fclose, fflush, fseek等,需包含头文件stdio.h。以fwrite为例,其函数原型为size_t fwrite(const void *buff

GPIO库函数调用

/****************************************************************************** *名称:STM32GPIO库函数介绍及其使用 *时间:2012/11/22 *作者:祝浩 ******************************************************************************* /****************************************************************************** GPIO_DeInit(GPIO_TypeDef* GPIOx); 功能:将外设GPIOx 寄存器重设为缺省值 参数:GPIOx:x 可以是A,B ,C ,D 或者E,来选择GPIO外设 例子:GPIO_DeInit(GPIOA); ******************************************************************************* /****************************************************************************** GPIO_AFIODeInit(void); 功能:将复用功能(重映射事件控制和EXTI设置)重设为缺省值 参数:无 例子:GPIO_AFIODeInit(); ******************************************************************************* /****************************************************************************** GPIO_Init(GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct); 功能:根据GPIO_InitStruct 中指定的参数初始化外设GPIOx 寄存器 参数:GPIOx:x 可以是A,B ,C ,D 或者E,来选择GPIO外设 GPIO_InitStruct:指向结构GPIO_InitTypeDef 的指针,包含了外设GPIO的配置信息例子:GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOA TING; GPIO_Init(GPIOA, &GPIO_InitStructure); //Configure all the GPIOA in Input Floating mode ******************************************************************************* /****************************************************************************** GPIO_StructInit(GPIO_Ini tTypeDef* GPIO_InitStruct); 功能:把GPIO_InitStruct 中的每一个参数按缺省值填入 参数:GPIO_InitStruct:指向结构GPIO_InitTypeDef 的指针,待初始化 例子:GPIO_InitTypeDef GPIO_InitStructure; GPIO_StructInit(&GPIO_InitStructure); //Initialize the GPIO Init Structure parameters ******************************************************************************* /****************************************************************************** GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,u16 GPIO_Pin); 功能:读取指定端口管脚的输入 参数:GPIOx :x 可以是A,B ,C ,D 或者E,来选择GPIO外设 GPIO_Pin:待读取的端口位 返回值:输入端口管脚值

MSP430怎样建立和调用自己的library库函数

资源来自网络: 前段时间有博友问到在IAR环境下隐藏原始代码开放功能性接口的方法,其实就是库(Library)的概念了,算是一种半开源的方式吧,估计应该是公司里常用到一种开发模式吧,不同分工团队部门之间最后的整合都是通过标准的接口来实现(当然限于大公司了,不是那种一个人负责一个完整项目的小公司),也就是一个分工团队接触不到另一个团队的核心代码,这种模式一定程度上避免了完整产品设计技术的外泄,不过每个团队的人掌握的技术也就有所局限了,于个人水平的提升不利,当然如果你做的足够专就另当别论了,呵呵,总之自己马上要找工作了,也在大公司和小公司之间矛盾的徘徊,哎~ 前奏啰嗦了一些东西,明天就带队去参加智能车比赛了,今天临走前更新一篇也算是对那位博友有个交代,希望有所帮助,哈哈,不多废话了,下面进入正题(分为生成库文件和调用库文件两部分): 生成库文件: 1.首先建立好自己的库工程,注意库里不用加main函数,因为库不是线程(不用来执行),而是要被调用的,所以在库工程里写好自己的底层驱动代码封装到C文件里(可以多个C)就OK了,这里我就自己随便添加了个底层驱动(ADC)的C文件建立了BSP_Lib 工程作为例子说说生成和调用Kinetis库,如下图:

2.如上图,把自己想要添加的驱动文件都添加到工程里面,不过要保证编译需要的相关头文件和相关C文件(如上图的CPU文件组和Header文件组),另外需要添加BSP_Lib.h 文件,在里面把库里的函数声明成外部函数和添加上调用时需要的一些参数,本例子的BSP_Lib.h文件内容如下图(目前只针对ADC): 3.准备工作完毕,然后下面需要对改工程做相应的设置,右键工程名设置如下:

STM32 V3.5固件库函数调用说明(中文版)

目录 目录 (1) 1.变量定义 (4) 2.GPIO相关函数 (5) 2.1.函数GPIO_Init (5) 2.2.函数GPIO_SetBits (6) 2.3.函数GPIO_ReadInputDataBit (7) 2.4.函数GPIO_ReadOutputDataBit (7) 2.5.函数GPIO_PinRemapConfig (8) 2.6.函数GPIO_Write (9) 2.7.函数GPIO_ReadInputData (10) 3.RCC相关函数 (10) 3.1.函数RCC_APB2PeriphClockCmd (10) 3.2.函数RCC_APB1PeriphClockCmd (11) 3.3.函数RCC_AHBPeriphClockCmd (12) 3.4.函数RCC_ADCCLKConfig (12) 4.SysTick函数——SysTick_Config (12) 5.NVIC相关函数 (14) 5.1.函数NVIC_Init (14) 5.2.函数NVIC_PriorityGroupConfig (17) 5.3.函数NVIC_SetPriority (17) 6.EXTI相关函数 (17) 6.1.函数GPIO_EXTILineConfig (17) 6.2.函数EXIT_Init (18) 6.3.函数EXTI_GetITStatus (19) 6.4.函数EXTI_ClearITPendingBit (19) https://www.wendangku.net/doc/8b17418280.html,ART相关函数 (20)

7.2.函数USART_Cmd (21) 7.3.函数USART_SendData (21) 7.4.函数USART_ReceiveData (22) 7.5.函数USART_GetFlagStatus (22) 8.6.函数USART_ITConfig (23) 8.7.函数USART_GetITStatus (23) 8.8.函数USART_ClearFlag (24) 8.9.函数USART_ClearITPendingBit (24) 8.TIM相关函数 (24) 8.1.函数TIM_TimeBaseInit (24) 8.2.函数TIM_DeInit (26) 8.3.函数TIM_ITConfig (26) 8.4.函数TIM_Cmd (27) 8.5.函数TIM_GetITStatus (28) 8.6.函数TIM_ClearITPendingBit (28) 8.7.函数TIM_ARRPreloadConfig (29) 8.8.函数TIM_OCxInit (29) 8.9.函数TIM_OCxPreloadConfig (30) 9.I2C相关函数 (31) 9.1.函数I2C_Init (31) 9.2.函数I2C_CheckEvent (32) 9.3.函数I2C_GetFlagStatus (33) 9.4.函数I2C_GenerateSTART (34) 9.5.函数I2C_ SendData (35) 9.6.函数I2C_ ReceiveData (35) 9.7.函数I2C_ Send7bitAddress (35) 9.8.函数I2C_ GenerateSTOP (36)

C# API调用教程

用Visual C#调用Windows API函数 Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩展,一般也都提供了调用WindowsAPI函数的接口,也就是说具备调用动态连接库的能力。Visual C#和其它开发工具一样也能够调用动态链接库的API函数。.NET框架本身提供了这样一种服务,允许受管辖的代码调用动态链接库中实现的非受管辖函数,包括操作系统提供的Windows API函数。它能够定位和调用输出函数,根据需要,组织其各个参数(整型、字符串类型、数组、和结构等等)跨越互操作边界。 下面以C#为例简单介绍调用API的基本过程: 动态链接库函数的声明 动态链接库函数使用前必须声明,相对于VB,C#函数声明显得更加罗嗦,前者通过 Api Viewer粘贴以后,可以直接使用,而后者则需要对参数作些额外的变化工作。 动态链接库函数声明部分一般由下列两部分组成,一是函数名或索引号,二是动态链接库的文件名。 譬如,你想调用User32.DLL中的MessageBox函数,我们必须指明函数的名字MessageBoxA 或MessageBoxW,以及库名字User32.dll,我们知道Win32 API对每一个涉及字符串和字符的函数一般都存在两个版本,单字节字符的ANSI版本和双字节字符的UNICODE版本。 下面是一个调用API函数的例子: [DllImport("KERNEL32.DLL", EntryPoint="MoveFileW", SetLastError=true, CharSet=CharSet.Unicode, ExactSpelling=true, CallingConvention=CallingConvention.StdCall)] public static extern bool MoveFile(String src, String dst); 其中入口点EntryPoint标识函数在动态链接库的入口位置,在一个受管辖的工程中,目标函数的原始名字和序号入口点不仅标识一个跨越互操作界限的函数。而且,你还可以把这个入口点映射为一个不同的名字,也就是对函数进行重命名。重命名可以给调用函数带来种种便利,通过重命名,一方面我们不用为函数的大小写伤透脑筋,同时它也可以保证与已有的命名规则保持一致,允许带有不同参数类型的函数共存,更重要的是它简化了对ANSI和Unicode版本的调用。CharSet用于标识函数调用所采用的是Unicode或是ANSI版本,ExactSpelling=false将告诉编译器,让编译器决定使用Unicode或者是Ansi版本。其它的参数请参考MSDN在线帮助. 在C#中,你可以在EntryPoint域通过名字和序号声明一个动态链接库函数,如果在方法定义中使用的函数名与DLL入口点相同,你不需要在EntryPoint域显示声明函数。否则,你必须使用下列属性格式指示一个名字和序号。 [DllImport("dllname", EntryPoint="Functionname")] [DllImport("dllname", EntryPoint="#123")] 值得注意的是,你必须在数字序号前加“#” 下面是一个用MsgBox替换MessageBox名字的例子:

ANSI C标准函数库(中文)

标准库ANSI C包含了15个头文件 Assert.h Float.h Math.h Stdarg.h Stdlib.h Ctype.h Limits.h Setjmp.h Stddef.h String.h Errno.h Locale.h Signal.h Stdio.h Time.h 标准库本身并不是C语言的构成部分,它是为开发C程序而制定的一种开发环境。absread()读磁盘绝对扇区函数 原形:int absread(int drive,int num,int sectnum,void *buf) 功能:从drive指定的驱动器磁盘上,sectnum指定的逻辑扇区号开始读取(通过DOS中断0x25读取)num个(最多64K个)扇区的内容,储存于buf所指的缓冲区中。 参数:drive=0对应A盘,drive=1对应B盘。 返回值:0:成功;-1:失败。 头文件:dos.h abswrite()写磁盘绝对扇区函数 原形:int abswrite(int drive,int nsects,int lsect,void *buffer) drive=0(A驱动器)、1(B驱动器)、 nsects=要写的扇区数(最多64K个); lsect=起始逻辑扇区号; buffer=要写入数据的内存起始地址。 功能:将指定内容写入(调用DOS中断0x26)磁盘上的指定扇区,即使写入的地方是磁盘的逻辑结构、文件、FAT表和目录结构所在的扇区,也照常进行。 返回值:0:成功;-1:失败。 头文件:dos.h atof()将字符串转换成浮点数的函数 原形:double atof(const char *s) 功能:把s所指向的字符串转换成double类型。 s格式为:符号数字.数字E符号数字 返回值:字符串的转换值。 头文件:math.h、stdlib.h

(完整版)Keilc51常用库函数汇总参考

Keil c51函数参考 一、数学函数 (1)cabs 原型:char cabs(char val); 功能:cabs函数取val的绝对值。 参数:一字节数val。 返回:cabs返回val的绝对值。 (2)abs 原型:Int abs(int val); 功能:求绝对值 参数:val整型数 返回:val的绝对值 (3)labs 原型:long labs(long val); 功能:labs函数确定长整数val的绝对值。 返回:val的绝对值。 (4)fabs 原型:float fabs(float val); 功能:fabs函数确定浮点数val的绝对值。 参数: 返回:fabs返回val的绝对值。 (5)sqrt 原型:float sprt(float x); 功能:sqrt函数计算x的平方根。 返回:sqrt函数返回x的正平方根。 (6)exp 原型:float exp(float x); 功能:exp函数计算自然对数中e的x次幂。e≈2.71828182845953581496,是无限循环小数。返回:e x的值。 (7)log 原型:float log(float val); 功能:log函数计算浮点数val的自然对数。自然对数基数为e。 返回:val的浮点自然对数。 (8)log10 原型:float log10(float val); 功能:logl0函数计算浮点数val的常用对数。常用对数为基数10。

返回:val的浮点常用对数。 (9)sin 原型:float sin(float x); 功能:sin函数计算浮点数x的正弦值。 参数:x必须在-65535~65535之间,或产生一个NaN错误。 返回:sin函数返回x的正弦。 (10)cos 原型:float cos(float x); 功能:COS函数计算浮点数X的余弦。 参数:X的值必须在-65535~65535之间,或产生一个NaN错误。返回:COS函数返回X的余弦。 (11)tan 原型:float tan(float x); 功能:tan函数计算浮点数x的正切值。 参数:x必须在-65535~65535之间,或错误值NaN。 返回:tan函数返回x的正切。 (12)asin 原型:float asin(float x); 功能:求反正弦 参数:浮点数x,取值必须在-1~1之间。 返回:X的反正弦,值在-π/2~π/2之间。 (13)acos 原型:float acos(float x); 功能:求反余弦 参数:浮点数x,取值必须在-1~1之间。 返回:x的反余弦,值在0~π之间。 (14)atan 原型:float atan(float x); 功能:求反正切 参数:浮点数x,取值必须在-1~1之间。 返回:X的反正切,值在-π/2~π/2之间。 (15)sinh 原型:float sinh(float x); 功能:sinh函数计算浮点数X的双曲正弦。 参数:x必须在-65535~65535之间,或产生一个NaN错误。 返回:sinh函数返回x的双曲正弦。

相关文档
相关文档 最新文档