工具/软件:TI-RTOS
当我在 main ()中创建了以下类对象时,
我发出了运行时错误、当我对其进行调试时、我看到对象被破坏
Hwi ISR 堆栈。 我在中观察到这两个情况
内存视图、并通过将硬件断点放置到堆栈顶。为了进行双校验、我在类中放置了一个虚拟数组(stackProtectBuffer)、
我看到阵列也出现了问题。 虚拟阵列解决了我的运行时问题
问题。
类 SmConfigCls:公共 ActiveCls{
公共:
InterCoreCls InterCoreObj;
SystemManagerCls systemManagerObj;
SensorCls SensorsObj;
特派团计算机特派团计算机目标;
维护性维护性维护性对象
BitCls bitObj;
ViewCls viewObj;
char stackProtectBuffer[1024];
专用:
void initRelations();
公共:
SmConfigCls():
InterCoreObj (CoreEnu_systemManager)、
ActiveCls (4)
{
memset (stackProtectBuffer、0、sizeof (stackProtectBuffer));
initRelations();
}
void* Run();
};
int main (int cmdCount、char*命令[]){
SmConfigCls SM;
BIOS_start();/*不返回*/
返回(0);
}
我认为内核中可能有一个错误。 请查看以下各行
在系列/c64p/Hwi.c 中
Hwi_module->isrStack = Hwi_getIsrStackAddress()-8;
HWI_MODULE->taskSP =(Char *)-1;//*上执行的信号
/* ISR 堆栈*/
这里是同一个文件中的 Hwi_getIsrStackAddress 函数。
char * Hwi_getIsrStackAddress()
{
_extern __far__ char _stack[8];
_extern __far__ uint8 __TI_STACK_SIZE;
uint32 isrStack;
isrStack =(uint32)_stack;
isrStack +=(uint32)&_TI_STACK_SIZE;
isrStack = 0x1;
isrStack &=~0x7; /*与长字对齐*/
返回((Char *) isrStack);
}
根据我的理解、Hwi 堆栈被放置在 Program.stack 上、我认为上述代码中可能存在错误?
我的设备是6678、BIOS 版本是6.46.0.23。 C6000编译器版本为8.1.1、但我也尝试了7.4.11。