Arduino AVR微型和微型

Arduino AVR微型和微型,arduino,avr,Arduino,Avr,我正在做一个项目,我正试图阻止使用任何Arduino库,因为这些库都带有额外的“垃圾”,速度不如核心AVR库快 我的问题是,是否有一个AVR库包含Arduino的millis()和micros()函数的等价物,或者我是否需要编写自己的库 我意识到我可以使用计时器和ISR增加一个值来跟踪滴答声,但如果没有必要,为什么要重新发明轮子呢。您可以使用avr gcc安装附带的util/delays.h,它将为您提供与毫秒和微秒相同的功能 唯一需要记住的是将参数F_CPU设置为正确的CPU频率。您可以使用a

我正在做一个项目,我正试图阻止使用任何Arduino库,因为这些库都带有额外的“垃圾”,速度不如核心AVR库快

我的问题是,是否有一个AVR库包含Arduino的millis()和micros()函数的等价物,或者我是否需要编写自己的库


我意识到我可以使用计时器和ISR增加一个值来跟踪滴答声,但如果没有必要,为什么要重新发明轮子呢。

您可以使用avr gcc安装附带的util/delays.h,它将为您提供与毫秒和微秒相同的功能
唯一需要记住的是将参数F_CPU设置为正确的CPU频率。

您可以使用avr gcc安装附带的util/delays.h,它将为您提供与毫秒和微秒相同的功能 唯一要记住的是将参数F_CPU设置为正确的CPU频率

我的问题是,是否有一个AVR库包含Arduino的millis()和micros()函数的等价物,或者我是否需要编写自己的库

由于从启动开始计算时间需要在计时器ISR(如您所指出的)中配置和使用带有自定义代码的计时器,因此在AVR库中找不到类似的函数。
这些库的设计目的并不是像占用特定资源的计时器那样占用一般资源。这是一个很好的例子,Arduino库可能提供了一个简单的开始,但当您需要对LIB内部使用的资源进行更多的控制时(比如使用timer0进行自定义),它就会崩溃

我的问题是,是否有一个AVR库包含Arduino的millis()和micros()函数的等价物,或者我是否需要编写自己的库

由于从启动开始计算时间需要在计时器ISR(如您所指出的)中配置和使用带有自定义代码的计时器,因此在AVR库中找不到类似的函数。

这些库的设计目的并不是像占用特定资源的计时器那样占用一般资源。这是一个很好的例子,Arduino库可能提供了一个简单的开始,但当您需要对LIB内部使用的资源进行更多的控制时(例如使用timer0进行自定义)。请查看我的alibvr库

系统时钟部分差不多完成了

它使用C++函数(主要是模板)来计算编译期间的值。因此,您需要使用avr-g++

有关更多信息,请参阅


即使您不打算使用该库,clock.h文件也将帮助您编写自己的系统时钟。

请查看我的alibvr库

系统时钟部分差不多完成了

它使用C++函数(主要是模板)来计算编译期间的值。因此,您需要使用avr-g++

有关更多信息,请参阅


即使您不打算使用该库,clock.h文件也将帮助您编写自己的系统时钟。

avr/delay.h提供了
\u delay\u ms
\u delay\u us
,但是从开始到现在没有任何时间是以毫秒或微秒为单位的(如
millis()
micros()
do)。delay()(阻塞)的功能与millis()相反(非阻塞),而不是相同;
avr/delay.h
提供了
\u delay\u ms
\u delay\u us
,但是从开始到现在没有以毫秒或微秒为单位的时间(如
millis()
micros()
do)。delay()(阻塞)是与millis()相反的功能(非阻塞),而不是相同的;)简言之,不……;-)这是有意义的,因为所有的计时器都可以用于您指出的自定义内容。我还有一个问题是,如果试图为计时器获取一个非常小的分辨率,结果不会阻塞其余的代码,因为ISR基本上总是会触发,有没有办法防止这种情况发生?定义“非常小的分辨率”;)但是,是的,一般来说,最好将解决方案限制在您真正需要的范围内。ISR阻塞主执行路径,甚至可能阻塞其他中断(取决于中断优先级)。这就是ISR应包含尽可能少的指令的原因。在10MHz时,每微秒的执行速度大约有10条指令。因此,以1U分辨率为目标是不现实的。如果ISR保持较短,则10us定时器间隔听起来合理。每个计时器滴答声会有100条指令,ISR可能会丢失20-30条指令。如果有其他需要注意的中断(USART、TWI或其他计时器),我不会超过100us甚至1ms以确保安全。因此,简言之,不…;-)这是有意义的,因为所有的计时器都可以用于您指出的自定义内容。我还有一个问题是,如果试图为计时器获取一个非常小的分辨率,结果不会阻塞其余的代码,因为ISR基本上总是会触发,有没有办法防止这种情况发生?定义“非常小的分辨率”;)但是,是的,一般来说,最好将解决方案限制在您真正需要的范围内。ISR阻塞主执行路径,甚至可能阻塞其他中断(取决于中断优先级)。这就是ISR应包含尽可能少的指令的原因。在10MHz时,每微秒的执行速度大约有10条指令。因此,以1U分辨率为目标是不现实的。如果ISR保持较短,则10us定时器间隔听起来合理。如果有其他需要注意的中断(USART、TWI或其他计时器),我不会超过100us甚至1ms以确保安全。