Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

Что за самоцель такая? Хочешь защитить её? Ну так уже защитил, сделав статической и предоставив метод для доступа. Зачем обязательно делать её inline?
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 954
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда

Сообщение GARMIN »

Накладные расходы на вызов функции и возврат значения. Хочу избежать CALLF.
Наверное, много хочу :))
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

Я уже тут на форуме сто раз говорил. Ненужно заниматься предварительной оптимизацией! Тем более, если экономятся какие-то крохи! Сам раньше много раз попадался в эту ловушку, теперь, слава богу, отучился.

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

Если никакие исследования не проводились, и это - оптимизация ради оптимизации - прошу тебя, ЗАБУДЬ!. Не херь архитектуру ради нескольких сэкономленных тактов, которые тебе никогда не пригодятся!
Держит паяльник хвостом
Аватара пользователя
Сообщения: 954
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда

Сообщение GARMIN »

После гугления и экспериментов всё получилось.
В файле "timer.h" объявил переменную sys_time как внешнюю. Также именно в нём объявил и определил инлайн функцию с модификатором static.
Вот так:

Код: Выделить всё

extern volatile uint16_t	sys_time;	
inline uint16_t	time	(void);
static inline uint16_t time (void)
{
	return sys_time;
}
Тогда в мэйне #include "timers.h"
и вызовы функции преобразовываются в простое чтение переменной:

Код: Выделить всё

  213          			LED_start_time = time ();
   \   00003D CE ....      LDW       X, L:sys_time
   \   000040 CF ....      LDW       L:LED_start_time, X
Сохранена безопасность переменной, быстрота обращения и удобство написания программы.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

Чувааак... Я даже не знаю что тебе сказать...
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18677
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

человек хотел выстрелить себе в ногу и успешно этого добился...
Вот! Именно это я и хотел сказать, только слова забыл.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 954
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда

Сообщение GARMIN »

По даташиту на STM8 команда "LDW X longmem" занимает три байта и выполняется за два такта процессора. Атомарность соблюдена. Это не атмел.
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18677
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

то есть вы хотите сказать, что 8-битный МК работает с памятью 16-битными словами, и в процессе обмена байтами прерывания не могут произойти? я верно понимаю архитектуру STM8?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 954
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда

Сообщение GARMIN »

Пересылка 16-ти битного слова в STM8 выполняется одной командой за два такта. Если прерывания могут произойти при выполнении половины процессорной команды, то я ничего не понимаю :)
Контактная информация:
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

ARV писал(а):то есть вы хотите сказать, что 8-битный МК работает с памятью 16-битными словами, и в процессе обмена байтами прерывания не могут произойти? я верно понимаю архитектуру STM8?
In case of simultaneous accesses to the same memory area both in execution stage (write)
and decoding stage (read), the decode stage is stalled till the execution stage releases the
resource.

PM0044
Programming manual
"Я не даю готовых решений, я заставляю думать!"(С)
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18677
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Нифига не понял: где здесь о "неразрывности" тактов многотактовой инструкции говорится?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Only DIV and DIVW instructions are interruptable.
"Я не даю готовых решений, я заставляю думать!"(С)
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18677
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Добрый день, есть 24 битное АЦП которое выдаёт один бит по каждому возростающему фронту.
Подскажите как сохранить эти данные.
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

А покажите, как Вы это делаете, чтобы все поняли, что конкретно у Вас не получается.

Вопрос сформулирован абсолютно неконкретно. Если имеется в виду, что выход у АЦП последовательный, и весь результат за 24 такта (фронта) выдаёт - то в чём проблема записывать очередной бит в некую переменную на 0-ю позицию и сдвигать эту переменную влево?
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Не писал что не получается, спрашивал как сделать.
Да у АЦП последовательный выход и по фронту выдаются данные.
Друг Кота
Аватара пользователя
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

baghear писал(а):как сделать.
по фронту выдаются данные.
Ну так и делать — по фронту забирать данные.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

baghear писал(а):Не писал что не получается
Дак напишите. Почему всё вытягивать нужно из людей :facepalm:
Вопрос какой-то странный. Что значит "как сохранить данные" ? Можно на диск записать, или на флешку - долго будут храниться...

Ваш вопрос звучит примерно так :
У меня есть в огороде яблоня. По каждому стуку по ней, яблоки падают по одному.
Подскажите, как сохранить эти яблоки ?
Вот теперь попробуйте ответить мне на мой вопрос.

А вот Ваш пост :
Добрый день, есть 24 битное АЦП которое выдаёт один бит по каждому возростающему фронту.
Подскажите как сохранить эти данные.
Не находите ничего общего с моим ? :)
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Хотел бы просто сохранить в переменую.
Приведите пожалуйста пример кода на си.
Ответить

Вернуться в «Разные вопросы по МК»