主题中讨论的其他器件: TM4C1294NCPDT
您好!
我在 CCS 中编写汇编代码、我希望能够将代码放置在存储器中的特定位置。 对于之前使用的汇编器、我能够使用汇编器指令 ORG 来实现这一点、但我在文献中没有看到任何在 CCS 中为我提供相同功能的东西。
有人知道我是否可以在 CCS 中使用类似的汇编器指令?
感谢您的任何回答。
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.
您好!
我在 CCS 中编写汇编代码、我希望能够将代码放置在存储器中的特定位置。 对于之前使用的汇编器、我能够使用汇编器指令 ORG 来实现这一点、但我在文献中没有看到任何在 CCS 中为我提供相同功能的东西。
有人知道我是否可以在 CCS 中使用类似的汇编器指令?
感谢您的任何回答。
汇编器不会决定代码在存储器中的位置、而是由链接器决定。 您可以将相关代码与.sect 放在单独的段中、然后告诉链接器使用项目中的.cmd 文件将该段放置在所需的位置、方法是分离存储器区域或使用">[address]"。
这里有更多详细信息:
如果您可以解释您的总体目标、则可能有更简单的方法来实现它。
我假设您使用 TI 专有的 Arm 工具链。 如果您使用不同的工具链、则概念相同、但一些较低级别的详细信息不同。
[引用 userid="470468" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1134875/msp432e401y-assembler-directive-similar-to-org "]如果有类似的汇编器指令、我可以在 CCS 中使用?[/quot]否 它不是这样工作的。
要了解其工作原理、 请在 TI ARM 汇编工具手册 中搜索标题为 "目标模块简介"的章节。 有关链接器命令文件的介绍、请参阅文章 链接器命令文件入门。
谢谢、此致、
乔治
布鲁斯:
这是我的总体目标、我希望创建一个代码块、该代码块无法通过内存保护单元(slau723a 的第2.2.4节)或只读保护(slau723a 的第7.2.6.6节)进行读取或复制。
我的理解是受保护的存储器块不能包含任何字面量数据、因此我的计划是创建一些没有文字数据的代码、并将其放置在存储器中的特定位置、以防止其被复制。
顺便说一下、我仍然不清楚哪种方法更好-使用内存保护单元或使用只读保护-以创建一个无法读取或复制的代码块。 您对此提供的任何见解也会非常有帮助。
再次感谢您的帮助。
Brad
MPU 在运行时进行配置、因此如果攻击者可以启动调试器(在复位时)、则 MPU 未配置、该块可读。 从您的描述中、您似乎并不感兴趣。
读取保护应用于闪存块本身、因此始终有效。 只能使用一个出厂复位(包括一个批量擦除)来清除它。
我对读保护机制没有任何经验、但我确实找到了 SPMA044A 文档、其中描述了一个示例:
https://www.ti.com/lit/an/spma044a/spma044a.pdf
这些步骤或多或少与您的想法相同:
1)将常量保留在.text 之外(生成设置->生成->编译器->高级->指定是否可以嵌入常量)
2) 2)使用该选项重新构建运行时库
3) 3)在链接器.cmd 文件中分割一个存储器段(在闪存块边界上)并将.text 放置在那里。
4)调用 FlashProtectSet(),后跟 FlashProtectSave()。 这只需执行一次(加载最终代码)。
Bruce、
回复:spma044a: 这看起来正是我要实现的目标。 谢谢! 它说它适用于 Stellaris 微控制器。 我假设这些函数适用于我正在使用的 MSP432E401Y。
我想尝试一个测试实现来了解它的工作原理、但有一个问题对我来说并不清楚。 在第32页、它显示"请注意、通过使用 LM 闪存编程器执行调试端口解锁序列、可以将闪存保护设置重置为其出厂默认配置"。
我使用的是 CCS 11.2.0、我不清楚如何执行调试解锁序列。 LM 闪存编程器是否是一个不同的程序?
感谢您的回答。
Brad
您好!
请按照此应用手册的第5.3.1节解锁器件。 https://www.ti.com/lit/pdf/slaa777