Аvrstudio/c#/песочница
21.12.2012, 14:53
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Аvrstudio/c#/песочница
В общем, чуть более крупный проект на C# и желание "сделать красиво" вогнали в тупик. Попробую объяснить.
Хочу раскидать задачи (как бы - работу с разными модулями) - по разным .c файлам. Возникает проблема работы с общими переменными.
Я так понимаю, что avrstudio автоматом инклайдит .c файлы из проекта. Поэтому #include "module.c" не имеет смысла.
Чтобы обращаться из main.c и module.c к одной и той же переменной (например - вачдог wd) я должен создать заголовочный файл module.h (по смыслу), прописать в нем volatile uint16_t wd, а этот файл #include module.h как в module.c так и в main.c (иначе компилятор НЕ видит переменную и ругается).
Однако и так не все хорошо в нашем королевстве. Я вообще не понимаю что происходит. Перешиваю прибор - вроде как работает. Передергиваю питание - и явно не могу получить доступ (судя по отладочным сообщениям) к одной и той же переменной. Как будто заведены две разные переменные и каждый .c файл работает со своей.
Загадка - почему я должен в main.c инклайдить module.h чтобы увидеть переменную. Ведь студия должна автоматом прицепить module.c а в нем уже прописано include module.h, и это дело значит должно автоматом увидется из main.c?
В итоге, чтобы ликвидировать бардак который успел развести, мне нужно узнать - как правильно использовать общие переменные в разных .c файлах. Поможете?
Последний раз редактировалось whoim; 21.12.2012 в 14:59.
|
|
|
|
21.12.2012, 15:03
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,011
Сказал спасибо: 0
Сказали Спасибо 4,955 раз(а) в 2,379 сообщении(ях)
|
Re: avrstudio/c#/песочница
whoim,
как там локальной/глобальной видимостью? мож в главный хидер переместить?
|
|
|
|
21.12.2012, 15:15
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.06.2005
Сообщений: 1,387
Сказал спасибо: 19
Сказали Спасибо 210 раз(а) в 156 сообщении(ях)
|
Re: avrstudio/c#/песочница
Вы путаете компилятор и линкер.
Компилятор С видит только то, что объявлено в файле, плюс то, что описано в заголовках, подключаемых с помощью #include.
Линкер компонует объектные файлы, полученные от компилятора C в исполняемый образ. Видимость между объектными файлами полная.
|
|
|
|
21.12.2012, 15:20
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: avrstudio/c#/песочница
volatile / static юзаю, но пока не закончил ловить глюки и искать закономерность.. Со static volatile получается, что я что то меняю в одном файле, а в другом значения прежние.. То есть как будто две разные переменные для каждого файла
Хлавный хи
|
|
|
|
21.12.2012, 15:22
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: avrstudio/c#/песочница
Сообщение от TEHb
|
|
Вы путаете компилятор и линкер
|
запросто
Сообщение от TEHb
|
|
Видимость между объектными файлами полная
|
и тем не менее, как мне правильно решить задачу? увидеть одну и ту же переменную в разных C файлах?
|
|
|
|
21.12.2012, 15:31
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: avrstudio/c#/песочница
|
|
|
|
21.12.2012, 15:46
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.06.2005
Сообщений: 1,387
Сказал спасибо: 19
Сказали Спасибо 210 раз(а) в 156 сообщении(ях)
|
Re: avrstudio/c#/песочница
Как-то так.
a.h
a.c
|
Код:
|
#include "a.h"
int a; |
b.c
|
Код:
|
#include "a.h"
void main()
{ a = 1;
} |
Почитайте книжку по C, очень важно понимать язык. Экспериментально не до всего можно дойти.
|
|
|
|
21.12.2012, 16:07
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: avrstudio/c#/песочница
TEHb, спасибо. На текущий момент я убрал вообще все определения - static, volatile и явно стало лучше. пошел читать по ссылке выше и гуглить extern
|
|
|
|
21.12.2012, 16:13
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: avrstudio/c#/песочница
|
|
|
|
21.12.2012, 16:27
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 14.03.2005
Адрес: Москва
Сообщений: 1,063
Сказал спасибо: 729
Сказали Спасибо 1,658 раз(а) в 439 сообщении(ях)
|
Re: avrstudio/c#/песочница
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Песочница по С
|
RY723 |
Электроника - это просто |
0 |
27.02.2011 14:05 |
Часовой пояс GMT +4, время: 18:49.
|
|