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/CC2650:ROV 错误-需要解释

Guru**** 2585275 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/595641/rtos-cc2650-rov-errors---need-interpreting

器件型号:CC2650

工具/软件:TI-RTOS

你好。

有人能为我解释和解释这些错误吗? 谢谢[我已经包括了我的 main()和自定义链接列表库以及错误照片)

在 View init 代码:"c:/ti/xdctools_3_32_01_22_core/packages/xdc/rov/StructureDecoder.xs "行518:java.lang.exception:target memory read failed at address:0x20004628、length:8根据应用程序的段映射、此读取位于无效地址。 应用程序可能未初始化或已损坏。

获取队列元素结构时出错:JavaException:java.lang.exception:目标内存读取失败,地址为0x20004628,长度为8根据应用程序的段映射,此读取位于无效地址。 应用程序可能未初始化或已损坏。

错误:扫描挂起队列时出现问题:JavaException:java.lang.exception:target memory read failed at address:0xbebebe、length:8根据应用程序的段映射,此读取位于无效地址。 应用程序可能未初始化或已损坏。 [错误发生3次]

int main (void)
{
Task_Params serial_params;
Task_Params algo 参数;
Task_Params libar_params;

Semaphore_Params semParams;

/*呼叫板初始化函数*/
Board_initGeneral();
Board_initUART();

/*构造读/写任务线程*/
Task_Params_init (&serial_params);
serial_params.STACKSIZE = SERIALSTACK;
serial_params.stack =&serial_task_0;
serial_params.priority = 1;
Task_con构(&serial_task_Struct,(Task_Functr) Read_write、&serial_params、NULL);

/*构造测试任务线程*/
Task_Params_init (algo 参数);
ALGO_params.STACKSIZE = CYCSTACK;
algo 参数堆栈=&algo 任务1;
alGO_params.priority = 2;
Task_construct(&algo task_Struct,(Task_Functr)CYC_algo,&algo,params, NULL );

/*构造激光雷达任务线程*/
Task_Params_init (&lidar_params);
LIDAR_params.STACKSIZE = LIDARSTACK;
LIDAR_params.stack =&lidar_task_2;
LIDAR_params.priority = 3;
Task_construction (&lidar_task_Struct,(Task_FuncPtr) lidar_task,&lidar_params,NULL);

/*构造一个信号量对象以用作资源锁定,初始计数1 */
Semaphore_Params_init (&semParams.mode
= semaphore_params
,semSemaphore_mode&semparams);semParams.mode = semSemaphore_params (semSemaphore_params,params);semSemaphore_mode_mode_mode_

/*获取实例句柄*/
semHandle = Semaphore_handle (&semStruct);

/*声明和定义堆*/
char buf[2560];//在 MAU 中,在 CC2650中,这是以字节

Error_init (&EB)为单位的;
HeapBuf_Params_init (&params);
params.size = 16字节/params = 16字节;/params = 16字节/params =
16字节;/params =/params = 16字节; // 160个块(16字节/块* 160个块= 2560字节)
params.buf =(ptr) buf;//将缓冲区存储为字节 params.bufSize
= 2560的字符数组;//缓冲
区 heap_heap = HeapBuf_create (&params、&EB)中包含的字节数;//设置 buff_heap (
cap = heap) handle = HeapBuf_heap (&p_heap);//设置所有属性;

System_printf ("正在启动 BIOS\n");
/* SysMin 仅在您调用 flush 或 exit 时才会打印到控制台*/
system_flush();

init_sens_structs();

/*启动 BIOS */
BIOS_start();

返回(0);
} 

/*
l_list.c
*
*创建日期:2017年5月8日
* 作者:Aandre24
*/
#include 
#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 
#include 

#define MAX_SIZE 75 //列表

IHeap_Handle 堆的最大大小;
Memory_Stats heapStats;
Error_Block EB;

/*
*创建 Heap_buf
*//

*
这些结构应该是私有的(用户不应该能够创建它们)
*由于它们未在头文件中定义,所以它们不能由用户创建
*/

int blocksize = 16;

//保留单个数据戳
结构数据{
long time;
long dist;
struct data *下一步;
};


//保留单个传感器
结构传感器的链接列表{
struct data *头;
struct data *尾;
int size;
};

#define DATA_STRUCT_SIZE sizeof (struct sensor)

int get_struct_size ()(){_struct
data * return;}大小


//定义两个链接列表,每个传感器一个
静态结构传感器*s1 = NULL;
静态结构传感器*s2 = NULL;

//初始化两个传感器的内存
_Bool init_sens_structs (){
//
*为两个传感器指针创建内存位置
*也可以合并一个 exit (0)以强制退出
*//

可以在按工作顺序
System_printf ("pre_init:\n\tPointing addr s1:%x s2:%x\n"flush


(s2)、System_printf)(pre_init:\n\s1);heap (s1:%x s1:%x s1)、flush (s1); blocksize、0、&EB);

if (!s1)// malloc 失败
{
System_printf ("无法初始化传感器1");//可以稍后删除
System_flush ();
返回0;
}

s1->head = NULL;
-> tail = s1;
->size = 0;NULL

= Memory_alloc (堆、大小、blocks2) 0、&EB);

if (!s2)
{
System_printf ("无法初始化传感器2");//可以稍后删除
System_flush ();
return 0;
}s2->head

= NULL;
}-->tail = NULL;
init->size = 0;

System_printf ("post_flush:\n\tting pointing adds2 (s2);%s2:%x


);return:1;%s1;%s1;系统返回


//返回链接列表的大小(剩余要读取的元素数)
int get_size_1(){
返回 s1->size;
}

int get_size_2(){
返回 s2->size;
}//

通过参数将一段数据添加到所需的链接列表
中//如果内存分配失败,则返回0, 或超出最大大小
_Bool add_1 (long time、long dist){

if (s1->size == MAX_size)//列表已达到预定义的最大大小
{
System_printf ("已达到最大大小%d、不再添加\n"、s1->size);
System_flush ();
return 0;
}

如果(!s1->head &&!s1->tail )//头和尾点为空
{//
为链接列表分配内存
s1->head = Memory_alloc (heap、blocksize、0、&EB);

if (!s1->head){// ms1失败
返回0;
}//

将 alloc 值分配给当前数据对象
-->时间

-->时间-->时间-->

s1->tail =s1->head;//尾指向 head

s1->size++;//递增大小

返回1;// Malloc 成功

}否则{//列表中至少有1个数据

//为下一个数据
堆分配内存->alloc->next = Memory_tail (&, blocksize,0,s1 EB);

如果(!s1->tail->next){// malloc 失败
返回0;
}

//将 tail 移动到列表的末尾
s1->tail =s1->tail->next;

//为当前数据对象指定值
s1->dist->time = time;
s1->tail->dist=dist;
s尾->nail->next = NULL;s1->sizes+



返回大小

}

_Bool add_2 (long time、long dist){

if (s2->size == MAX_SIZE )// List has reached pre-defined maximum size
{
System_printf("maximum size %d reached,no more adding\n",s2->size );
System_flush();
return 0;
}

如果(!s2->head &&!s2->tail )// head 和 tail point 为空
{//
为链接的列表分配内存
s2->head = Memory_alloc (堆、块大小、0、&EB);

if (!s2->head){// Middist 返回
0失败;
}//

将值分配给当前数据对象


-->时间-->时间-->时间-->

s2->tail =s2->head;//尾指向 head

s2->size++;//递增大小

返回1;// Malloc 成功

}否则{//列表中至少有1个数据

//为下一个数据分配内存
s2->alloc->next = Memory_tail (&, blocksize,0,heap EB);

如果(!s2->tail->next ){// Malloc 失败
返回0;
}//

将 tail 移到列表的末尾
s2->tail =s2->tail->next;

//为当前数据对象指定值
s2->time-= time;
dist ->tail->tail =dist;
s2->tail->next = NULL;

s2->s2+ s2;sizes+ return



}

void print_list (int s){
//
*打印传感器1或2中的所有元素
*/

//保留指向列表
结构数据开头的临时指针*temp = NULL;

//将 temp 分配给指向列表1或2的开头
,如果(s=1)
temp =s1->head;
否则,
如果(s=2) temp =s2->head;
否则
返回;
//迭代

并打印列表,直到(temp){ System_printf("Sensor:%i time:%i Dis:%i\n",temp;s->时间)为空;
temp = temp-> next;
}
system_flush();

return;
}

_Bool rm_1 (long *时间、long * dist){
/*
函数将 time 和 dist *的下一个值存储
在指针传递值内。
*
*它还会删除
和释放为*由 HEAD 指向的*数据分配的内存
*
*这些值应仅考虑返回值
*为1。
//

如果(!s1->head &&!s1->tail)//传感器没有就绪值
{
返回0;//在使用值之前应始终检查此值
}
否则{//有可用于读取
结构数据的数据*temp =s1->head;// temp 指向当前头
s1->head =s1->NEXT; //头被移动到下一个数据(或空)

//数据被填充
*time =temp->time;
*dist =temp->dist;

//擦除可能的内存泄漏
temp->next = NULL;

//释放 temp
Memory_free 指向的内存(heap、ptr) temp、blocksize);

//如果列表为空,请将 tail 设置为指向 head (NULL)
(!s1->head) s1->tail = s1->head;//对于仅将1项减至零

的列表 s1->size-;//减量大小

返回1;
}
}

_Bool rm_2 (long *时间、long * dist){
/*函数在
指针传递值内存储 time 和 dist *的下一个值。
*
*它还会删除
和释放为*由 HEAD 指向的*数据分配的内存
*
*这些值应仅考虑返回值
*为1。
//

如果(!s2->head &&!s2->tail)//传感器没有就绪的值
{
返回0;//在使用值之前应始终检查此值
}
否则{//有可用于读取
结构数据的数据*temp =2->head;// temp 指向当前头部
s2->head s2->head->next; //头被移动到下一个数据(或空)

//数据被填充
*time =temp->time;
*dist =temp->dist;

//擦除可能的内存泄漏
temp->next = NULL;

//释放 temp
Memory_free 指向的内存(heap、ptr) temp、blocksize);

//如果列表为空,请将 tail 设置为指向 head (NULL)
,如果(!s2->head) s2->tail =s2->head;//对于仅有1个项目减至0

的列表 s2->size-;//减量大小

返回1;
}


void show_heap_stats()
{
Memory_getStats(total,heapapapfree):%d:%fulse stats
%d\n"、heapStats.totalSize、heapStats.totalFreeSize、heapStats.largestFreeSize);
System_flush ();
}

void show_size_stats ()
{
System_printf ("数据大小:%d\n lList 大小:%d\n"、sizeof (struct sensor)、sizeof (struct data));
System_flush ();
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    顺便说一下、链接列表和所有代码都正常运行、并且符合预期。 不过、这些错误正在让我失望。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ROV 尝试在结构构建之前解释结构(例如 Task_Structt)并给出错误。 构建调用(例如 Task_con构)后、它被正确显示。 我们已在一两个月后推出的下一个版本中修复了这一问题。

    Todd