*** error 65: access violation at 0x1FFFDF34 : no 'write' permission这就是软件仿真出现的错误,我在网上搜了这种错误,可以在memory map加入这段地址,确实可以,但是到开发板仿真时就出现cannot access memory的错误,我已经搞了好几天了试了好多办法还是不知道怎么解决。求各位大佬帮帮忙。
我用的是STM32F103ZET6
下面是我的代码:<path.h>
#ifndef __PATH_H
#define __PATH_H
#define INFINITY 100 //不能通行的权值
#define vexnum 25 //节点数
#define arcnum 28 //边数
#define n 650
typedef struct//图的邻接矩阵存储结构
{
int vexs[25]; //顶点向量
int edges[25][25]; //邻接矩阵
}MGraph;
<path.c>
#include "path.h"
#include "greenled.h"
int vexs_temp[25]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24}; //节点名称
int edges_temp[28][3]={ //相邻节点之间的权值,格式(节点a,节点b,权值c)
{0,1,3},
{1,2,4},
{2,3,3},
{3,4,3},
{4,5,3},
{9,10,3},
{10,11,4},
{11,12,3},
{12,13,3},
{13,14,3},
{22,18,3},
{18,19,4},
{19,20,3},
{20,21,3},
{21,23,3},
{0,6,5},
{6,9,5},
{9,15,5},
{15,22,5},
{3,7,5},
{7,12,5},
{12,16,5},
{16,20,5},
{20,24,5},
{5,8,5},
{8,14,5},
{14,17,5},
{17,23,5},
};
void CreateGraph(MGraph *H) //创建一个结构体地图
{
int i,j;
for(i=0; i<vexnum; i++)
{
H->vexs[i] = vexs_temp[i];
}
for(i=0; i<vexnum; i++)
for(j=0; j<vexnum; j++)
if(i==j)
H->edges[i][j]=0;
else
H->edges[i][j]=INFINITY;
for(i=0; i<arcnum; i++)
{
H->edges[ edges_temp[i][0] ][ edges_temp[i][1] ] = edges_temp[i][2];
H->edges[ edges_temp[i][1] ][ edges_temp[i][0] ] = edges_temp[i][2];
}
}
void ShortestPath_Floyd(MGraph U,int P[25][25],int D[25][25]) //路径算法;P保存路径节点;D保存最短路径权值
{
int v,w,k;
for(v=0; v<vexnum; v++)//初始化D和P
{
for(w=0; w<vexnum; w++)
{
D[v][w]=U.edges[v][w];
P[v][w]=w;
}
}
for(k=0; k<vexnum; k++)
{
for(v=0; v<vexnum; v++)
{
for(w=0; w<vexnum; w++)
{
if(D[v][w]>(D[v][k]+D[k][w])) //如果经过下标为k顶点路径比原两点间路径更短,
{ //将当前两点间权值设为更小的一个
D[v][w]=D[v][k]+D[k][w];
P[v][w]=P[v][k];
}
}
}
}
}
int min_exit(int a, int b, int c)//比较各节点到出口的最短路径的权值并返回最小权值的出口节点
{
int min;
min = b;
if(a < b)
{
min = a;
}
if(c < min)
{
min = c;
}
if(min == a)
return 22;
if(min == b)
return 23;
if(min == c)
return 24;
}
void path_math(void) //指示灯输出
{
int v,w,k;
int P[25][25];
int D[25][25];
MGraph G;
CreateGraph(&G);//创建地图的参数
ShortestPath_Floyd(G,P,D);
for(v=0; v<(vexnum-3); v++) //显示路径
{
w = min_exit(D[v][22], D[v][23], D[v][24]);
k=P[v][w];
if(( k-v ) < 0 )
{
switch(v)
{
case 1:GPIOE->ODR |=1<<0;break;
case 2:GPIOE->ODR |=1<<1;break;
case 3:GPIOE->ODR |=1<<2;break;
case 4:GPIOE->ODR |=1<<3;break;
case 5:GPIOE->ODR |=1<<4;break;
case 10:GPIOE->ODR |=1<<5;break;
case 11:GPIOE->ODR |=1<<6;break;
case 12:GPIOE->ODR |=1<<7;break;
case 13:GPIOE->ODR |=1<<8;break;
case 14:GPIOE->ODR |=1<<9;break;
case 18:GPIOE->ODR |=1<<10;break;
case 19:GPIOE->ODR |=1<<11;break;
case 20:GPIOE->ODR |=1<<12;break;
case 21:GPIOE->ODR |=1<<13;break;
case 23:GPIOE->ODR |=1<<14;break;
}
}
if(( k-v ) == 1 )
{
switch(v)
{
case 0:GPIOF->ODR |=1<<0;break;
case 1:GPIOF->ODR |=1<<1;break;
case 2:GPIOF->ODR |=1<<2;break;
case 3:GPIOF->ODR |=1<<3;break;
case 4:GPIOF->ODR |=1<<4;break;
case 5:GPIOF->ODR |=1<<5;break;
case 10:GPIOF->ODR |=1<<6;break;
case 11:GPIOF->ODR |=1<<7;break;
case 12:GPIOF->ODR |=1<<8;break;
case 13:GPIOF->ODR |=1<<9;break;
case 18:GPIOF->ODR |=1<<10;break;
case 19:GPIOF->ODR |=1<<11;break;
case 20:GPIOF->ODR |=1<<12;break;
case 21:GPIOF->ODR |=1<<13;break;
case 22:GPIOF->ODR |=1<<14;break;
}
}
if(( k-v ) > 1)
{
switch(v)
{
case 0:GPIOG->ODR |=1<<0;break;
case 3:GPIOG->ODR |=1<<1;break;
case 5:GPIOG->ODR |=1<<2;break;
case 6:GPIOG->ODR |=1<<3;break;
case 7:GPIOG->ODR |=1<<4;break;
case 8:GPIOG->ODR |=1<<5;break;
case 9:GPIOG->ODR |=1<<6;break;
case 12:GPIOG->ODR |=1<<7;break;
case 14:GPIOG->ODR |=1<<8;break;
case 15:GPIOG->ODR |=1<<9;break;
case 16:GPIOG->ODR |=1<<10;break;
case 17:GPIOG->ODR |=1<<11;break;
case 20:GPIOG->ODR |=1<<12;break;
}
}
}
}
|