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.

[参考译文] 编译器:[CC2640]如何在栈4.2上使用 NOINIT

Guru**** 2534260 points
Other Parts Discussed in Thread: BLE-STACK, CC2640

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/728323/compiler-cc2640-how-to-use-noinit-on-stack-4-2

Thread 中讨论的其他器件:BLE-STACKCC2640

工具/软件:TI C/C++编译器

大家好

我有一个案例需要将 stack4.0升级到 stack4.2。

我在不同的 PC 上有两个版本的 CCS (7.4和8.1)。

然后在 stack 4.0和4.2的血糖样本代码中添加"pargma NOINIT"

在堆栈4.0中成功。(未修改示例代码)

在 Stack 4.2中、葡萄糖样本代码 CCS7.4和8.1

#pragma NOINIT (GLUValue)
uint8_t GLUValue;
.
int main()

   RegisterAssertCback ()
   PIN_INIT()
   iCall_init()
   iCall_createRemoteTask()
   GAPRole_createTask()

GLUValue = 1;  <=如果具有分配值、程序将在创建任务中停止。

   半透明 Sensor_createTask()
   BIOS_start()
   返回0;



半透明 Sensor_createTask (空)

     。
     Task_construct(&glucoseTask、GlucoseSensor_taskFxn、&taskParams、NULL); <=在这里停止(CCS 7.4和8.1相同)

------------------

尝试调整 CCS 上的优化速度。 情况相同。

我应该怎么做?

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

    不支持初始化 NOINIT 变量。  ARM 编译器手册在标题为  NOINIT 和 PERSISTENT pragma 的部分中规定:

    NOINIT pragma 只能与未初始化的变量一起使用。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉、我没有解释详细信息、
    我已重新编辑。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉、我没有解释详细信息、
    我已重新编辑。

    #pragma NOINIT (GLUValue)
    uint8_t GLUValue;
    .
    int main()

    RegisterAssertCback ()
    PIN_INIT()
    iCall_init()
    iCall_createRemoteTask()
    GAPRole_createTask()

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

    对答案很好奇

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

    在此用例中使用 NOINIT 的目的是什么? 我认为、基于提供的链接器文件、BLE-Stack 项目目前可能不支持 NOINIT。 我将执行一个操作来将其归档。

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

    您好 Katie Pier

    这是我的客户已列出的现有项目。

    现在、我的客户希望升级 BLE 4.2。

    因此、我无法随意修改程序。

    在:μ s 处使用 NOINIT

    #pragma NOINIT (DEV_TYPE)

    uint8_t dev_type;

    2640上电--> UART TX 发送 cmd -->多个器件(dev1或 dev2或...) --> UART Rx 接收命令

    --> dev_type = dev1 -->软件复位-->  

    switch (DEV_TYPE)

       案例 dev1:
         GlucoseSensor_createTask(); <=第二次运行
         custom_createTask();
         中断;
       案例 dev2:
         BloodPressure_createTask();  <=第二次运行
         custom_createTask();
         中断;
       “案例 dev3,dev4… "
       默认值:
         custom_createTask();  <=首次运行-->获取 devX -->软件复位
         中断;


    当然、还有其他代码需要处理、如这样。

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

    您好、koo Austin、

    感谢您、我想我现在的理解会更好。 对于我们的堆栈版本、我们通常不使用4.0和4.2的命名约定、因为它们更多地指 BLE SIG 规范版本。 您能否澄清一下在工作案例和故障案例中使用的 BLE-STACK 版本是什么? 您可以从堆栈的文件系统文件夹命名约定或堆栈附带的发行说明中找到此版本。 这可以帮助我们确定不同之处。  

    您能否确认您使用的器件是 CC2640而不是 CC2640R2?  

    此致、

    Katie

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

    好的、在"Ble_SDK_2_02_02_25"上失败

    示例代码路径:"C:\ti\simplelink\ble_sdk_2_02_25\examples\cc2650em\glucle_sensor"

    NOINIT 在"Ble_cc26xx_2_01_00_44423"上正常工作

    示例代码路径:"C:\ti\simplelink\ble_cc26xx_2_01_00_44423_meter\projects\ble\GlucoseSensor"

    希望在堆栈2.2.2上工作。

    如果我需要修改它、会很麻烦。

    或者...是否有其他 SDK 版本的蓝牙4.2并支持使用 NOINIT?

    非常感谢。

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

    你(们)好 Katie

    你有什么想法吗?

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

    Austin 已更新他们使用的 SDK。 您能否帮助了解不同版本 SDK 中的 NOINIT 用法?
    NOINIT 是正常 pragma 用法、我认为 Austin 的用法是正确的。
    为什么他在不同版本的 SDK 中遇到此问题?

    如果您有任何建议、请随时告知我们。
    非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Janet:Austin:

    很抱歉耽误你的时间。 我已经咨询过团队、这里是根本原因和解决方案。

    根本原因:链接器命令文件未定义.TI.noinit 段。 因此、链接器使用闪存的默认放置方式。 很显然、当这里分配了一个变量、因为该变量应该位于 RAM 中时、这会导致问题。

    解决方法:幸运的是、链接器 cmd 文件是开源的、因此这很容易解决、而不必等待带有修复程序的新版本。 在 CCS 项目中、展开 tools 文件夹并打开文件 cc26xx_app.cmd。 查找"Group > SRAM"区域。 只需在本节中添加".data"之前的".TI.noinit"。

    Group > SRAM
    {
    .TI.noinit
    .data
    .bss
    .vtable
    .vtable_ram
    VTABLE RAM
    sysmem
    .nonretenvar
    }load_end (heapStart) 

    此致、

    Katie

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