Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы по С/С++ (СИ)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср ноя 05, 2025 20:56:56

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7702 ]     ... , , , 269, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 14:07:52 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Цитата:
Тогда там и держите. :)
перенес и сразу понадобилось использовать extern!В обработчике то не видать адреса BuTTON.


Цитата:
Вот чтобы вас не пугать и не запутать, я и стёр то, что написал. :)
Не беспокойтесь - для прерываний это не важно - пока вы не выйдете из прерывания, основная программа не продолжится. Но в настоящих многопоточных приложениях просто имейте это в виду. ;) Подробности вы прочтете в "Барьеры памяти и компилятора". Например, тут: http://scrutator.me/post/2015/05/16/mem ... riers.aspx
Ознакомлюсь спасибо!!


Цитата:
На практике в модуле key.h вы пишете после #include
extern uint8_t BuTTON;

И дальше работаете с этой переменной, как с глобальной.


После #include пишем extern uint8_t BuTTON; ???
попробовал без #include видится нормально.

Цитата:
Предупреждения и не будет. Это не ошибка. Кстати, у вас этот самый BuTTON стоит инициализировать.
Инициализировал!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 14:11:44 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 1
Цитата:
перенес и сразу понадобилось использовать extern!В обработчике то не видать адреса BuTTON.


Это нормально. :)

Цитата:
После #include пишем extern uint8_t BuTTON; ???
попробовал без #include видится нормально.


Не-не, я имел в виду, в машем модуле после написанных #include. :)

А заработало? Кнопки-то работают?

_________________
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 14:14:33 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Цитата:
Вам нужен модификатор volatile при объявлении переменной BuTTOn.

Интересное явление! При опросе кнопки по прерыванию я не мог перейти в меню, хотя в отладчике все прекрасно было видно значение BuTTON оно соответствовало для перехода,но не происходило.Заем функцию опроса поместил в основной цикл и запретил прерывания. Переход в меню происходил отлично, но мне нужно это делать в прерывании. Вернул все обратно в обработчик и добавил volatile к BuTTON, и о чудо,все заработало!! :)))
Спасибо огромное очень полезными вещами поделились :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 14:18:37 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 1
Цитата:
Спасибо огромное очень полезными вещами поделились


Вот вам будет ещё полезнее почитать:
Вложение:
Archive.zip [507.46 KiB]
Скачиваний: 251
:)

_________________
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 14:28:12 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Цитата:
Вот вам будет ещё полезнее почитать:
со вступления уже понял, это то что надо! :write: спасибо!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 14:35:57 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 0
Только не воспринимайте, как догму эти статьи. ;) Особенно в части оформления программы.
Ну и могу ещё посоветовать систему контроля версий поставить. Например, модный сейчас Git (с графическим интерфейсом, например, мне нравится Git Extension). Но это для мелких проектов, возможно, особого смысла не имеет, но для крупных и ветвящихся - это спасение от кучи версий программы. :tea:

_________________
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 14:55:58 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 1
Где нужно помещать обработчик прерывании,

Там, где это позволит свести к минимуму внешние связи модуля. Чем меньше из него "торчит" наружу, тем надёжнее и предсказуемее работа. extern в чистой С-программе - это форс-мажор - давить нещадно, для функций он бессмысленен, для переменных - даёт всем кому не лень такую свободу обращения с вашими данными, которой окружающие не заслуживают, да и делает переменную уже никак не вашей - потому как контроля над тем, кто с ней побаловался, когда и как - у вас уже не будет. Резюме перфекциониста: Обработчик - в модуль клавиатуры вместе с известной переменной, которую делаем статической а кто хочет её почитать - пожалте им функцию get_cur_button. Ну и сказать оптимизатору - "Выноси, родима-а-й!"

В чем разница использования внешней переменной и работать просто с адресом переменной?

Теоретически [для встроенных типов размером меньше размера указателя] - в дополнительной операции разыменования для получения содержимого по адресу. Практически - скорее всего, компилятор и так будет оперировать указателем. Ну и для ясности понимания кода, тот кто будет его читать после вас наверняка подумает, что есть причина использования именно указателя вместо переменной - и потратит время на поиски этой причины. Пишите проще - и сами-же себе спасибо скажете через пару годиков, будь придётся нынешний код ещё куда встраивать.

Добавлено after 6 minutes 7 seconds:
Ну и могу ещё посоветовать систему контроля версий поставить.

Настойчиво посоветовать. :-)

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 15:44:11 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Ну и могу ещё посоветовать систему контроля версий поставить.
пока не представляю,что это,но попробую разобраться :tea:
Цитата:
для переменных - даёт всем кому не лень такую свободу обращения с вашими данными, которой окружающие не заслуживают, да и делает переменную уже никак не вашей - потому как контроля над тем, кто с ней побаловался....
что это значит? если я эту переменную никак не использую по делу,как может программа к ней добраться и побпловаться?

Цитата:
Обработчик - в модуль клавиатуры вместе с известной переменной, которую делаем статической

что даст static.? то что только по делу можно ее поменять?т.е конкретно там где ее используют?

Цитата:
Практически - скорее всего, компилятор и так будет оперировать указателем
. Тоже так предполагал, казалось этими действиями я понижаю уровень языка!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 15:54:12 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 1
Цитата:
что это значит? если я эту переменную никак не использую по делу,как может программа к ней добраться и побпловаться?


Дело в том, что переменную лучше "запереть" в модуле и изменять/получать значение только через функции этого модуля. Эдакая инкапсуляция.

Цитата:
что даст static.? то что только по делу можно ее поменять?т.е конкретно там где ее используют?


static для имени переменной делает её запертой внутри этого модуля. Доступ к такой переменной через объявление её же через extern в другом модуле не получится.

Цитата:
Тоже так предполагал, казалось этими действиями я понижаю уровень языка!


Не экономьте на спичках. Пишите так, как вам проще и удобнее. Пусть компилятор сам решит, как ему удобно работать с переменной - может, он её в регистре будет держать (впрочем, вашу с volatile не будет :) ).

Цитата:
пока не представляю,что это,но попробую разобраться


Это то, что позволит наглядно представлять и удобно переключаться между версиями вашей программы. Вы делаете "слепки" ("коммиты") рабочего каталога, когда они требуются (с комментариями).

_________________
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 16:08:21 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Цитата:
Дело в том, что переменную лучше "запереть" в модуле и изменять/получать значение только через функции этого модуля. Эдакая инкапсуляция.

интересный случай!? в моем примере как это должно выглядеть?как мне до нее добраться из другого модуля МЕНЮ? написать функцию в модуле KEY которая просто передает мою переменную,а в модуле меню вызвать эту функцию?

Цитата:
static для имени переменной делает её запертой внутри этого модуля. Доступ к такой переменной через объявление её же через extern в другом модуле не получится.
действительно, попробовал так, extern не канает уже...

Цитата:
Пишите так, как вам проще и удобнее.
ок


Цитата:
Это то, что позволит наглядно представлять и удобно переключаться между версиями вашей программы.
хорошо,посмотрю


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 16:09:29 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 1
Цитата:
интересный случай!? в моем примере как это должно выглядеть?как мне до нее добраться из другого модуля МЕНЮ? написать функцию в модуле KEY которая просто передает мою переменную,а в модуле меню вызвать эту функцию?


Да. :) unit8_t GetKeyCode(void);

_________________
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 16:20:22 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Цитата:
Да. :) unit8_t GetKeyCode(void);
ну хорошо получил я ее,теперь мне нужно поменять ее значение в чужом модуле. что тоже писать функцию для этого? разврат какой-то :o


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 16:23:43 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 1
Цитата:
ну хорошо получил я ее,теперь мне нужно поменять ее значение в чужом модуле. что тоже писать функцию для этого? разврат какой-то


Нет, не разврат. :) Это инкапсуляция:
Цитата:
Инкапсуляция - это механизм, который объединяет данные и методы, манипулирующие этими данными, и защищает и то и другое от внешнего вмешательства или неправильного использования


В этой функции вы запретите прерывания, считаете/запишете переменную, снова разрешите прерывания. Для внешнего пользователя всё это не важно - он этого не замечает и не знает тонкостей работы с переменной. Это знает сам модуль.

_________________
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 17:12:23 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Цитата:
В этой функции
Тело этой функции так должно выглядеть?
Код:
uint8_t GetKeyCode(void)
{
   return BuTTON;
}

но так не работает :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 17:34:41 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 1
но так не работает

Что-то не так. Как функцию вызываете?

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 17:37:53 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Как функцию вызываете?

Код:
while (1)
   {   
   
      if (GetKeyCode())
      opredelenieUkazatela();  // при наличии кода клавиатуры переходим в меню   
   }
}


Код:
uint8_t f=0;
while (1)
   {   
   f=GetKeyCode();
      if (f)
      opredelenieUkazatela();  // при наличии кода клавиатуры переходим в меню   
   }
}



static uint8_t BuTTON=0; //ошибка

static volatile uint8_t BuTTON=0; // не ошибка


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 18:35:31 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
Код:
uint8_t f=0;
while (1)
   {   
   f=GetKeyCode();
      if (f)
      opredelenieUkazatela();  // при наличии кода клавиатуры переходим в меню   
   }
}

Т.е. функция "переходим в меню" вообще не вызывается? А, кстати, как она узнаёт код кнопки? Раньше получала его параметром - а сейчас?

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс мар 25, 2018 18:41:15 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Цитата:
Т.е. функция "переходим в меню" вообще не вызывается?
без volatile не вызывалась, даже значение BuTTON не возвращалось в ф-й GetKeyCode();

Цитата:
А, кстати, как она узнаёт код кнопки? Раньше получала его параметром - а сейчас?
сейчас я в модуле вызываю GetKeyCode снова


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт мар 30, 2018 13:15:30 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Здравствуйте!своим наивным расчетом пытаюсь добраться к полю структуры вот таким образом:
Код:
for (typ8 i=0;i<3;i++)
   {
      TWI_buffer[i]=*(PtrRTC_struct+i);
   }

компилятр пишет : invalid type argument of unary '*' (have 'int') правильно ли я понимаю,что доступ к полю структуры это унарная операция, т.е для доступа нужно использовать только один аргумент.Но я же работаю адресом структуры....или причина не в этом?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт мар 30, 2018 13:22:55 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2128
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18422
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
не понял, какие типы переменных у вас.
не увидел доступа к полю структуры...
поясните тонкости

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7702 ]     ... , , , 269, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y