主题中讨论的其他器件:HALCOGEN、
您好!
我在 HalCoGen 生成的 hL_sys_startup.c 中的启动代码有问题。
程序运行在 esmGroup3Notification 内的 while (1)循环中、尽管实际上没有组3错误。
该问题可按如下方式重现:
- 为不带 FreeRTOS 的 TMS570LC4357创建一个新的 HalCoGen 项目并生成代码
- 使用 HalCoGen 源代码创建一个新的 CSS 项目
- 将优化从“关闭”设置为“0”(寄存器优化)
- 在用户代码(22)中添加对 ESM 组3状态寄存器的额外访问(请见附件)
- 将此项目加载到 HDK 中,然后程序运行到 esmGroup3Notification 中
在调试时、我发现当代码进入开关情况时、ESM 组3寄存器(esmREG->SR1[2])的寄存器地址被加载到 R4。
汇编器函数_memInit_使用此寄存器而不恢复其内容。 然而、当代码随后测试 ESM 组3寄存器的内容时、R4指向一个不同的内存位置并且假定一个错误、尽管没有组3错误。
根据 ARM 过程调用标准,“子例程必须保留寄存器 R4-R8、R10、r11和 SP 的内容”。 这对于_memInit_函数不是正确的。
作为一种权变措施、我更改了_memInit_、使其使用不需要保留的参数寄存器 R1-R3。
是否有计划使_memInit_符合过程调用标准?
此致、
Katharina Gilles