Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
22.01.2011, 16:37
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
7Fantomas7, Пиши переменные прямо в h файл. Область видимости будет глобальной
__________________
Найди путь или проложи сам!
|
|
|
|
22.01.2011, 16:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
Может так будет понятно. Во вложении проект.
Во вкладке notes то что я пытаюсь развалять.
Проект содержит 3 файла uprablenieCPU_simulation, peremenie_const, start_310. Не трудно догадаться что peremenie_const.c содержит переменные, сейчас 2 шт. При проверке на ошибки uprablenieCPU_simulation.c где расположена main ошибок нет, при проверке на ошибки start_310 ошибки есть, ненаходит переменные и не находит delay. Как решить проблему?
|
|
|
|
22.01.2011, 16:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
MasterMushi,
Понял, вот так и сразу надо было. Сейчас попробую. А можно и функции писать только в h файлы без сишных и просто глобально приинклюдивать.
|
|
|
|
22.01.2011, 16:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
В путях проекта прописать , где находится 310 Project-Configure- C compiler-Paths
и в Start310.c добавить #include ‹delay.h›
#include ‹mega8535.h›
и zadanie_I zadanie_U нигде не определены
peremenie_konst.c не то. нужно сделать peremenie_konst.h по всем правилам, туда вставить определения переменных (без extern - extern- говорит, что нужно искать в хидерах где-то)
в "upravlenie CPU_Simulation.c" вставить #include "peremenie_konst.h",
сам файл
//--- peremenie_konst.h
...
unsigned char zadanie_I; //переменная задание для источника тока
unsigned char zadanie_U; //переменная задание для источника напряжения
//...
и затем в start_310.c
вставить
extern unsigned char zadanie_I; //переменная задание для источника тока
extern unsigned char zadanie_U; //переменная задание для источника напряжения
Вот исправленный , только путь подправьте к Functions , я свой абсолютный поставил
Последний раз редактировалось OlegNZH; 22.01.2011 в 17:22.
|
|
|
|
22.01.2011, 17:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
Цитата:
|
В путях проекта прописать , где находится 310
|
Прописан это в конфигураторе в inpyt files видно, проверил еще раз. Просто видимо путь не соответсятвует на Вашем компьютере.
Цитата:
|
и в Start310.c добавить #include ‹delay.h›
|
Тоесть во все файлы подобного рода нужно приладить необходимые хидеры?
Цитата:
|
и zadanie_I zadanie_U нигде не определены
|
Так это и есть те самые глобальные переменные которые я не знаю как вынести в отдельный файл и чтоб они были видны во всех функциях. По непосредственно функциям вопросов нет, я уже понял.
MasterMushi,
Цитата:
|
Пиши переменные прямо в h файл. Область видимости будет глобальной
|
сделал так
#ifndef _peremenie_const_INCLUDED_
#define _peremenie_const_INCLUDED_
#pragma used+
extern unsigned char zadanie_I; //переменная задание для источника тока
extern unsigned char zadanie_U; //переменная задание для источника напряжения
#pragma used-
#endif
Чет бока не видит их start_310
Или их тоже в этой функции приинклюдить нужно?
Последний раз редактировалось 7Fantomas7; 22.01.2011 в 17:26.
|
|
|
|
22.01.2011, 17:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
не в input files а в Project-Configure- C compiler-Paths .
Переменные я уже вынес в peremenie_konst.h (peremenie_konst.с- не нужен - удалить из input files , peremenie_konst.h прописан через #include)
Последний раз редактировалось OlegNZH; 22.01.2011 в 17:29.
|
|
|
|
22.01.2011, 19:55
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
7Fantomas7, Не пиши ты extern и прагмовые. Если используеш CVAVR то твой код должен выглядеть так:
PHP код:
|
//Char в CVAVR по умолчанию UNSIGNED тоесть можно не терять времени и сокращать тексты.
#ifndef _peremenie_const_INCLUDED_
#define _peremenie_const_INCLUDED_
char zadanie_I; //переменная задание для источника тока
char zadanie_U; //переменная задание для источника напряжения
#endif
|
В языке С заголовочный файл имеет фактически такой же значение как и просто С файл. Тоесть прямо в него можно писать тела функций.
Вывод тел функций и переменных во внешний файл выгоден исключительно если планируется дистрибьюция твоего кода как пакета прекомпилированных библиотек (object code libs).
Структурируя проект не надо сильно увлекаться связками файлов иначе в конце получится фатально неудобная конструкция которая мало того что будет дольше компилироваться так еще и будет код жрать больше стека.
CVAVR 2.05 кстати более оптимизирован уже по финальному машиному коду. Так что советую писать на нем.
Да и чуть не забыл - в CVAVR все переменные обьявляются как обязательные. Даже если вы нигде не упомянули в коде объявленную переменную, линкер ее не выкинет.
Не могу сказать того же про функции. Линкер в 2.05 сильно режет функции поэтому если уверены что будет внешний или хитрый вызов вашей функции через передачу в АСМ коде, советую сделать ее объявление "явным"
__________________
Найди путь или проложи сам!
|
|
|
|
22.01.2011, 20:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
Ну и каким макаром без extern для глобальных обойтись? Интересно...
(а код, который привели-я именно так и подправил - post #24)
|
|
|
|
22.01.2011, 20:20
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
OlegNZH,
Если мы переменные обьявляем напрямую в заголовочном файле без использования С файла с "телами" переменных, то extern не нужен.
Внешние С файлы удобно если ничего не будет меняться вообще. А если надо добавить в библиотеку переменную - придется править заголовочный файл и С файл. Это 2 закладки в редакторе. Добавим 3-4 библиотеки и получаем уже 6-8 закладок. Далее любое изменение похоже на садо мазохизм. Перекликивать закладки, скролить куски кода, править возвращаться из за ошибки все по новой.
Если все писать прямо в заголовочных то и текста меньше и в редакторе удобнее все это дело править.
__________________
Найди путь или проложи сам!
|
|
|
|
22.01.2011, 20:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
А каким образом обращаться к этим глобальным переменным из 2- разных файлов? делать в каждом #include ‹var_const.h›? - не пойдёт- 2 раза получится определение переменных -redefined! Это в CV128 было хитро- там выделялся Главный файл main.c , и в проекте подфайлы, затем перед компиляцией все! файлы собирались в ОДИН!(к main.c) и потом уже компилировались. Там-да , без extern-a - всё находится в одной куче! нет никаких перекрёстных ссылок. В 204 уже всё более-менее честно.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:45.
|
|