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

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

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

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

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

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

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

 
Опции темы

PIC18F.., HI-TECH PICC-18 и MPLAB

Непрочитано 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.RUN
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,552
Сказал спасибо: 75
Сказали Спасибо 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.RUN
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 107 раз(а) в 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.RUN
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 107 раз(а) в 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, время: 07:44.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.