你好,看过你的developerkit 复活计划,知道你对Developerkit很了解,冒昧请教一下,我现在用了
alios-things3.1代码的helloworld代码烧录到developkit上,用它的gcc编译器可以正常烧录使用,但是使用aos-cube创建了了keil项目后,编译完成,烧录后,老是进入HardFault,定位错误是在CPU_TASK_SWITCH()这个调用上,我查了很久都查不出问题出在那里,为何用GCC编译就没有问题呢?另外,我又下载了alios-things2.1,也是使用aos-cube创建helloworld的keil项目,编译完成,烧录后也可以正常使用,我对比了3.1和2.1的CPU_TASK_SWITCH()的代码发现没什么区别,编译的选项我也统一过,还是一样,请帮忙看看是什么问题,谢谢?
根据您提供的信息,可以初步判断问题可能是由于在使用aos-cube创建的Keil项目中,编译器和链接器选项设置不正确导致的。下面提供几个可能的解决方案供您参考:
- 检查Keil项目的编译器选项
可以检查一下Keil项目的编译器选项是否正确。例如,是否选择了正确的CPU型号、是否开启了正确的编译优化等。可以尝试将编译器选项与使用gcc编译的项目进行比较,找出差异所在。 - 检查Keil项目的链接器选项
除了编译器选项,链接器选项也可能导致问题。可以检查Keil项目的链接器选项是否正确设置了堆栈大小、堆栈起始地址、RAM和ROM的起始地址和大小等。同样,可以尝试将链接器选项与使用gcc编译的项目进行比较,找出差异所在。 - 检查alios-things3.1代码的配置文件
在使用aos-cube创建Keil项目时,会自动生成一些配置文件,例如startup文件、系统初始化文件等。可以检查一下这些配置文件是否正确生成,是否包含了正确的系统初始化代码。 - 尝试使用Keil自带的CMSIS库
Keil自带了一套CMSIS库,包含了许多与ARM Cortex-M处理器相关的API函数和头文件。可以尝试在Keil项目中使用这些库来编写程序,看看是否可以解决问题。 - 查看硬件相关问题
如果以上方法都无法解决问题,可以考虑检查硬件相关问题。例如,是否选择了正确的芯片型号、是否正确连接了所有必要的外设等。可以尝试使用调试工具查看程序在执行到HardFault时的寄存器状态,从而定位问题所在。