This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMDSRM48HDK:ALU 检测和 MPU 使用

Guru**** 2531950 points
Other Parts Discussed in Thread: HALCOGEN

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/850974/tmdsrm48hdk-alu-detection-and-mpu-use

器件型号:TMDSRM48HDK
主题中讨论的其他器件:HALCOGEN

尊敬的团队:


1.我的客户需要执行 ALU 检测和响应寄存器标志检测、RM48是否有相应的方法或机制?

2 是否可以使用 MPU 实现堆栈溢出检测? 如果 MPU 中存在访问冲突、芯片将如何响应、ESM 模块是否会接收到异常或其他处理方法?


他正在使用 RM48 HDK。 我在手册中找不到描述。 我在其他芯片手册中看到了 MPU 的描述。 RM48响应是否与其他芯片相同?

BR、

Susan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Susan、

    1.我的客户需要执行 ALU 检测和响应寄存器标志检测、RM48是否有相应的方法或机制?

    ALU 检测或寄存器标志检测是什么意思? 他们是否正在寻找机制来测试 ALU 以及条件代码标志是否被正确设置/复位? Hercules MCU 没有单独的内置机制来测试此功能。 使用自检控制器(STC)的 CPU 自检也包括 ALU 运行测试。

    2.是否可以使用 MPU 实现堆栈溢出检测? 如果 MPU 中存在访问冲突、芯片将如何响应、ESM 模块是否会接收到异常或其他处理方法?

    是的、这是 MPU 确定需要多少堆栈的有效用例。 CPU 对 MPU 不允许的区域进行访问(例如从"推送"进行堆栈写入)将导致中止响应。  在这种情况下没有 ESM 错误。 CPU 的异常中断处理程序必须读取数据故障地址和状态寄存器、以识别异常中断的原因并做出相应的响应。

    有关 MPU 的信息包含在 ARM: https://developer.arm.com/docs/ddi0363/g 上的 Cortex-R4F 技术参考手册中

    此致、Sunil

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的支持!

    1 ALU 检测或寄存器标志检测是什么意思?


    例如、执行一个加法、减法、或移位操作、然后检查标志位寄存器中的溢出标志或者进位标志是否正确。

    2如果我使用 MPU 机制来执行堆栈溢出检测、我只需要将堆栈的顶部和底部设置为不允许该区域、然后停止处理并添加响应。 工作正常吗?   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Susan、

    1 ALU 检测或寄存器标志检测是什么意思?


    例如、执行一个加法、减法、或移位操作、然后检查标志位寄存器中的溢出标志或者进位标志是否正确。

    >>正如我提到过的、当使用 CPU 的自检控制器(STC)运行逻辑内置自检(LBIST)时、此功能会与其他 CPU 逻辑一起进行测试。 没有其他硬件机制来测试这个逻辑。 如果需要、应用程序可以包含软件测试来验证此功能。

    2如果我使用 MPU 机制来执行堆栈溢出检测、我只需要将堆栈的顶部和底部设置为不允许该区域、然后停止处理并添加响应。 工作正常吗?   

    >> HALCoGen 生成的初始化例程允许您针对所有 CPU 模式设置堆栈顶部。 这些堆栈向下增长。 例如,coreInitStackPointer()例程使用以下默认值(来自 sys_core.asm):

    userSp .word 0x08000000+0x00001000
    svcSp .word 0x08000000+0x00001000+0x00000100
    fiqSp .word 0x08000000+0x00001000+0x00000100+0x00000100
    irqSp .word 0x08000000+0x00001000+0x00000100+0x00000100+0x00000100
    中止 Sp .word 0x08000000+0x00001000+0x00000100+0x00000100+0x00000100+0x00000100+0x00000100
    undefSp .word 0x08000000 + 0x00001000+0x00000100+0x00000100+0x00000100+0x00000100+0x00000100+0x00000100

    用户(和系统)模式的堆栈从0x08001000开始、从该值递减到0x08000000。 如果堆栈"增长"超过此地址(低于0x08000000)、它将自动生成中止、而不进行任何 MPU 配置。

    对于其他模式、如果使用的堆栈大于上面分配的大小(256字节)、它将覆盖其他模式的堆栈内容、从而导致代码执行问题。 这些问题可以通过使用 MPU 区来阻止 CPU 写入可用堆栈之外的 RAM 来确定。 此方法仅用于确定开发期间每种模式所需的最大堆栈大小。