|
Простой вопрос по инициализации переменной sfr, Объявление внешней sfr переменной в С |
|
|
|
Mar 22 2013, 15:00
|

Частый гость
 
Группа: Свой
Сообщений: 156
Регистрация: 18-02-13
Из: Киев
Пользователь №: 75 678

|
Сильно не пинайте, на С перешел неделю назад, пишу в MPLAB X IDE 1.7
Как объявить sfr переменную в одном файле, а инициализировать в другом (например, первый файл библиотечный - lib.c, второй рабочий - main.c) Например, мне нужно чтобы lib.c работал с регистром PORTB. В lib.c я делаю объявление extern volatile unsigned int DATAPORT __attribute__ ((__sfr__));
Как мне теперь инициализировать ее в main.c? И еще вопрос, как делать объявление и инициализацию, в случае если нужно работать с переменной, которая ссылается на бит в sfr регистре?
з.ы. Хелп в MPLAB X очень тяжелый для восприятия, по большей чати отправляет к ANSI стандарту С (литературу по С я курю параллельно)
Сообщение отредактировал vassabi - Mar 22 2013, 15:01
|
|
|
|
|
 |
Ответов
|
Mar 24 2013, 19:11
|
Частый гость
 
Группа: Свой
Сообщений: 170
Регистрация: 30-06-05
Из: Киев
Пользователь №: 6 426

|
Цитата(vassabi @ Mar 24 2013, 23:00)  править хеадер как-то не корректно (наверное). Править хедер не стоит Сделайте что-то вроде следующего #define LCD_PORT PORTB и далее везде в модуле LCD работайте не напрямую, а через макрос LCD_PORT
|
|
|
|
|
Mar 24 2013, 19:16
|

Частый гость
 
Группа: Свой
Сообщений: 156
Регистрация: 18-02-13
Из: Киев
Пользователь №: 75 678

|
Цитата(jack_avenger @ Mar 24 2013, 21:11)  #define LCD_PORT PORTB и далее везде в модуле LCD работайте не напрямую, а через макрос LCD_PORT Ото ж, я так и делал, только если файлы лежат в разных проектах, то компилятор ее не видит (в данном случае lib.c прикручен к рабочему проекту как библиотека). Похоже это приколы этого компилятора или, что скорее всего, я еще не до конца разобрался... Вот только не понятно, все таки как extern переменную инициализировать не значением, а адресом, в данном случае sfr регистра.
|
|
|
|
|
Mar 24 2013, 19:21
|
Частый гость
 
Группа: Свой
Сообщений: 170
Регистрация: 30-06-05
Из: Киев
Пользователь №: 6 426

|
Цитата(vassabi @ Mar 24 2013, 23:16)  Ото ж, я так и делал, только если файлы лежат в разных проектах, то компилятор ее не видит (в данном случае lib.c прикручен к рабочему проекту как библиотека). Похоже это приколы этого компилятора или, что скорее всего, я еще не до конца разобрался... Вот только не понятно, все таки как extern переменную инициализировать не значением, а адресом, в данном случае sfr регистра. Переменные extern инициализируются в месте их объявления (там где они без ключевого слова extern), а присваивать значения можно везде, где их видно. Чтоб инициализировать переменную адресом Вам нужно смотреть в сторону указателей
|
|
|
|
Сообщений в этой теме
vassabi Простой вопрос по инициализации переменной sfr Mar 22 2013, 15:00 jack_avenger Обычно объявлять sfr есть необходимость только есл... Mar 24 2013, 18:47 vassabi Цитата(jack_avenger @ Mar 24 2013, 20:47)... Mar 24 2013, 19:00   vassabi Цитата(jack_avenger @ Mar 24 2013, 21:21)... Mar 24 2013, 19:26    jack_avenger Цитата(vassabi @ Mar 24 2013, 23:26) С ук... Mar 24 2013, 19:43     vassabi Цитата(jack_avenger @ Mar 24 2013, 21:43)... Mar 24 2013, 19:52      jack_avenger Цитата(vassabi @ Mar 24 2013, 23:52) Да, ... Mar 24 2013, 20:14      _Артём_ Цитата(vassabi @ Mar 24 2013, 21:52) Похо... Mar 24 2013, 20:15       vassabi Цитата(_Артём_ @ Mar 24 2013, 22:15) Вам ... Mar 24 2013, 20:26 jack_avenger Цитата(vassabi @ Mar 25 2013, 00:26) Хочу... Mar 24 2013, 20:48 vassabi Цитата(jack_avenger @ Mar 24 2013, 22:48)... Mar 24 2013, 20:54 jack_avenger Цитата(vassabi @ Mar 25 2013, 00:54) Если... Mar 24 2013, 21:02
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|