Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как заставить работать программу
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Aleksandr_KPI
Здравствуйте, подскажите почему я не могу скомпилировать программу в Keil Uvision. Она постоянно выдает ошибку :

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

Target not created

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

Заранее благодарю за ответ.
Палыч
А, не присутствуют ли ассемблерные вставки в текстах программ?
aaarrr
Или кириллица в путях, например.
Палыч
Цитата(aaarrr @ Sep 19 2011, 20:24) *
Или кириллица в путях, например.

В последних версиях это пофиксено. Хорошо бы знать версию, которую использует ТС.
Aleksandr_KPI
Цитата
А, не присутствуют ли ассемблерные вставки в текстах программ?


Не присутствуют, все написано на Си, но в папке программы есть файлы с расширением .h. Не знаю что такое, в них тоже код на Си.

Цитата
В последних версиях это пофиксено. Хорошо бы знать версию, которую использует ТС.


Использую Keil Uvision3 V3.6
MaslovVG
Цитата(Aleksandr_KPI @ Sep 20 2011, 11:27) *
Использую Keil Uvision3 V3.6

А у пользователя есть права на запись в паку результатов. Т.е. на путь .....\main.obj
Aleksandr_KPI
Я убрал из свойств папки пункт только чтение.....

При выполнении компиляции постоянно вылетает окно: C51/CX51 Compiler - обнаружена ошибка. Приложение будет закрыто и так для всех файлов .с. Сама программа после ругательств тем не мение не закрывается.

Вот собственно сам проект.
Палыч
Цитата(Aleksandr_KPI @ Sep 20 2011, 12:08) *
Вот собственно сам проект.

Замените const code на code const
Aleksandr_KPI
С проектом только разбираюсь, а не пишу. Поясните подробней.
Палыч
Цитата(Aleksandr_KPI @ Sep 20 2011, 13:02) *
Поясните подробней.

Попробовал собрать Ваш проект. Выдаёт ошибки в файлах codeХХХХХ.h, которые исправляются приведенным выше способом.

То, что при трансляции вываливается окно с сообщением - очень плохо... Надо с этим бороться... Лицензия, случайно, не кончилась? Или вирус над транслятором "поработал"? Или поставлен "криво"...
Aleksandr_KPI
Поставил Keil Uvision 4. Никаких окон при компиляции не выскакивает, но ругается на хед файли <reg8952.h>, <REG320.H>. В папке проекта их нет, к чему они могут относится?

И еще выдает такие ошибки, такое впечатление что компилятор не видит каких то библиотек.

Цитата
EXTERNAL.H(1): error C202: 'P1': undefined identifier
EXTERNAL.H(2): error C202: 'P1': undefined identifier
XILINX.H(3): error C202: 'P2': undefined identifier
MAIN.C(38): error C202: 'PCON': undefined identifier
compiling Memory.c...
CODESLCM.H(2): error C141: syntax error near 'unsigned'
CODESADRPODS.H(4): error C141: syntax error near 'unsigned'
MEMORY.C(40): error C202: 'P2': undefined identifier
compiling Timer.c...
TIMER.C(10): error C202: 'TMOD': undefined identifier
TIMER.C(12): error C202: 'PT0': undefined identifier
TIMER.C(17): error C202: 'TL0': undefined identifier
TIMER.C(18): error C202: 'TH0': undefined identifier
TIMER.C(27): error C202: 'EA': undefined identifier
TIMER.C(28): error C202: 'ET0': undefined identifier
TIMER.C(29): error C202: 'TR0': undefined identifier
TIMER.C(34): error C202: 'TR0': undefined identifier
TIMER.C(35): error C202: 'ET0': undefined identifier
TIMER.C(40): error C202: 'TF0': undefined identifier
compiling Interrupt.c...
Interrupt.c(1): warning C318: can't open file 'reg8952.h'
Interrupt.c(2): warning C318: can't open file 'REG320.H'
Interrupt.c(4): warning C318: can't open file 'text.h'
XILINX.H(3): error C202: 'P2': undefined identifier
EXTERNAL.H(1): error C202: 'P1': undefined identifier
EXTERNAL.H(2): error C202: 'P1': undefined identifier
INTERRUPT.C(20): error C202: 'INT0': undefined identifier
INTERRUPT.C(25): error C202: 'IT0': undefined identifier
INTERRUPT.C(26): error C202: 'EA': undefined identifier
INTERRUPT.C(27): error C202: 'EX0': undefined identifier
compiling External.c...
External.c(1): warning C318: can't open file 'reg8952.h'
EXTERNAL.H(1): error C202: 'P1': undefined identifier
EXTERNAL.H(2): error C202: 'P1': undefined identifier
EXTERNAL.C(5): error C202: 'P1': undefined identifier
EXTERNAL.C(6): error C202: 'P1': undefined identifier
EXTERNAL.C(10): error C202: 'RstMOC': undefined identifier
EXTERNAL.C(12): error C202: 'RstMOC': undefined identifier
EXTERNAL.C(18): error C202: 'RstMNC': undefined identifier
EXTERNAL.C(20): error C202: 'RstMNC': undefined identifier
EXTERNAL.C(26): error C202: 'RstMNC': undefined identifier
EXTERNAL.C(27): error C202: 'RstMOC': undefined identifier
EXTERNAL.C(29): error C202: 'RstMNC': undefined identifier
EXTERNAL.C(30): error C202: 'RstMOC': undefined identifier
EXTERNAL.C(40): error C202: 'GotovMNC': undefined identifier
EXTERNAL.C(42): error C202: 'GotovMOC': undefined identifier
EXTERNAL.C(44): error C202: 'GotovMNC': undefined identifier
compiling Xilinx.c...
XILINX.H(3): error C202: 'P2': undefined identifier
XILINX.C(5): error C202: 'P2': undefined identifier
XILINX.C(9): error C202: 'P2': undefined identifier
XILINX.C(11): error C202: 'P2': undefined identifier
XILINX.C(17): error C202: 'XilinxDone': undefined identifier
XILINX.C(29): error C202: 'XilinxDone': undefined identifier

Палыч
Цитата(Aleksandr_KPI @ Sep 20 2011, 14:53) *
Поставил Keil Uvision 4. Никаких окон при компиляции не выскакивает, но ругается на хед файли <reg8952.h>, <REG320.H>. В папке проекта их нет, к чему они могут относится?

Они относятся к тому МК для которого Вы разрабатываете программу. В этих файлах как раз и определены те регистры, на которые ругается компилятор. Странно, что в Вашем проекте используются два разных файла... Под какой МК делается Ваш проект?
Aleksandr_KPI
Цитата
Под какой МК делается Ваш проект?


AT89S8253

Почему же тогда компилятор не видит эти файли, может нужно где-то пути к ним прописать ?
Палыч
Цитата(Aleksandr_KPI @ Sep 20 2011, 15:08) *
AT89S8253

Посмотрите в папке Keil\C51\Inc\Atmel. Наидите файл для Вашего МК и замените в программе: поставьте имя найденного файла в соответствующие include.
Aleksandr_KPI
Чуть помогло, но теперь он ругается на REG320.H, судя по комментариям это файл с регистрами специальных функций. В папке Atmel его нет.
Нашел файл Reg51, там прописаны регистры SFR, прописал его в программе пишет ошибки:
Код
E:\KEIL UVISION 4\C51\INC\ATMEL\REG51.H(13): error C231: 'P0': redefinition
E:\KEIL UVISION 4\C51\INC\ATMEL\REG51.H(14): error C231: 'P1': redefinition
E:\KEIL UVISION 4\C51\INC\ATMEL\REG51.H(15): error C231: 'P2': redefinition
E:\KEIL UVISION 4\C51\INC\ATMEL\REG51.H(16): error C231: 'P3': redefinition

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

Это - для МК DS80C320 от Dallas. В файле Interrupt.c строка, подключающая этот файл - излишняя.
Aleksandr_KPI
Убрал так же и

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


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

Цитата
const code unsigned char LCMCodes[LCM_CODES_LENGTH]=
Палыч
Цитата(Aleksandr_KPI @ Sep 20 2011, 16:09) *
ругается в файле CODESLCM на конструкцию

Про это я уже выше говорил: во всех файлах "codeXXXXX.h" нужно поменять местами const и code.
Aleksandr_KPI
Понял. Огромное СПАСИБО ))))), скомпилировал.
Aleksandr_KPI
Вопрос по программе.

Не могу понять, что такое 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);
}


Палыч
Цитата(Aleksandr_KPI @ Sep 20 2011, 18:06) *
Не могу понять, что такое PBYTE.

PBYTE - это указатель на начало области pdata (т.е. внешней памяти с адресацией 0x00-0x0FF). Определение PBYTE находится с файле ABSACC.H
Поскольку PBYTE - указатель, а в языке Си указатели тесно связаны с массивами, то становится возможным обращаться к ячейкам (байтам) внешней памяти таким образом:

PBYTE[Addr], где Addr - адрес ячейки (байта) внешней памяти.

Вероятно, в Вашем устройстве некоторые внешние (по отношению к МК) устройства "откликаются" на обращение к ним как ячейкам внешней памяти, и таким образом в эти устройства заносится информация.
Aleksandr_KPI
Цитата
Вероятно, в Вашем устройстве некоторые внешние (по отношению к МК) устройства "откликаются" на обращение к ним как ячейкам внешней памяти, и таким образом в эти устройства заносится информация.


Странно, согласно описанию на AT89S8253 при работе с внешней памятью данные выдаются через порт Р0 (через Р2 не знаю что). При пошаговом выполнении программы порт P0 не меняется.
Строка:
Код
for(i=0;i<OBZ_L_LENGTH;i++)
        PBYTE[i]=OBZ_L[i];


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

Это - Вы где смотрите? "В железе" (макетке)? Симуляторе, каком?
Aleksandr_KPI
Смотрю в симуляторе 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, 14:56) *
Смотрю в симуляторе Keil Uvision 4.

Уж не знаю как uVision4, а в тройке прямо сказано: сигналы шины (адрес, данные, RD, WR...) не симулируются. Думаю, что и в четвёрке - тоже самое. Можно бы было посмотреть в окне "Memory", но в тройке область PDATA просматривать было нельзя - может в четвёрке можно? Это - уж сами посмотрите...
Ежели и в четверке это не реализовано, то можно временно изменить PBYTE на XBYTE (не забудьте после вернуть всё назад!) и просматривать данные в окне "Мемоry" с префиксом адреса Х.

Цитата(Aleksandr_KPI @ Sep 21 2011, 14:56) *
два предупреждения при компилировании

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

Я считал: Вы хотите видеть значения, которые выдаются в память... А, так... Что на эти сигналы смотреть? Вы не верите Atmel'овцам, которые писали документацию на МК? Хотите уличить их во лжи? Вряд ли удастся.
Aleksandr_KPI
Меня интересует как конкретно работает часть кода:

Код
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;                
    }


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

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

Все остальные вопросы - к разработчику. Если нет "живого", то смотреть документацию на изделие: что и как к МК подключено, смотреть документацию на это подключенное "что-то", определять как МК с этим "что-то" взаимодействует...
Aleksandr_KPI
Собственно это что-что есть ПЛИС. )))) Думаю я более мение разобрался, СПАСИБО.
Палыч
Цитата(Aleksandr_KPI @ Sep 21 2011, 12:47) *
...как увидеть что данные заносятся во внешнюю память.

Сейчас посмотрел в uVision4: так же, как и в тройке область PDATA в окне "Memory" посмотреть нельзя, так что, если желаете видеть переданные данные в этом окне, то нужно временно заменить PBYTE на XBYTE.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.