想当贼,先让人偷上几回
标题说的很粗俗。
但事实上正是如此。
如果你没见过别人怎么封装库,你是不会知道应该怎么封装库,才更合理的。
好,我们先以一些简单的例子为例说明。
说到库,我们大多数人接触到的首先就是 C标准库。
但这个库过于复杂。不是我们能应付的。
我上传过 C标准库 的一本著作,而我自己也没看多少。实在太艰深。
我不敢轻言评论它。
我们以我们接触的一些简单的库为例子。
首先,第一个是 st的库。
我说过很多次,搞单片机的,基本上大多数人都不会不知道st的这个库,并且很可能像我一样,最初的编程风格受其深刻影响。
然而,这个库的质量确实不高。
我仅举其中一例。
在stm8s的 时钟模块 stm8s_clock.c里。
有一个可以设置 HSI(内部高频时钟)的分频比的函数。
- void CLK_HSIPrescalerConfig(CLK_Prescaler_TypeDef HSIPrescaler)
- {
- /* check the parameters */
- assert_param(IS_CLK_HSIPRESCALER_OK(HSIPrescaler));
- /* Clear High speed internal clock prescaler */
- CLK->CKDIVR &= (uint8_t)(~CLK_CKDIVR_HSIDIV);
- /* Set High speed internal clock prescaler */
- CLK->CKDIVR |= (uint8_t)HSIPrescaler;
- }
这里简单介绍一下stm8s的时钟系统,以及这个 CLKDIVR寄存器。
和很多新MCU一样,stm8s的时钟比较先进,因而略显复杂。
首先它的时钟分内部外部,高频低频。
这里只是对内部高频而言,我们不管这个。
另外,它的时钟是从时钟源出发,经过分频,得到 主时钟——这个主时钟的意思是,CPU本身的运作时钟以及可以给其他外设提供时钟。
而另一层复杂的地方在于,在这两个地方,又同时可以分别设置。
在一个程序里,我试图做这样一件事。
让主时钟四分频作为CPU时钟;
同时主时钟是由内部高频16M时钟四分频得到的。
因此,在我的设想里,最终我的CPU运行频率应该是1M。
然而,当我用另一个获取时钟频率的函数去查看时,我发现一件奇怪的事情。
频率是 4M。