我让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的问题是什么?
答案 0 :(得分:0)
它会起作用。 Arduino只是一个图书馆。如果您查看源代码,setup()
和loop()
功能会插入int main()
; setup()
就在无限while(true)
循环之前。
答案 1 :(得分:0)
支持引导加载程序的AVR设备有两个中断向量集,一个用于引导加载程序(在引导加载程序部分的开头),另一个用于常规固件(在地址0处)。 BOOTRST熔丝确定默认使用哪个复位向量,IVSEL
中的MCUCR
(或器件中的等效值)确定当前有效的复位向量。
请注意,锁定位可以限制可以使用哪些集合,并且始终可以查看数据表以获取完整的详细信息。