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

 
 
> Как заставить работать программу, Программа выдает ошибки при компиляции
Aleksandr_KPI
сообщение Sep 19 2011, 14:56
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Здравствуйте, подскажите почему я не могу скомпилировать программу в Keil Uvision. Она постоянно выдает ошибку :

*** ERROR L210: I/O ERROR ON INPUT FILE:
EXCEPTION 0021H: PATH OR FILE NOT FOUND
FILE: main.obj

Target not created

Как создать файлы с расширением .obj и заставить ее работать.

Заранее благодарю за ответ.
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3 >  
Start new topic
Ответов (15 - 29)
Палыч
сообщение Sep 20 2011, 11:38
Сообщение #16


Гуру
******

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



Цитата(Aleksandr_KPI @ Sep 20 2011, 15:31) *
Чуть помогло, но теперь он ругается на REG320.H, судя по комментариям это файл с регистрами специальных функций. В папке Atmel его нет.

Это - для МК DS80C320 от Dallas. В файле Interrupt.c строка, подключающая этот файл - излишняя.
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Sep 20 2011, 12:09
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Убрал так же и

Код
#include "text.h"                        // definitions for the text strings


Осталось последние, ругается в файле CODESLCM на конструкцию

Цитата
const code unsigned char LCMCodes[LCM_CODES_LENGTH]=
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 20 2011, 12:18
Сообщение #18


Гуру
******

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



Цитата(Aleksandr_KPI @ Sep 20 2011, 16:09) *
ругается в файле CODESLCM на конструкцию

Про это я уже выше говорил: во всех файлах "codeXXXXX.h" нужно поменять местами const и code.
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Sep 20 2011, 12:45
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Понял. Огромное СПАСИБО ))))), скомпилировал.
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Sep 20 2011, 14:06
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 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);
}


Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 20 2011, 15:07
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 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 - адрес ячейки (байта) внешней памяти.

Вероятно, в Вашем устройстве некоторые внешние (по отношению к МК) устройства "откликаются" на обращение к ним как ячейкам внешней памяти, и таким образом в эти устройства заносится информация.
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Sep 21 2011, 08:47
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 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 в аккумулятор, как увидеть что данные заносятся во внешнюю память.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 21 2011, 10:46
Сообщение #23


Гуру
******

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



Цитата(Aleksandr_KPI @ Sep 21 2011, 12:47) *
При пошаговом выполнении программы порт P0 не меняется.
... как увидеть что данные заносятся во внешнюю память.

Это - Вы где смотрите? "В железе" (макетке)? Симуляторе, каком?
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Sep 21 2011, 10:56
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 21 2011, 11:16
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 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) *
два предупреждения при компилировании

Это - линкер определил, что две функции в программе не вызываются и выбросил их, предупредив Вас об этом.
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Sep 21 2011, 11:23
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



А в чем можно посмотреть сигналы шины (адрес, данные, RD, WR...). Что бы не что бы не изощрятся с PBYTE и XBYTE?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 21 2011, 11:43
Сообщение #27


Гуру
******

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



Цитата(Aleksandr_KPI @ Sep 21 2011, 15:23) *
А в чем можно посмотреть сигналы шины (адрес, данные, RD, WR...). Что бы не что бы не изощрятся с PBYTE и XBYTE?

Я считал: Вы хотите видеть значения, которые выдаются в память... А, так... Что на эти сигналы смотреть? Вы не верите Atmel'овцам, которые писали документацию на МК? Хотите уличить их во лжи? Вряд ли удастся.
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Sep 21 2011, 12:17
Сообщение #28


Местный
***

Группа: Свой
Сообщений: 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;                
    }


Зачем забивать память до конца двумя ненужными числами.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 21 2011, 13:17
Сообщение #29


Гуру
******

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



Цитата(Aleksandr_KPI @ Sep 21 2011, 16:17) *
Второе значение это 10010b (12h). Не понятно, какое значение запишется в память при выдаче второго числа, во втором то разрядов меньше. Будет 00010010 или 11010010.

Что значит "разрядов меньше"? Применяемый Вами МК - восьмибитный! Передаваться "во вне" будут все восемь бит! Для значения 12h это 00010010.

Все остальные вопросы - к разработчику. Если нет "живого", то смотреть документацию на изделие: что и как к МК подключено, смотреть документацию на это подключенное "что-то", определять как МК с этим "что-то" взаимодействует...
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Sep 21 2011, 14:05
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Собственно это что-что есть ПЛИС. )))) Думаю я более мение разобрался, СПАСИБО.
Go to the top of the page
 
+Quote Post

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

 


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


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