如何用C语言编写这个程序 - 关于储存芯片地址线错误

来源:百度知道 编辑:UC知道 时间:2024/05/23 16:53:00
我有一个储存芯片,16位地址线,我接线的时候,不小心把低8位接反了,现在改动硬件是比较麻烦的,能不能编写一个C程序,把储存芯片里的内容也按照新的地址线的排列,重新排列,到时候读出来的数据,和没接反的地址线的数据是一样的。

地址线的详细说明:
高8 低8
以前的:F E D C B A 9 8 7 6 5 4 3 2 1 0
现在的:F E D C B A 9 8 0 1 2 3 4 5 6 7

请大家帮帮忙,
是地址线错误了,不是数据线错误了。
如果是数据线错误,用移位程序就可以了,但是地址线错误,所有的程序都乱掉了,怎么移位啊。

写了c程序,把错误的位与出来,再重新拼成一个完整的数就好了啊,其实汇编实现起来更为简单

储存芯片里的内容 不需要 按照新的地址线的重新排列的啊

读数据的时候,进行处理(按位操作)一下就可以了啊

只要把现在的(接错的)转成跟以前的(没有接错的)一样,就可以了。

假如temp表示short类型的数据,转化代码如下:
temp=((temp&0xff00)
|((temp&0x0001)<<7)
|((temp&0x0002)<<5)
|((temp&0x0004)<<3)
|((temp&0x0008)<<1)
|((temp&0x0010)>>1)
|((temp&0x0020)>>3)
|((temp&0x0040)>>5)
|((temp&0x0080)>>7))

补充:
如果是地址线错了,确实需要把存储器里面存放的代码数据,都修改修改了
修改的方法,跟我上面写的刚好相反

程序还本身是不能改了,硬件上方得有一个进行转换的软件层弥补硬件的不足,要进行转换还得用位移运算.

long int i;
unsigned char j;
unsigned char olddata[0x10000];
unsigned char newdata[0x10000];
for (i=0;i<0x10000;i++)
{
j=(i&0xff);
reverse(&j);

newdata[i]=olddata[(i&0xf0)|j];
}
void reverse(unsigned char *t)
{
unsigned char i=*t;
i=((i&0xf0)>>4) | ((i&0x0f)<<4);
i=((i&0