OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4940|回复: 4

*** error 65: access violation at 0x1FFFDF34 : no 'write' permission 求救这个怎么解决,搞这个搞了两天了还没解决。

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-4-12
在线时间
3 小时
发表于 2019-4-13 12:50:20 | 显示全部楼层 |阅读模式
5金钱
*** 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;
            }
        }
    }               
}


每次仿真到这里就出现这样的错误,用单片机仿真也是到这里就出现cannot access memory

每次仿真到这里就出现这样的错误,用单片机仿真也是到这里就出现cannot access memory

最佳答案

查看完整内容[请看2#楼]

0x1FFFDF34这是个非法地址,SP指向它, 表示这是栈溢出 把栈加大罢, 在startup_stmxxxx。s文件里 的这一句 Stack_Size EQU 0x400 改为 Stack_Size EQU 0x800
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-4-13 12:50:21 | 显示全部楼层
0x1FFFDF34这是个非法地址,SP指向它, 表示这是栈溢出
把栈加大罢, 在startup_stmxxxx。s文件里 的这一句
Stack_Size                EQU     0x400
改为
Stack_Size                EQU     0x800
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-4-12
在线时间
3 小时
 楼主| 发表于 2019-4-13 14:07:17 | 显示全部楼层
edmund1234 发表于 2019-4-13 13:42
0x1FFFDF34这是个非法地址,SP指向它, 表示这是栈溢出
把栈加大罢, 在startup_stmxxxx。s文件里 的这一 ...

改了之后还是这样
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-4-12
在线时间
3 小时
 楼主| 发表于 2019-4-13 14:19:44 | 显示全部楼层
wskihss 发表于 2019-4-13 14:07
改了之后还是这样

我又改大了一点就好了,感谢
回复

使用道具 举报

5

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2019-10-7
在线时间
36 小时
发表于 2020-12-10 20:11:17 | 显示全部楼层
wskihss 发表于 2019-4-13 14:19
我又改大了一点就好了,感谢

你好我也遇到了同样的问题,改大的话改大到多少呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 20:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表