你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
任风吹吹 发表于 2016-8-11 11:52 标准库是标准的C语言思想,即提供外设接口,应用调用对应的接口就可以了,而HAL向面向对象的思想靠拢,学过 ...
主要是资源不够,对于库不熟悉,需要详细的库的说明文档。
标准库是标准的C语言思想,即提供外设接口,应用调用对应的接口就可以了,而HAL向面向对象的思想靠拢,学过C++的人更容易理解,HAL更抽象化,也提供接口,但基本上接口的第一个参数都是指向设备句柄,这个设备句柄指的就是这个外设控制块的指针,懂C++的人都比较好理解,倒是那些一直习惯了C语言这种流程式语言的人一时在思想上不容易转化,有时候老是会问,为什么这么设计?这样设计有什么好处?好处当然是有,应该是更加抽象化了,掌握到关键时可以不必过多了解底层的工作过程也可以写应用。缺点是底层增加了处理的复杂度,可能生成的代码量和执行效率相对来说可能会下降些,在对于小容量如F0系列时,这个可能比较敏感,但若是F4以上的话基本可以忽略,这个就可以自己看着办了。这里不妨说一下,百闻不如一试,到底增加了多少代码量,自己动手去比较一下不就知道了,说不准压根就没增加多少这都是可能的,万事不是绝对的。
此外,还有最最重要的一点就是:
ST官方在极力推广HAL库,目前已经出了STM32CubeMx软件,可以从图形化直接生成初始化代码,进一步让应用与底层分离,这让用户在不必过多了解外设细节的情况下使用外设成为现实。
以上,萝卜白菜,各有所爱,大家看着办!
HAL库是将数据整合了下,变成句柄,但数据和功能还是分离的,数据与功能的关联点是在接口函数的第一个参数一般为句柄,然后再就是中断回调到weak函数,用户需要用到这个回调时就自己重载这个回调函数,这个就是HAL的一般情况,但严格来说,这还不是真正的面向对象,真正的面向对象比如C++,是将数据与功能一起封装在对象内,weak就相当于虚函数,在实例化时需要重载。OOP的操作都是以对象开头的,而HAL还是以接口开始,只不过在第一个参数传入句柄数据而已,两者结果一样,但后者HAL还是数据与功能分离的,不像对象,HAL严格来说,相比原来的标准库应该算是半对象化了。
以上是个人理解,非喜勿喷!
我一般的习惯是:
先尽量 找 分中文的看,碰到 不解的地方,在参考 原著...