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.

CC2642R-Q1: 在persistent_app里调用PIN_open()函数死机

Part Number: CC2642R-Q1

在persistent_app里调用PIN_open()函数死机,屏蔽掉它,程序运行正常。

但是同样的配置,在user app程序里调用就正常。

请问一下:是这个函数访问地址在persistent_app里超出范围了吗?该如何解决这个问题?映射还是别的替代可调用函数?谢谢!

备注:persistent_app程序空间是足够的

  • PIN_open()没有此限制,它只是分配pin。persistent_app例程原本也有使用PIN_open(),运行也没有任何问题

  • 可是我的persistent_app里真的一用就死机,同样的配置程序在multi_role里就运行正常,可能是什么原因或配置导致的呢?

    我的persistent_app工程已经大改了官方的内容,但是修改后的程序一切功能运行正常。现在还需要一个IO口中断输入来完成一件事,就完美收官了,可是这个PIN_open()函数一调用就死机,有什么好办法解决呢?

  • 可能的原因是PIN_open()被重复使用或者引脚已经被使用了,检查程序具体卡在哪一步了

  • 我以下步骤很容易复现该问题(在persistenr_app程序里调用PIN_open()函数导致死机):

    1、我新建一个文件夹, 然后导入官方bim,persistenr_app及simple_peripheral_oad_onchip三个程序。编译后写入2642,在手机上很容易就搜到SP OAD on-chip,写入一个非0值后,就变成OAD Persistent App蓝牙名了。

    2、我在persistent_app.syscfg里添加一个IO口中断输入 ,然后在oad_persistent_app.c里添加如下程序 编译后写入CC2642。这时在手机上很容易就搜到SP OAD on-chip,写入一个非0值后,就找不到我的设备了!(无OAD Persistent App蓝牙名出现)。

    请问如何解决呢?我用的是SDK5.40版本。

    谢谢

  • 就我自己的程序而言(前面的回复是针对纯官方的程序操作的),我确定整个persistenr_app程序里只调用了一次PIN_open()函数(我把按键与LED四引脚全去掉了),而且我换别的IO口,情况也是一样,就是必然会死机。一定是PIN_open()函数有什么使用限制。

  • 我检查了PIN_open(),没有任何的限制,应该是你的OAD程序本身的问题:OAD升级过程中不能中断,否则就会进入到Persistent App

    另外SDK5.40已经删除了PIN驱动程序,改为了GPIO+:

    	  // OAD events
          if(events & SP_OAD_NO_MEM_EVT)
          {
            // The OAD module is unable to allocate memory cancel OAD
            OAD_cancel();
    
    #ifdef LED_DEBUG
            // Diplay is not enabled in persist app so use LED
              GPIO_write(CONFIG_GPIO_RLED, 1);
    #endif //LED_DEBUG
          }

  • 非常感谢,已经按照gpio的方式配置成功。可以结帖,谢谢!