进行代码调试的时候,发现一个问题。官方instaspin_foc的lab05b中,初始化时,HAL_setupPie中的PIE_setDefaultIntVectorTable。VectorTable是从INT1开始初始化的。但是按我的理解,这里不是FlashCallbackVar吗?那FlashCallbackVar就指定了回调,而且回调的是PIE_illegalIsr,这样在进行Flash_API操作的时候不会有问题吗?能否帮忙解答一下。多谢。
Susan Yang:
PIE_setDefaultIntVectorTable表条目在启动时初始化为PIE_illegalIsr。因此,请确保为所有已启用的中断附加自己的处理程序。
另外需要在调用FlashAPI例程之前禁用中断,或确保将ISR定位/加载到RAM中。
,
user5032391:
查看一些C2000的例程,通常PIE VectorTable中的Reset、INT1和INT2是不会做初始化指向的,是从INT3开始指向。
我今天做了一些测试。当我给INT1、INT2指向如下PIE_RESERVED之后(与instaspin_foc中的PIE_illegalIsr相同),进行Flash擦除会导致CPU reset。当我让INT1和INT2指向NULL之后,没有了回调,才能正常执行Flash擦除动作。所以我的问题是instaspin_foc里面初始化pie_vector_table的时候为什么给INT1、INT2指定到PIE_illegalIsr,会不会导致Flash擦除出问题。
,
user5032391:
所以意思是这里做了INT1、INT2的初始化,并且指向了PIE_illegalIsr。后面真正使用Flash_API的回调的时候,需要重新指向自己的回调?否则就会跑到PIE_illegalIsr里面。那不是很麻烦,为什么干脆不做INT1、INT2的初始化,需要使用Flash_API回调的时候再由开发者自行添加,不需要回调的时候一直保持NULL就行了。这样只是进行Flash擦写也不会误回调到PIE_illegalIsr。
,
Susan Yang:
在您给出的代码中的注释中是有说明的
//// Do not write over first 3 32-bit locations (these locations are// initialized by Boot ROM with boot variables)//
,
user5032391:
你们提供的例程里面是初始化了的。