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/MSP430F5659:尝试了解如何使用init_locks(),init_exit_PTRS()来初始化全局变量

Guru**** 2587365 points
Other Parts Discussed in Thread: CC110L, MSP430F5529

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/618399/ccs-msp430f5659-trying-to-understand-how-init_locks-init_exit_ptrs-is-used-to-initialize-global-variables

部件号:MSP430F5659
主题中讨论的其他部件:CC110LMSP430F5529

工具/软件:Code Composer Studio

我正在更新负责现场升级固件的启动加载程序。 快速摘要,引导加载程序代码位于内存中,而主应用程序位于另一个内存中。 当满足特定条件时,主应用程序使用汇编调用引导加载程序。 最后运行引导代码,重写主代码,然后重置系统。

我注意到了下面的代码,我想知道是否有人可以解释,或者至少让我找到正确的文档。 我浏览了编译器用户指南,其中谈到了如何在线程环境中使用锁,但没有谈到初始化全局变量。 我发现源文件boot.c也包含类似的代码,我真的只是想了解它的工作方式,因为在表面上它不是很有用。  

#define _code_access
#define _data_access
#define _data_access-near
_code_access void _mynop();

extern _data_access void (*_lock)();
extern _data_access void (*_unlock)();

init_code_access void _register_lock _lock (*undlut)



执行{_lock =_mynop;_unlock =_mynop;} while (0)

_code_access void _mynop()
{
}
_data_access void (*_lock)();
_data_access void (*_unlock)();


_code_access void _register_lock(void (*lock))){

_lock = lock;
}

_code_access void _register_unlock(void (*unlock)()){

_unlock =解锁;
} 

谢谢!

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

    提供此代码摘录的文件的名称是什么?您从哪个示例或软件包中找到了此名称? 我将尝试让原作者或BSL专家提供补充评论。 您是否使用了custom-BSL430资源,以及您是否知道SLAA452?

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

    感谢您的回答,让我尝试回答您的问题。

    提供此代码摘录的文件的名称是什么?您从哪个示例或软件包中找到了此名称?

    只是为了澄清一下,摘录来自我尝试更新的自定义引导程序。 我在boot.v C 4.1 中找到了类似的初始化代码,1-“初始化MSP430 C运行时环境”,我在Google搜索器中找到了该代码。

    我将尝试让原作者或BSL专家提供补充评论。

    谢谢,我很感激。

     您是否使用了custom-BSL430资源,以及您是否知道SLAA452?

    我认为没有使用任何资源(这段代码是在多年前编写的)。 我绝对有兴趣寻求新的选择。 为了提供快速的背景信息:MCU有一个SPI闪存芯片,它通过主程序存储新固件(固件从各种无线外设下载)。 然后,主程序可以进入引导加载程序模式以更新固件,然后进入新的主应用程序。 在某种情况 下,我计划研究双USB/串行闪存更新方案,因此我一定会查看SLAA452。

    为实现上述目标,您建议使用哪些资源?

    再次感谢,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于您的问题与编译器如何处理启动有关,而不是与我最初所想的BSL资源有关,因此我建议您向C/C++编译器团队或IAR支持人员提出问题。 您是否计划使用BSL闪存(0x1000至0x15FF),或者SPI/OTA要求是否会导致您寻求主内存引导加载程序解决方案? 您可能需要参考MSP430FRBoot,它有一个使用CC110L和SPI通信的OTA示例。 计划在更新MSPBoot时提供MSP430F5529的类似示例。

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

    您是否计划使用BSL闪存(0x1000至0x15FF),或者SPI/OTA要求是否会导致您寻求主内存引导加载程序解决方案?

    原始设计放置在主内存中(地址= 0x8000,其中分配了0x4000字节),这将闪存部分推至0xC600。 老实说,我不会占用主程序空间(我认为我使用了大约128k到200k),因此我可以分配超过0x4000的空间。 如果有优势,我愿意使用BSL部分。 这种方法是否合理?

    您可能需要参考MSP430FRBoot,它有一个使用 CC110L 和SPI通信的OTA示例。   计划在更新MSPBoot时提供MSP430F5529的类似示例。

    我一定会研究这些,我会尝试处理所有新方法。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我无法想象引导加载程序需要4 KB以上的内存,因此16 KB似乎太大了。 但您描述的设置与MSPBoot中描述的方法相同,请务必仔细研究。

    此致,
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您提供信息,这应该足以让您开始学习。