stm32单片机的core_cm3.h库函数是干什么的啊?

stm32单片机的core_cm3.h库函数是干什么的啊?,第1张

STM32的内核是ARM CORTEX-M3,这个core_cm3h包含的是一些内核相关的函数和宏定义,例如核内寄存器定义、部分核内外设的地址等等,其对应的是core_cm3c文件。初学可以不管他,只要把它包含进工程里就行了,这里都是非常底层的函数,上层的一些函数直接调用它们了。如果对CORTEX-M3内核有兴趣或者基础较高,想深入了解这些函数,可以仔细研读一下。。

希望对你有帮助~~

系统调用楼上说的比较详细了,那我说下库函数和系统调用的区别:

人们在长期编程中发现使用系统调用有个重大的缺点,那就程序的移植性,比如说:linux系统提供的系统调用的函数和windows就不一样,2者不单单是实现的方式不同,提供给用户的函数名,参数都不同,这个可以理解。因此一个实现好的程序,利用了linux的系统调用譬如说wait4函数,那么他在windows上编译是通不过的。于是人们想了个办法,就是封装了windows和linux系统调用,给大家一个统一的函数(我习惯叫它接口),那么这样程序的移植性问题就解决了。

所以可以这么认为库函数是对系统调用的封装(不是所有的库函数都是),为的是解决一些公共的问题和提供统一的系统调用的接口,他和系统调用的优缺点就是:系统调用速度是明显要快于库函数(并不一定全部是,但绝大部分是),但系统调用缺乏移植性。库函数速度要慢,但解决了移植问题。这些在开发过程中要根据自己的实际情况来决定使用那一个。

   (除非您只是想玩玩而已)、需要学习的东西多。()、window环境编程;()、linux环境编程;进行真正的linux内核原码刨析()、最后进行内核移植,并能编写在linux *** 作系统环境下运行的针对具体硬件的驱动程序

注意看这个文件

sysdeps/unix/sysv/linux/syscallslist

里面记录着系统调用的名字和一些属性,具体我也没有研究过,不懂。

再看select的实现,很让人惊讶,一旦使用,结果就是“报错“。

int

__select (nfds, readfds, writefds, exceptfds, timeout)

int nfds;

fd_set readfds;

fd_set writefds;

fd_set exceptfds;

struct timeval timeout;

{

__set_errno (ENOSYS);

return -1;

}

libc_hidden_def (__select)

stub_warning (select)

weak_alias (__select, select)

这是因为glibc并没有实现系统调用,而是调用系统调用,

更进一步,连调用系统调用都没有一个个实现,而是使用了通用的办法,

理由很简单,所有的系统调用在linux内核头文件里都能找到,

所有的系统调用参数类型就那么几种,参数个数也是有限的,

因此没有必要针对所有的系统调用一一封装,

于是就有了这个list文件,自动生成调用系统调用的函数,

如果生成失败,也就是你看到的“报错”。

符号是有强弱的,当自动生成成功的时候,“报错”的弱符号就被忽略了。

当你在glibc中找到一个系统调用的封装源码,是以下原因,

1 编译的目标系统不支持这个系统调用,所以自己用另一种方式实现了。

2 这个系统调用无法使用通用的自动生成方式生成,用特化的方式覆盖。

3 针对这个系统调用做了特别的优化。

4 其它可能的原因。

具体可以留意

SYSCALL, PSEUDO, DO_CALL, INLINE_CALL 等名字

这两个文件是重点所在

sysdeps/unix/i386/sysdeph

sysdeps/unix/i386/sysdepS

要搞清楚具体的自动生成过程,恐怕得研究glibc自身的编译过程了

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12188112.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存