请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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