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/MSP430F2132:在 C 源代码中使用寄存器-这在 CCS 中是否可行?

Guru**** 2520540 points
Other Parts Discussed in Thread: MSP430F2132

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/601323/ccs-msp430f2132-use-of-registers-in-c-source-code---is-this-possible-yet-in-ccs

器件型号:MSP430F2132

工具/软件:Code Composer Studio

我有一个由华盛顿大学发布的项目、用于 MSP430F2132上的一些 RFID 固件。

这是一个很棒的代码,我喜欢它! 但它方便地将 R4和 R5用于 C 变量、因此只能在 IAR 中使用(eww...) 请参阅以下内容-

hw41_D41.c:237-243 -

//编译器使用工作寄存器4作为全局变量
//指向&cmd[位]的指针
extern volatile __no_init __regvar unsigned char* dest @ 4;

//编译器使用工作寄存器5作为全局变量
//从读取器接收的位数
extern volatile __no_init __regvar unsigned short bits @ 5;

几年前、我研究过这一点、CCS 不支持这一点、只有 IAR 支持。 现在是否有办法在 CCS 中支持此功能? 我对使用 IAR 感到非常厌倦、请告诉我! )

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

    您好 Justin、

    为什么需要直接访问内核寄存器? 为什么不只是创建变量、然后让编译器处理底层寄存器优化?

    我首先想到的是将汇编代码与 C 语言混合。 您可以在此处找到更多信息

    此致、  

    Caleb Overbay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    或者、为了让您感觉更好、您甚至可以将它们标记为寄存器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我只是尝试使用他们的现有固件。 不确定他们为什么选择从 C 直接访问寄存器、但确实如此。

    是否有任何方法可以使该代码在 CCS 中正常工作、而无需进行重大返工(例如繁重的内联汇编)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Keith、这听起来很不错、请告诉我更多信息! 你是怎么做的? )
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在声明中:
    寄存器 int r5;

    但它仅适用于局部变量。

    编译器在分配寄存器方面非常好。

    我建议您只创建全局变量、让编译器担心它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当需要需要处理全局变量的超超高速 ISR 响应时、用户经常会选择将特定寄存器分配给用户。 现代编译器的寄存器分配行为确实令人印象深刻、但它适用于栈本地("auto")变量。 这几分之一微秒…… 您可以通过转到运行时模型选项(在编译器高级选项中)在 CCS 中保留这些寄存器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    啊、也许我应该提到-你可以使用内在函数_get/set_R4/R5_register ()访问这两个寄存器。 遗憾的是、它们已被弃用、因此不能说明您的代码将保持可编译的时间。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Justin、

    您是否能够根据此主题中的建议解决您的问题? 如果是、您最终使用了哪一个?

    此致、
    Caleb Overbay