Страница 200 из 386
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 11:14:22
menzoda
Что за самоцель такая? Хочешь защитить её? Ну так уже защитил, сделав статической и предоставив метод для доступа. Зачем обязательно делать её inline?
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 11:18:44
GARMIN
Накладные расходы на вызов функции и возврат значения. Хочу избежать CALLF.
Наверное, много хочу

Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 11:28:10
menzoda
Я уже тут на форуме сто раз говорил. Ненужно заниматься предварительной оптимизацией! Тем более, если экономятся какие-то крохи! Сам раньше много раз попадался в эту ловушку, теперь, слава богу, отучился.
Понимаешь, если ты провел исследования, и выяснил, что узкое место - это действительно вызов функции, то может быть два варианта:
1. Выбранная тобой архитектура всего приложения - дерьмо.
2. Твоя задача действительно требует большой вычислительной мощности. При этом тебе или нужно оставить красивости вроде инкапсуляции в покое и писать всё на ассемблере оптимизируя каждый такт, или нужно взять более мощное железо.
Если никакие исследования не проводились, и это - оптимизация ради оптимизации - прошу тебя, ЗАБУДЬ!. Не херь архитектуру ради нескольких сэкономленных тактов, которые тебе никогда не пригодятся!
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 11:49:49
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
Сохранена безопасность переменной, быстрота обращения и удобство написания программы.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 11:58:56
menzoda
Чувааак... Я даже не знаю что тебе сказать...
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 12:45:18
ARV
да что тут можно сказать... человек хотел выстрелить себе в ногу и успешно этого добился...
безопасность-то соблюдена, а атомарность доступа - нет. геморрой еще впереди...
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 12:53:07
menzoda
человек хотел выстрелить себе в ногу и успешно этого добился...
Вот! Именно это я и хотел сказать, только слова забыл.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 14:22:41
GARMIN
По даташиту на STM8 команда "LDW X longmem" занимает три байта и выполняется за два такта процессора. Атомарность соблюдена. Это не атмел.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 15:30:02
ARV
то есть вы хотите сказать, что 8-битный МК работает с памятью 16-битными словами, и в процессе обмена байтами прерывания не могут произойти? я верно понимаю архитектуру STM8?
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 15:58:17
GARMIN
Пересылка 16-ти битного слова в STM8 выполняется одной командой за два такта. Если прерывания могут произойти при выполнении половины процессорной команды, то я ничего не понимаю

Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 16:29:17
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
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 17:14:34
ARV
Нифига не понял: где здесь о "неразрывности" тактов многотактовой инструкции говорится?
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 17:45:51
HHIMERA
Only DIV and DIVW instructions are interruptable.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 17:47:47
ARV
Ну это другой разговор
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 20:21:42
baghear
Добрый день, есть 24 битное АЦП которое выдаёт один бит по каждому возростающему фронту.
Подскажите как сохранить эти данные.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт сен 09, 2014 20:48:19
WiseLord
А покажите, как Вы это делаете, чтобы все поняли, что конкретно у Вас не получается.
Вопрос сформулирован абсолютно неконкретно. Если имеется в виду, что выход у АЦП последовательный, и весь результат за 24 такта (фронта) выдаёт - то в чём проблема записывать очередной бит в некую переменную на 0-ю позицию и сдвигать эту переменную влево?
Re: Вопросы по С/С++ (СИ)
Добавлено: Ср сен 10, 2014 11:15:14
baghear
Не писал что не получается, спрашивал как сделать.
Да у АЦП последовательный выход и по фронту выдаются данные.
Re: Вопросы по С/С++ (СИ)
Добавлено: Ср сен 10, 2014 11:18:25
Gudd-Head
baghear писал(а):как сделать.
по фронту выдаются данные.
Ну так и делать — по фронту забирать данные.
Re: Вопросы по С/С++ (СИ)
Добавлено: Ср сен 10, 2014 11:26:13
Аlex
baghear писал(а):Не писал что не получается
Дак напишите. Почему всё вытягивать нужно из людей
Вопрос какой-то странный. Что значит "как сохранить данные" ? Можно на диск записать, или на флешку - долго будут храниться...
Ваш вопрос звучит примерно так :
У меня есть в огороде яблоня. По каждому стуку по ней, яблоки падают по одному.
Подскажите, как сохранить эти яблоки ?
Вот теперь попробуйте ответить мне на мой вопрос.
А вот Ваш пост :
Добрый день, есть 24 битное АЦП которое выдаёт один бит по каждому возростающему фронту.
Подскажите как сохранить эти данные.
Не находите ничего общего с моим ?

Re: Вопросы по С/С++ (СИ)
Добавлено: Ср сен 10, 2014 18:00:20
baghear
Хотел бы просто сохранить в переменую.
Приведите пожалуйста пример кода на си.