在C中编程Arduino,中断向量是否有效?

时间:2014-11-23 08:41:15

标签: c assembly arduino avr

我让Arduino玩......但是Arduino语言和IDE对我来说就像个孩子的玩具。

所以我想使用常规C来编程。

据我了解,引导加载程序位于内存的某个位置,复位向量中有rjmp,完成后,将控制权返回到已安装的“草图”。

问题是:我可以安全地在“草图”中做些什么?

这是我目前对使用Arduino Bootloader的AVR的概念,但它可能是错误的:

.CSEG
.ORG 0000
rjmp bootloader
; ??? Interrupt vectors here
; ??? Interrupt vectors here
; Maybe it all goes to bootloader and it then forwards
;   it to handlers in the "sketch"?

bootloader:
; ??? some magic tricks here 
rjmp sketch

sketch:
; "Sketch" code
; I want my own interrupt vectors, too!
end:
rjmp end;

我的意思是,显然Bootloader使用AVR的其他部分来实现它的功能,因此它将拥有它自己的中断处理程序等。如果我在我的程序中使用它们,它们是否会按预期工作?

那么,使用C(甚至是汇编程序)编写Arduino的问题是什么?

2 个答案:

答案 0 :(得分:0)

它会起作用。 Arduino只是一个图书馆。如果您查看源代码,setup()loop()功能会插入int main(); setup()就在无限while(true)循环之前。

答案 1 :(得分:0)

支持引导加载程序的AVR设备有两个中断向量集,一个用于引导加载程序(在引导加载程序部分的开头),另一个用于常规固件(在地址0处)。 BOOTRST熔丝确定默认使用哪个复位向量,IVSEL中的MCUCR(或器件中的等效值)确定当前有效的复位向量。

请注意,锁定位可以限制可以使用哪些集合,并且始终可以查看数据表以获取完整的详细信息。