|
|
  |
Как заставить работать программу, Программа выдает ошибки при компиляции |
|
|
|
Sep 20 2011, 12:09
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Убрал так же и Код #include "text.h" // definitions for the text strings Осталось последние, ругается в файле CODESLCM на конструкцию Цитата const code unsigned char LCMCodes[LCM_CODES_LENGTH]=
|
|
|
|
|
Sep 20 2011, 14:06
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Вопрос по программе. Не могу понять, что такое PBYTE. Интересует часть кода: Цитата void WritePODS_RAM(void) { unsigned char i; Так устанавливается адрес во внешней памяти куда будут грузится данные с порта P0 SetPage(PODS_RAM_L_PAGE); Данные заносятся через циклы в массив PBYTE, как из массива PBYTE они попадают в порт не пойму. Не нашел я где и объявляется этот массив.
for(i=0;i<PODS_LENGTH;i++) PBYTE[i]=PODS[i]; for(i=PODS_LENGTH;i!=0;i+=2) { PBYTE[i]=0x10; PBYTE[i+1]=0x18; } SetPage(PODS_RAM_H_PAGE); i=0; do { PBYTE[i++]=0x10; PBYTE[i++]=0x18; } while(i!=0); }
|
|
|
|
|
Sep 20 2011, 15:07
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(Aleksandr_KPI @ Sep 20 2011, 18:06)  Не могу понять, что такое PBYTE. PBYTE - это указатель на начало области pdata (т.е. внешней памяти с адресацией 0x00-0x0FF). Определение PBYTE находится с файле ABSACC.H Поскольку PBYTE - указатель, а в языке Си указатели тесно связаны с массивами, то становится возможным обращаться к ячейкам (байтам) внешней памяти таким образом: PBYTE[Addr], где Addr - адрес ячейки (байта) внешней памяти. Вероятно, в Вашем устройстве некоторые внешние (по отношению к МК) устройства "откликаются" на обращение к ним как ячейкам внешней памяти, и таким образом в эти устройства заносится информация.
|
|
|
|
|
Sep 21 2011, 08:47
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Цитата Вероятно, в Вашем устройстве некоторые внешние (по отношению к МК) устройства "откликаются" на обращение к ним как ячейкам внешней памяти, и таким образом в эти устройства заносится информация. Странно, согласно описанию на AT89S8253 при работе с внешней памятью данные выдаются через порт Р0 (через Р2 не знаю что). При пошаговом выполнении программы порт P0 не меняется. Строка: Код for(i=0;i<OBZ_L_LENGTH;i++) PBYTE[i]=OBZ_L[i]; Заносит поочередно значения из массива OBZ_L в аккумулятор, как увидеть что данные заносятся во внешнюю память.
|
|
|
|
|
Sep 21 2011, 10:56
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Смотрю в симуляторе Keil Uvision 4. Да, тут еще два предупреждения при компилировании, сразу не обратил на них внимания: Цитата Build target 'Target 1' linking... *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?RESTARTXILINX?XILINX *** WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?INITEXTERNAL?EXTERNAL CALLER1: ?C_C51STARTUP CALLER2: ?PR?INTRPT0?INTERRUPT Program Size: data=22.3 xdata=0 code=1017 "MK1" - 0 Error(s), 2 Warning(s).
Сообщение отредактировал Aleksandr_KPI - Sep 21 2011, 11:05
|
|
|
|
|
Sep 21 2011, 11:16
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(Aleksandr_KPI @ Sep 21 2011, 14:56)  Смотрю в симуляторе Keil Uvision 4. Уж не знаю как uVision4, а в тройке прямо сказано: сигналы шины (адрес, данные, RD, WR...) не симулируются. Думаю, что и в четвёрке - тоже самое. Можно бы было посмотреть в окне "Memory", но в тройке область PDATA просматривать было нельзя - может в четвёрке можно? Это - уж сами посмотрите... Ежели и в четверке это не реализовано, то можно временно изменить PBYTE на XBYTE (не забудьте после вернуть всё назад!) и просматривать данные в окне "Мемоry" с префиксом адреса Х. Цитата(Aleksandr_KPI @ Sep 21 2011, 14:56)  два предупреждения при компилировании Это - линкер определил, что две функции в программе не вызываются и выбросил их, предупредив Вас об этом.
|
|
|
|
|
Sep 21 2011, 12:17
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Меня интересует как конкретно работает часть кода: Код for(i=0;i<OBZ_L_LENGTH;i++) PBYTE[i]=OBZ_L[i]; for(i=OBZ_L_LENGTH;i!=0;i+=2) { PBYTE[i]=0xC8; PBYTE[i+1]=0x92; } К примеру первое значение, что записывается во внешнею память это 11001000b (С8h). Оно должно передаваться через порт Р0. Второе значение это 10010b (12h). Не понятно, какое значение запишется в память при выдаче второго числа, во втором то разрядов меньше. Будет 00010010 или 11010010. Пока мне не понятен алгоритм работы. Зачам вообще заносят во внешнюю память числа 12h и 11h, если из списка полезными являются только C8,D0,D8,E0,48.... Не понятен фрагмент: Код for(i=OBZ_L_LENGTH;i!=0;i+=2) { PBYTE[i]=0xC8; PBYTE[i+1]=0x92; } Зачем забивать память до конца двумя ненужными числами.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|