реклама на сайте
подробности

 
 
> Таблицы в pic18f8722, читает из таблиц что-то непонятное
Dmitriy_dda
сообщение May 30 2009, 08:38
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 14-06-07
Пользователь №: 28 426



Уважаемый народ!

Сразу о железе: пишу на "С-18" в среде MPLAB IDE, микроконтроллер PIC18F8722, частота 80М, длинна кода где-то до адреса 0x119EA, код содержит довольно много таблиц.
Настройка микроконтроллера:
Код
#pragma config MODE = MC
#pragma config OSC = HSPLL
#pragma config ADDRBW = ADDR20BIT
#pragma config WDT = OFF
#pragma config XINST=OFF
#pragma config PWRT = ON
#pragma config BOREN = OFF
#pragma config STVREN = OFF
#pragma config IESO = OFF
#pragma config MCLRE = OFF


Странность заключается в следующем: когда программа пытается прочесть какие-либо значения из таблиц, находящихся по адресам 0x10000 и выше то читаются не те значения что мне надо, а читаются по адресам на 0х10000 меньше чем стоят на самом деле.
Вроде и в конфиге прописано что шина адреса 20 бит (то есть должны читаться адреса вплоть до 0х1FFFF) но этого не происходит.

На оптимизацию кода сейчас просто нет времени (чтоб уложиться в 65к, но ведь память то 128к), да и скорее всего код будет еще длиннее..

Таблицы прописываю в отдельных файлах так:

Код
#include "p18f8722.h"

const rom unsigned char Table_ch_0[1024] =
{
    125, 125, 124, 124, 123, 123, 122, 122, 122, 121,
    121, 120,........и т.д.
}


Подскажите, я в чем-то ошибся/забыл прописать, или это какая-то особенность микроконтроллера?

ЗЫ: пробовал переместить все таблицы в начало директивой:
#pragma romdata Table_ch_0 = 0х100
то таблицы читаются а вот проблемы начинаются с рабочим кодом, который выходит за пределы, вроде и работает но как то не так.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
evc
сообщение May 30 2009, 12:33
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 17-03-07
Из: Москва
Пользователь №: 26 266



Действительно память у этого контроллера 128К, но в байтах! А это, как раз и составляет 65536 программных слов (single word instructions), что означает максимальный адрес памяти - 0хFFFF. Выше этого адреса попадаете в начало адресной области, откуда и неожиданные результаты чтения таблицы расположеные выше 0х10000...
Рассмотрите внимательнее таблицу на первой странице даташита...

ПС Если скорость чтения не критична, я бы выкинул все таблицы во внешную память последовательного доступа.


--------------------
УЭР
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01347 секунд с 7
ELECTRONIX ©2004-2016