Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 17.08.2007, 01:52  
avartemiy
Частый гость
 
Регистрация: 13.07.2007
Сообщений: 35
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
avartemiy на пути к лучшему
По умолчанию PIC18F.., HI-TECH PICC-18 и MPLAB

Помогите плиз, кто чем может!!!
Пишу программу для PIC18F452 в MPLAB 7.11 на С, компилятор HI-TECH PICC-18 v9.50.
Столкнулся с такой проблемой: при достижении общего объема проги примерно 60% (в том числе константы и сам код) компилятор в окне Output пишет:
Advisory[1207] : some of the command line options you are using are now obsolete
Advisory[1208] : use --help option or refer to the user manual for option details
Error[593] : can't find 0x401E words (0x401e withtotal) for psect "text" in segment "CODE"
BUILD FAILED: Fri Aug 17 00:30:52 2007

Т.е. не хватает памяти контроллера!!! НО!!!
При просмотре кода после компиляции, сам код (main и остальные подпрограммы) находится с адреса 0х4000 до 0х7FFF, а до 0х4000 примерно 8кБ памяти свободных (без учета констант)!!!
Константы компилятор вставляет в начале памяти.
Вопрос:
Почему компилятор не вставляет код раньше 0х4000 и если есть возможность, как это задать? (напр. в ассемблере есть директива code..., есть ли такая директива в С ?)
Буду очень благодарен!!!
Реклама:
avartemiy вне форума  
Непрочитано 17.08.2007, 07:44  
stri
Прописка
 
Аватар для stri
 
Регистрация: 11.07.2006
Адрес: Ru, Nsk
Сообщений: 249
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
stri на пути к лучшему
По умолчанию

ИМХО суть в том что ф-ция не может быть больше какого то определенного объема (на микрочип.ру обсуждали это). Надо бить программу на отдельные функции, причем не подпрограммы вызываемые из main, а объявленные в MPLAB в разделе source file (см.скриншот). Таким способом я забил в чип программу, занимающую 99.5% памяти pic18...а раньше больше 55% ни в какую не лезла

-- Прилагается рисунок: --
stri вне форума  
Непрочитано 17.08.2007, 08:42  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Фантастика ! Я бы другой компилер попробовал.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 17.08.2007, 12:16  
avartemiy
Частый гость
 
Регистрация: 13.07.2007
Сообщений: 35
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
avartemiy на пути к лучшему
По умолчанию

Сообщение от stri
Надо бить программу на отдельные функции, причем не подпрограммы вызываемые из main, а объявленные в MPLAB в разделе source file (см.скриншот).
Если можно, поподробнее как это сделать. (как правильно объявить эти функции в main ???).
Я попробовал добавить в Source Files самый большой файл system.с, после этого компилятор перестал видеть глобальные переменные, вызываемые в system.с, эти переменные объявлены в отдельных файлах vars.h, config.h.

-- Прилагается рисунок: --

-- Прилагается рисунок: --

avartemiy вне форума  
Непрочитано 17.08.2007, 12:28  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

На пальцах не объяснить. Переменные должны быть объявлены как extern , чтобы виделись с другого файла. Обявляешь в заголовочном файле, а его подключаешь через include . Присоедини проект.
urry вне форума  
Непрочитано 17.08.2007, 15:02  
stri
Прописка
 
Аватар для stri
 
Регистрация: 11.07.2006
Адрес: Ru, Nsk
Сообщений: 249
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
stri на пути к лучшему
По умолчанию

Допустим есть файл main.c, в нем есть всякие разные функции, переменные и тп. Но все они занимают одно адресное пространство. Допустим место в нем кончилось. Добавляю новый с файл, пишу как обычно Include pic18.h пишу там функцию (к примеру void INIT()), в файле с main где include пишу: extern void INIT(); . И теперь могу из любого места main ее вызывать. Но т.к. у той функции свое пространство переменных, то если даже я в обоих функциях сделаю какую нить переменную типа char P, то функция main будет видеть свое значение этой переменной, а INIT свое, т.к. по сути это две разных переменных с одним именем. Чтобы они работали с одной переменной, их надо тоже объявить как extern char p;
stri вне форума  
Непрочитано 17.08.2007, 15:05  
stri
Прописка
 
Аватар для stri
 
Регистрация: 11.07.2006
Адрес: Ru, Nsk
Сообщений: 249
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
stri на пути к лучшему
По умолчанию

в твоем случае, если просто в *.h файле сделать переменные доступные обеим функциям extern должно быть достаточно...
stri вне форума  
Непрочитано 18.08.2007, 00:01  
avartemiy
Частый гость
 
Регистрация: 13.07.2007
Сообщений: 35
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
avartemiy на пути к лучшему
По умолчанию

Сообщение от stri
Допустим есть файл main.c, в нем есть всякие разные функции, переменные и тп. Но все они занимают одно адресное пространство. Допустим место в нем кончилось. Добавляю новый с файл, пишу как обычно Include pic18.h пишу там функцию (к примеру void INIT()), в файле с main где include пишу: extern void INIT(); . И теперь могу из любого места main ее вызывать. Но т.к. у той функции свое пространство переменных, то если даже я в обоих функциях сделаю какую нить переменную типа char P, то функция main будет видеть свое значение этой переменной, а INIT свое, т.к. по сути это две разных переменных с одним именем. Чтобы они работали с одной переменной, их надо тоже объявить как extern char p;
Сделал все как было указано, но, похоже, этого не достаточно.
Создал тестовый проект - вот результат, переменную "knopka" компил. все равно не видит (рис.)
Ниже прилагаю этот проект. Если не сложно, посмотрите что не так и отпишите пожалуйста.
А может еще какие нить настройки компилятора менять надо?
А может мне компилятор действительно поменять надо?
stri, каким компил. пользуешся?

-- Прилагается рисунок: --


Прикрепленный файл: 2151346.rar
avartemiy вне форума  
Непрочитано 18.08.2007, 01:00  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

объяви как локальную. В любом сишном, она все равно будет глобальной. 18 компилер у меня на работе, дома только под 16 пики. У меня откомпилилось.

Прикрепленный файл: 796945.rar
urry вне форума  
Непрочитано 19.08.2007, 12:39  
DL36
Вид на жительство
 
Регистрация: 06.10.2006
Сообщений: 329
Сказал спасибо: 4
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
DL36 на пути к лучшему
По умолчанию

››А может мне компилятор действительно поменять надо?
››stri, каким компил. пользуешся?[/quote]
Я чуть поправил
Как ни удивительно, 8.35 как правило дает самый маленький код.

Прикрепленный файл: 5479760.rar
DL36 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си, IAR AVR & Hi Tech PICC picavr Микроконтроллеры, АЦП, память и т.д 47 25.02.2014 12:20
HI-TECH PICC™ Enterprise Edition (new!!!)??? shihaidong Микроконтроллеры, АЦП, память и т.д 14 30.12.2011 15:45
Библиотеки LCD 44780 на С CCS или HI-TECH PICC для PIC16 vsvetlov Микроконтроллеры, АЦП, память и т.д 15 27.10.2009 08:03
MPLAB и Hi-Tech 3ann Микроконтроллеры, АЦП, память и т.д 0 14.07.2009 15:17
Подскажите плиз. Чё то у меня MPLAB с HI-TECH не соединяется Komanda Микроконтроллеры, АЦП, память и т.д 4 02.12.2005 20:21


Часовой пояс GMT +4, время: 17:34.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot