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.

[参考译文] RTOS/CC2650MODA:NV 闪存读取/写入

Guru**** 2582405 points
Other Parts Discussed in Thread: CC2650MODA

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/603639/rtos-cc2650moda-nv-flash-read-write

器件型号:CC2650MODA

工具/软件:TI-RTOS

很好!

我在这个论坛上阅读了很多内容。 但我遇到了 NV 闪存读取/写入问题。 我认为我使用 iCall 注册的任务和 iCall 的所有功能、但当我使用 NV API 操作时、程序会崩溃。 在这里是我的代码

nv_data.h

#include 

//#define XDC_runtime_Log_disable_all 1 //添加以禁用此文件中的日志

#include 
#include 
#include 

#include 
#include 

#include 
#include 
#include 

//堆栈头
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 
#include "nv_data.h"
#include "globals.h"

void nv_taskFxn (UARg a0、UARg A1);


Char nvTaskStack[nv_task_stack_size];


Task_StructnvTask;

iCall_Semaphore nvsem;
iCall_EntityID nvselfEntity;


void NVData_createTask(){

Task_Params 任务参数1;

//配置任务
Task_Params_init (&taskParams1);
taskParams1.stack = nvTaskStack;
taskParams1.STACKSIZE = nV_task_stack_size;//nV_task_stack_size;
taskParams1.priority = 4;//nv_task_priority;

Task_construction (_nvTask、nV_taskFxn、&taskParams1、NULL);
}


#define SNV_DATA_ID 0x81
#define NV_DATA_LEN 10



void NV_taskFxn (UARg a0、UARg A1){

iCall_registerApp (_nvselfEntity、\nvsem);
log_info0 ("初始化 NV 任务");

uint8 status =成功;
uint8 buf[NV_DATA_LEN]={0、};
uint8_t temp;

while (1){

iCall_errno errno = iCall_Wait (ICALL_TIMEOUT_FOREVAL);
Task_sleep (10000);

TEM+=1;
log_info0 (出现 NV 数据操作);
// strcmp ("asd"、"asd");

状态= osal_SNV_read (SNV_DATA_ID、NV_DATA_LEN、(uint8 *) buf);//此处崩溃
if (status!=成功)
{
LOG_info0 ("osal SNV 可能是第一次读取?");
//首次写入以初始化 SNV ID
OSAL_SNV_WRITE (SNV_DATA_ID、NV_DATA_LEN、(uint8 *) buf);
}


log_info0 (出现 NV 数据操作);



}


}

在项目零

开关中(pCharData->paramID)
{
案例 BS_BASE_SERVICE_WRITE_ID:
log_info3 ("值更改消息:%s %s:%s"、
(IArg)"基本服务"、
(IArg)"基本服务写入"、
(IArg) Pretty 数据占位符);

//在此处对 pCharData->data 执行一些有用的操作
//--------------------
//将输出值设置为等于接收到的值。 0为关闭、0为开启
/* PIN_setOutputValue (userPinHandle、Board_LED0、pCharData->data[0]);
log_info2 ("设置%s %s"、
(IArg)"Board_LED0"、
(IARg)(pCharData->data[0]?"high":"low");*/
/* char * tempstring="";

int i=0;

对于(i=0;i dataLen;i++){
System_printf (tempstring、"%s"、pCharData->data[i]);
}*/

memset (received_string、0、BS_BASE_SERVICE_WRITE_LEN);
memset (received_command、0、10);//received_comand clear
memset (received_parameter、0、40);//清除接收参数
memset (uidChar、0、32);
memset (uidHex、0、16);
memcpy (received_string、pCharData->data、bs_base_service_write_LEN);
memset (return_string、0、sizeof (return_string));

//Log_Info1 ("接收到的 stinrg:%s"、(IArg) Received_string);
// pch=strchr (received_string、'#');
PCH = memchr (received_string、'#'、strlen (received_string));
如果(PCH ==空)
{
log_info0 ("斗牛场");//如果没有#
中断;
}
Position = PCH - Received_string;//index
// Log_Info1 ("在%d 找到"、PCH-Received_string+1);
// Log_Info1 ("positon %d"、Position);
memcpy (received_command、received_string、Position);

//TODO 清除非 ASCI 字符
//clear_non_asci_char (received_command、strlen (received_command));


// memcpy (received_command、0、position+1);
// Log_Info1 ("接收到的命令:%s"、(IArg) Received_command);
/* if (memcmp (&received_command、'uuid'、4)=0){
log_info0 ("发生 uuid 更改");
}*/
if (strcmp (received_command、"debug")=0)
{

/*Log_Info1 ("nv_data_LEN:%d"、(IArg)nv_data_LEN);
log_info1 ("url_offset:%d"、(IArg)URL_offset);
log_info1 ("url_LEN:%d"、(IArg)URL_LEN);
log_info1 ("URLTYPE_OFFSET:%d"、(IArg)URLTYPE_OFFSET);
LOG_Info1 ("URLTYPE_LEN:%d"、(IARg) URLTYPE_LEN);
Log_Info1 ("UUUUUID_OFFSET:%d"、(IArg) UUUID_OFFSET);
Log_Info1 ("UUUUUID_LEN:%d"、(IArg) UUUID_LEN);
LOG_Info1 ("main_LEN:%d"、(IArg)main_LEN);
log_info1 ("main_offset:%d"、(IArg) main_offset);
log_info1 ("次要_LEN:%d"、(IArg)次要_LEN);*/
Semaphore_post (nvsem);

}

其他
{
log_info0 ("不在命令类型 pasrser"中);
memcpy (received_parameter、PCH + 1、5);
}

我使用了零项目,具有自定义特征,一切正常,但当我发布 nvSem 时,该程序不起作用。 在调试模式下、osal_SNV_read 不返回。 我使用 tirtos 2.20 ble 2.2。

iCall 寄存器一切正常、还是有问题? 我有一个 cc2650moda 定制板和一个带有 debugdevpack 的 Sensortag、但它们不起作用。

感谢您的回答

最佳寄存器

Richard

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

    程序如何崩溃? 调用 osal_SNV 函数时的状态代码是什么?

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尝试将 OSAL_MAX_NUM_PROXY 任务=8添加到 Stack 项目的预定义符号中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢陈,你是我的英雄。 我在这种情况下工作了很长时间、我尝试了一切、是的、这就是解决方案。