导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→关于C51排序问题,进来帮忙看看这样有没问题?谢谢[ttneil]

 *第39856篇: 关于C51排序问题,进来帮忙看看这样有没问题?谢谢

  
楼 主:ttneil 2006年5月4日12:22
 关于C51排序问题,进来帮忙看看这样有没问题?谢谢
题目:用8051 Keil C 写出排序程序,原资料摆在IDATA 80h~8ah,排序后摆在DATA 40h~4ah。

我的解答:
#define num 11
#include  <reg51.h>  
#include"stdio.h"
main()
{
char idata *org=0x80;
char data *result=0x40,temp;
unsigned char i=0,j=0,k=0;
for(i=0;i  <num;i++)
 *(result+i)=*(org+i);
for(i=0;i  <num-1;i++)
{//选择排序
  k=i;
  for(j=i+1;j  <num;j++)//选择i+1到num的最小值
   if(*(result+j)  <*(result+k))
    k=j;
   if(k!=i)//如果i不是最小则交换
    {temp=*(result+i);
     *(result+i)=*(result+k);
     *(result+k)=temp;}
}
}

编译没问题,但debug时候run说:
*** error 65: access violation at I:0x80 : no 'read' permission

是什么原因呢?我学C51没多久,请指教,谢谢!

  
2楼:ttneil 2006年5月4日12:25
 这里有问题
运行:
 *(result+i)=*(org+i);
时候就说那些内存不能读,为什么?
  
3楼:csjclh 2006年5月31日13:29
 可以编译过去了!!!
我将你的程序原装不动的试了一下,可以过去的,用的版本是  KEIL 7.06

你再查一下吧!

  
4楼:lenglianxi 2006年5月31日22:00
 你的器件是选的51吧.
char idata *org=0x80;
这个org需要存取idata空间80H,在51中只有128个字节,所以存取失败.
选择52的器件编译就可以了.

更正一下:
选择52的器件仿真就可以了.
跟编译没关系,只是在模拟仿真时有关系.

如果你选择51器件,也可以使用map i:0x80,i:0xff read write 来使idata(80h-0ffh)可读写.


>>>>>>对该主题发表你的看法

本主题贴数4,分页: [第1页]


[上一篇主题]:可以给我吗

[下一篇主题]:青高手高手高高手帮忙!