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