打印

XC8 ROM 区数据读取问题

[复制链接]
1686|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ljm041128|  楼主 | 2013-12-1 09:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
XC8 编译器ROM 数据如何读取?
沙发
Rain_King| | 2013-12-2 10:02 | 只看该作者
你的意思是说:先利用编译器读取ROM,然后再看编译器保存ROM的数据么....这个......没看过...

使用特权

评论回复
板凳
ljm041128|  楼主 | 2013-12-5 20:15 | 只看该作者
抱歉,我没说清楚,是程序如何读取固定的数据表格?原来用C18编译没问题的,MCU是PIC18F4523。

数据表格定义:
unsigned  char Disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
                                                 //0          1     2    3    4    5    6    7    8    9    A    b    C    d    E    F
                                        0x76,0x38,0x40,0x3e,0x5c,0x31,0x73,0x10,0xce,0x08,0x08,0x40,0x80,0x02,0xce,0xfd,0x00,0x6e,0x70,0x5c,0x37};
                                        // H    L    -    U    o    T   r   _    18   19  1a    1b   1c   1d    1e  1f    空,  21y  22        N

这句话在中断服务程序内
PORTD=Disp[Led_code[2]];

中断里能这样调用吗?

使用特权

评论回复
地板
XIEYUANBIN| | 2013-12-5 20:26 | 只看该作者
const unsigned  char Disp[]={..........

使用特权

评论回复
5
XIEYUANBIN| | 2013-12-5 20:27 | 只看该作者
你这样的数组,不是ROM,而是放在RAM中的,记得加上CONST关键词

使用特权

评论回复
6
ljm041128|  楼主 | 2013-12-5 20:44 | 只看该作者
我就是改了 CONST 也不行。咋读出的数是0XFF?

使用特权

评论回复
7
yklstudent| | 2013-12-6 12:45 | 只看该作者
Led_code[2]是什么?

使用特权

评论回复
8
ljm041128|  楼主 | 2013-12-10 10:09 | 只看该作者
这是数码管的程序:
const  char Disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
                                                 //0          1     2    3    4    5    6    7    8    9    A    b    C    d    E    F
                                        0x76,0x38,0x40,0x3e,0x5c,0x31,0x73,0x10,0xce,0x08,0x08,0x40,0x80,0x02,0xce,0xfd,0x00,0x6e,0x70,0x5c,0x37};
                                        // H    L    -    U    o    T   r   _    18   19  1a    1b   1c   1d    1e  1f    空,  21y  22        N
void Display_string(unsigned int input_value,unsigned char dot_value)
{
        unsigned char i,m,code,dat[4];
        unsigned int j,temp;
       
                for (i=0;i<4;i++)
                {
                        dat[i]        =(char)(input_value>>(3-i)*4)&0x000f;
                        Led_code[i]=Disp[dat[i]];
                }
       
                Led_dot=dot_value;

        //Dispaly_Zero(Led_dot);
}
为啥读出的数值总是0小FF,我原来用的是C18编译的,没啥问题啊!现在用XC8 编译的,有问题,请高手指点下,谢谢!

使用特权

评论回复
9
ljm041128|  楼主 | 2013-12-11 10:00 | 只看该作者
PORTD=Disp[dat[i]];
在中断内调用这个有啥问题?我原来用的C18 编译器没啥问题,换了XC8后就不行了,哪位高人指点1,2,谢谢!

使用特权

评论回复
10
ljm041128|  楼主 | 2013-12-11 11:15 | 只看该作者
自己解决了!问题可能出在内存上,XC8和C18编译器处理的方法上有区别。我不用数组了,直接向内存里写数据,然后中断里读取这些数据,不用数组,问题就解决了!

使用特权

评论回复
11
vavcm| | 2013-12-13 14:03 | 只看该作者
求共享下是怎么实现的呢?谢谢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

130

主题

455

帖子

0

粉丝