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

 
 
 
Reply to this topicStart new topic
> как загрузить данные в xram МК C8051F320, виснет программа при запуске
NikP
сообщение Aug 27 2009, 12:21
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-08-05
Пользователь №: 7 944



Столкнулся с непонятным для меня явлением при работе с памятью c8051f320.
Полазил в разных форумах наткнулся на примерно похожие заморочки у других и проблему обошел.
Но метод мне не понравился, так что если кто сможет разъяснить что может происходить внутри контроллера, чтоб было понятно для середнячка в программировании и знании МК фирмы Силаб, а так же подсказать ,как выйти из данной ситуации, буду очень благодарен.
Задача практическая- надо выводить символы в графический ЖКИ.Решил поступить просто-
сформировать массивы [2]*[10] байт в памяти и выводить по мере необходимости в нужную область ЖКИ.
В даташите указано, что имеется 1024 байта XRAM, мне вполне хватает и половины.
Работаю с Cygnal IDE v 1_85.Когда скомпилировал,собрал(build) и запустил программу - все зависло. Выяснилось,что при формировании двух массивов программа работает как задумано(IDE показывает, что у меня xdata=144), а при добавлении еще одного массива (xdata=164)происходит зависание.
Чтоб не загромождать привожу основные моменты программы
//---------------------
// Global CONSTANTS
//----------------------

xdata unsigned char D0[2][10]={ {0xFC,..,0xFC},{0x3F,..,0x3F} };
xdata unsigned char D1[2][10]={ {..},{..} };
.
.
xdata unsigned char D20[2][10]={ {..},{..} };

//----------------------
// Main Routine
//-----------------------
void main(void)
{
PCA0MD &= ~0x40; // Disable Watchdog timer
Sysclk_Init();
Port_Init();
LCD_Init();

while (1)
{

WriteD(D0, 0);
WriteD(D1, 15);
WriteD(D2, 30);

.
.
}
}

Внес инициализацию D0[2][10]..D20[2][10] в модуль while (1){...} все заработало. Однако получается, что при этом программа выполняет заполнение массивов в каждом цикле, т.е. тратит уйму времени. Для моей задачи конечно пойдет, но как-то некрасиво.

Вопросы:
1.По какой причине может виснуть программа?
Зависание посмотрел в отладчике- размещал точки останова в разных местах программы. Однако в окошке, где программа расписана на си останов не происходит даже у строки PCA0MD &= ~0x40; В окошке дизассемблера видно, что маркер бегает по какому-то циклу, но в какой ветке я разобрать не смог.
2.Можно ли обойти грабли покрасивее?
Go to the top of the page
 
+Quote Post
barabek
сообщение Aug 28 2009, 02:31
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Очень часто бывает, что срабатывает watchdog. Посмотрите при отладке регистр сброса (кажется C51 reg или что-то в этом роде во вкладке view) и сможете определить причину последнего сброса. Дело в том, что перед выполнением, грубо говоря, стороки main(void) еще подстегивается стандартный файл startup.a51. Он отвечает за инициализацию переменных. Соответственно чем их больше, тем больше вероятность не успеть отключить watchdog. Действия. Копируйте в папку с проектом указанный файл, добавляете его в проект с обязательной компиляцией. Далее добавляете строки :
Код
?C_STARTUP:    LJMP    STARTUP1

        RSEG    ?C_C51STARTUP

STARTUP1:    
;Начало добавочных строк
    ANL 0D9H, #0BFH ;сбрасываем вотчдог
;    mov 0b2h, #087h    ;запускаем ген на высокую скорость
;конец добавочных строк

IF IDATALEN <> 0

Только проверьте, потому что в моем примере строки для F410, у Вас могут быть другие адреса и нужные значения.
Go to the top of the page
 
+Quote Post
NikP
сообщение Aug 28 2009, 11:02
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-08-05
Пользователь №: 7 944



Большое спасибо barabek за дельный совет. Сделал вставку по Вашему совету, даже менять ничего не пришлось , и все заработало. Кроме прочего, порадовался , что живу в нашей стране: в Питере получить дельный совет из Владика - это круто !!
В порядке дополнения. В Cygnal IDE причину последнего сброса показывает регистр RSTSRC , что под кнопочкой - "8051"
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 14:50
Рейтинг@Mail.ru


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