Например TDA7294

Форум РадиоКот • Просмотр темы - Программирование STM8
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср окт 15, 2025 13:15:50

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


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



Начать новую тему Ответить на тему  [ Сообщений: 2579 ]     ... , , , 8, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб мар 26, 2011 10:39:24 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
qwerky писал(а):
Цитата:
Печаль что у STM8S103 выхода TIM1_ETR
угу, причем таких граблей разработчики STM8 набросали кучу. Напр. мин.нарпяжение 2.9В (от таблетки уже не запитать, могли бы и понизить на 0.2..0.3В), отсутствие компаратора, отсутствие входа счета таймера, неудачная разводка портов (разбросаны кусками, а не полные 8 бит) у STM8S103, у 8L101 - отсутствие АЦП, второго входа и выхода компаратора, кварцевого генератора также нет входа счета таймера (был бы отличный чип с такими параметрами).

Как всегда... одни ищут возможности, другие - причины... )))))

_________________
"Я не даю готовых решений, я заставляю думать!"(С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс мар 27, 2011 09:39:52 
Родился

Зарегистрирован: Чт мар 17, 2011 07:38:54
Сообщений: 10
Рейтинг сообщения: 0
Кто работал с ацп, помогите запустить? НАстроил что какие то данные идут но все время в прерывании сидит и почемуто все каналы включены.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс мар 27, 2011 09:44:52 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Сб июн 12, 2010 16:19:17
Сообщений: 190
Откуда: Россия, Томск
Рейтинг сообщения: 0
mDI-WFG писал(а):
Кто работал с ацп, помогите запустить? НАстроил что какие то данные идут но все время в прерывании сидит и почемуто все каналы включены.

Я только с лькой возился
http://ziblog.ru/2011/01/30/stm8l-analo ... atel-atsp/
пиши подробнее что делал, можно шматочек кода...

_________________
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс мар 27, 2011 13:19:41 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 9
Зарегистрирован: Пт июн 12, 2009 19:17:35
Сообщений: 487
Рейтинг сообщения: 0
Цитата:
Кто работал с ацп, помогите запустить?

Пример с двумя каналами для 8S103:
Код:
void setup_adc( void ) {
   ADC_CR1  = 0b01100001; // enable ADC
   ADC_CR2  = 0b00001000; // right alignment
   ADC_CR3  = 0;
   ADC_TDRL = 0b01100000; // disable Schmitt triggers
}

void update_adc( void ) {
   ADC_CSR  = 5;  // channel 5
   delay_us(10);
   ADC_CR1 |= B0; // start conversion
   while (!(ADC_CSR & B7)); // wait
   adc_lo  = ADC_DRL; // LSB first
   adc_lo += (U16)ADC_DRH << 8;
   adc_lo_sum = (adc_lo_sum + adc_lo) - adc_lo_buf[adc_buf_cnt];
   adc_lo_buf[adc_buf_cnt] = adc_lo;
   adc_lo_filt = adc_lo_sum >> 5;
   voltage_lo = ((U32)adc_lo * (U32)99) >> 10;

   ADC_CSR = 6;  // channel 6
   delay_us(10);
   ADC_CR1 |= B0; // start conversion
   while (!(ADC_CSR & B7)); // wait
   adc_hi  = ADC_DRL;
   adc_hi += (U16)ADC_DRH << 8;
   adc_hi_sum = (adc_hi_sum + adc_hi) - adc_hi_buf[adc_buf_cnt];
   adc_hi_buf[adc_buf_cnt] = adc_hi;
   adc_hi_filt = adc_hi_sum >> 5;
   voltage_hi = ((U32)adc_hi * (U32)99) >> 10;

   if (++adc_buf_cnt >= 32) adc_buf_cnt = 0;

}


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вт мар 29, 2011 07:26:01 
Родился

Зарегистрирован: Чт мар 17, 2011 07:38:54
Сообщений: 10
Рейтинг сообщения: 0
Всем спасибо за помощь, понял где был не прав=), вроде все стабильно работает.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Чт апр 21, 2011 18:09:21 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7314
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Несколько железный вопрос. Хочу делать первое устройство. Один 8-ми разрядный порт будет шиной данных к ЖКИ графическому дисплею. Но, тот порт который мне подходит для этой цели из соображений удобства разводки содержит пин совмещенный со SWIM интерфейсом. Смогут ли они работать хором или все-же для SWIM надо выбрать контакт, который в схеме совсем не используется? Хотелось бы SWIM использовать не только для программирования кристалла, но и для отладки (а так это первая конструкция - отлаживаться придется долго и хорошо).

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Пт апр 22, 2011 05:26:41 
Родился

Зарегистрирован: Вт окт 14, 2008 06:48:04
Сообщений: 13
Откуда: Omsk
Рейтинг сообщения: 0
Цитата:
Смогут ли они работать хором или все-же для SWIM надо выбрать контакт, который в схеме совсем не используется? Хотелось бы SWIM использовать не только для программирования кристалла, но и для отладки


Если для отладки - только отдельно
Для программирования без отладки - есть положительный опыт совмещения


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб май 07, 2011 02:25:54 
Родился
Аватар пользователя

Зарегистрирован: Сб июл 17, 2010 14:16:00
Сообщений: 9
Рейтинг сообщения: 0
Недавно взялся за изучение микроконтроллеров STM8.
На данный момент читаю документацию
(programming manual)

там на странице 14 написано:

Global configuration register (CFG_GCR):
The global configuration register is a memory mapped register. It controls the configuration
of the processor. It contains the AL control bit:
● AL: Activation level
If the AL bit is 0 (main), the IRET will cause the context to be retrieved from stack and the
main program will continue after the WFI instruction.
If the AL bit is 1 (interrupt only active), the IRET will cause the CPU to go back to WFI/HALT
mode without restoring the context.
This bit is used to control the low power modes of the MCU. In a very low power application,
the MCU spends most of the time in WFI/HALT mode and is woken up (through interrupts)
at specific moments in order to execute a specific task. Some of these recurring tasks are
short enough to be treated directly in an ISR, rather than going back to the main program. In
this case, by programming the AL bit to 1 before going to low power (by executing WFI/HALT
instruction), the run time/ISR execution is reduced due to the fact that the register context is
not saved/restored each time.

Что я (с помощью переводчика) перевел как:
Глобальный регистр конфигурации.
Расположен в памяти программ. Управляет конфигурацией процессора. Состоит из бита AL.
Когда AL = 0 (основные), возврат из прерывания контекст восстанавливает из стека и продолжает выполнение программы после инструкции WFI.

Когда AL = 1, (только активные прерывания) после команды IRET ЦПУ идет обратно WFI/HALT режим через сохранение контекста.

Этот бит используется для режима энергосбережения ЦПУ. Для очень малопотребляющих приложений, в этом случае MCU проводит большую часть времени в способе WFI/HALT и пробуждается (через перерывы) в определенные моменты, чтобы выполнить определенную задачу. Некоторые из этих возвращающихся задач достаточно короткий, чтобы рассматриваться непосредственно в ISR, вместо того, чтобы возвратиться к главной программе. В этом случае, программируя AL = 1, контекст не будет восстанавливаться, и как следствие, длительность обработчика уменьшится.

В связи с этим вопросы:
1) Для чего используется этот бит (из перевода это не очень ясно)?
2) Что такое ISR?
3) Чем отличается сохранение контекста при AL = 0/1?
4) Связано ли это (и как) с приоритетом прерываний?

_________________
на любой элемент найдется мощность, которая его сожжет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс май 08, 2011 13:47:08 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
ISR - Interrupt Service Routine, обработчик прерываний.

AL = 0:
Программа доходит до WFI, сохраняет контекст и засыпает.
Приходит прерывание, сразу начинается обработка (контекст сохранён), в конце обработки выполняется команда IRET.
По ней восстанавливается контекст и управление передётся в точку после команды WFI. Процессор по флагу из прерывания смотрит:
- если надо что-то делать, то делает
- если надо продолжать спать, то сразу делает переход назад на команду WFI, которая опять сохраняет контекст и загоняет процесоср в сон

AL = 1:
Программа доходит до WFI, сохраняет контекст и засыпает.
Приходит прерывание, сразу начинается обработка (контекст сохранён), в конце обработки выполняется команда IRET.
По IRET процессор сразу засыпает без восстановления контекста и возврата в точку после команды WFI.

Т.е. вместо установки флагов для анализа «наверху» при необходиости что-то обработать выше обработчк сбрасывает AL и IRET возвращает в основную программу. Если же делать больше нечего (прерывание не обнаружило ничего достойного внимания), то AL остаётся поднятым и процессор сразу засыпает.
Экономия активного времени -- восстановление контекста + то время, которое «верхний» уровень потратил бы на анализ флага + сохранение контекста

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс май 08, 2011 15:31:01 
Родился
Аватар пользователя

Зарегистрирован: Сб июл 17, 2010 14:16:00
Сообщений: 9
Рейтинг сообщения: 0
Спасибо.
Тогда еще один вопрос:
В то же документе на стр. 50
Зачем нужны Pre-code и pre-bytes?
pre-byte это байт который стоит перед кодом операции и изменяет команду, которая следуют за ним.

Вот например один из них:
90h = PDY
Replaces an X based instruction using immediate, direct, indexed or inherent addressing mode by a Y one. It also provides read/modify/write instructions using Y indexed addressing mode with long offset and two bit handling instructions (BCPL and BCCM)

и мой перевод, из которого яснее не становится:
Заменяет команду, основанную на Х использованием непосредственный, прямой, индексной или inherent адресации основанной на Y . Это также обеспечивает работу команд типа чтение/модификация/запись, с использованием индексной адресации с регистром Y адресации с длинным смещением и двумя "ручными» битовыми командами (BCPL и BCCM).

_________________
на любой элемент найдется мощность, которая его сожжет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс май 08, 2011 16:40:39 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Надеюсь, прямо в кодах программировать не собираетесь? :)))
Тогда просто запомните, что любая команда с регистром Y длиннее на один байт, чем команда с регистром X и по мере возможность следует использовать регистр X (это не всегда так, в самом конце я про это добавил, но в первом приближении можно таким правилом пользоваться).

Префиксы меняют поведение следующей команды.
Грубо говоря, где-то есть триггер, который обычно сброшен (и сбрасывается после каждой команды).
Когда в нём 0, то используется регистр X. Пишем команду
Код:
   ldw X,#$1234
для загрузки константы в X. Будет сгенерирован код
Код:
     0xAE 0x12 0x34
Теперь пишем команду
Код:
   ldw Y,#$1234
для загрузки константы в Y. Код
Код:
0x90 0xAE 0x12 0x34

Префикс 0x90 взводит тот триггер и он переключает дешифратор, который теперь обеспечивает работу следующей команды (видом 1:1 как для загрузки X) с регистром Y. Сразу после выполнения триггер сбрасывается и последовательнсть
Код:
0x90 0xAE 0x12 0x34
     0xAE 0x56 0x78
занесёт первой строкой 0x1234 в Y и второй строкой 0x5678 в X.
0xAE - код операции занесения 16-битной константы в индексный регистр (по умолчанию X)
0x90 - префикс смены индексного регистра с X на Y
История тянется издавна и корни STM8 в ST7 и в мотороловских 8-битниках MC68xx и MOS Technology (Commodore) 6502.
Среди них были и такие, у которых был только один индексный регистр.
И такие, у которых короткая адресация была не к младшим 256 байтам ОЗУ, а к странице, старшие 8 бит адреса которой хранились в региcтре DP (DirectPage). Кстати, удобно было бы для RTOS -- при переключении задач сохранять/восстанавливать не кусок области короткой адресации, а только этот регистр. Правда, для этого нужно много ОЗУ, чтобы каждой задаче выделить по странице.
И такие, у которых два аккумулятора A и B, которые вкупе могут работать как 16-битный аккумулятор.
Короче, перед нами процесор с длинной и неплохой родословной :)))

Также там есть префиксы для косвенности адресации, т.е. обычно команда берёт данные оттуда-то (например, из ячейки памяти), а если перед ней стоит соответствующий префикс, то тогда она из ячейки памяти содержимое вынимет, но использует его не как данные, а как адрес данных.
Код:
     0xСE 0x12 0x34
0x72 0xСE 0x12 0x34 

Первая команда LDW X, $1234 -- загружаем в X содержимое ячейки памяти с адресом 0x1234
Вторая команда LDW X,[$1234.w] -- загружаем в X содержимое ячейки памяти, адрес которой лежит в ячейке с адресом 0x1234

Сделано это для того, чтобы для довольно редко используемых команд не тратить место в основном коде команды. Например, пришлось бы всегда в коде команды иметь бит для выбора X/Y и для выбора дополнительной косвенности -- вот уже два бита и пропало. Итого в один байт влезет меньше команд.

Если порыться, то там есть и команды, которые имеют одинаковую длину и для X, и для Y. Но там и так префикс есть для дополнительного уровня косвенности и для выбоора длины адреса той ячейки, в которой лежит адрес, а под выбор X/Y таки бит задействован.
Но эти знания уже на втором этапе работы с STM8 на ассемблере может понадобитсья, когда уже на высокий уровнеь оптимизации выходить. Поскольку я этого делать не собираюсь, я детально и не смотрел.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Чт май 12, 2011 01:03:50 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Кто пользуется НЕ-IAR-ом, покажите, как оно компилирует чтение 16-разрядного регистра, что-то в таком духе:
Код:
    uint8_t hi = TIM3_CNTRH;
    uint16_t ticks = (hi << 8) + TIM3_CNTRL;
IAR раскатывает простыню
Код:
     95              uint8_t hi = TIM3_CNTRH;
   \   uint32_t TProfiler<(uint_fast8_t)'\000'>::time_interval()
   \                     _ZN9TProfilerILh0EE13time_intervalEv:
   \   000000 C65328                LD        A, L:0x5328
     96              uint16_t ticks = (hi << 8) + TIM3_CNTRL;
   \   000003 5F                    CLRW      X
   \   000004 97                    LD        XL, A
   \   000005 58                    SLLW      X
   \   000006 58                    SLLW      X
   \   000007 58                    SLLW      X
   \   000008 58                    SLLW      X
   \   000009 58                    SLLW      X
   \   00000A 58                    SLLW      X
   \   00000B 58                    SLLW      X
   \   00000C 58                    SLLW      X
   \   00000D C65329                LD        A, L:0x5329
   \   000010 905F                  CLRW      Y
   \   000012 9097                  LD        YL, A
   \   000014 90BF00                LDW       S:?w0, Y
   \   000017 72BB0000              ADDW      X, S:?w0
тогда как нормальному ковбою хватило бы
Код:
    ld      A, L:TIM3_CNTRH
    ld      XL, A
    ld      A, L:TIM3_CNTRL
    rlwa    X

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб май 14, 2011 16:08:09 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Ну вот, тема на кучу страниц, а ответить некому.
Ещё перл от IAR
Код:
  uint8_t uu;
...
  ++uu;

IAR/STM8 1.20
Код:
    ld    A, #1   ; 2 байта
    add   A, L:uu ; 3 байта
    ld    L:uu, A ; 3 байта

IAR/STM8 1.30
Код:
    ld    A, L:uu ; 3 байта
    inc   A       ; 1 байт
    ld    L:uu, A ; 3 байта

При том, что можно
Код:
    inc   L:uu ; 4 байта

Тут в теме упоминались другие компиляторы, пожалуйста, покажите их код для такой простой операци и для того, что в предыдущем сообщении. Мне тесно во времени качать/править пробовать все. И так для всех делаю, а не для себя (хотя, возможно, после этого и я с STM8 начну работать, понравились ;)).
Я ж не сам себе IAR выбрал, меня попросили под него кое-что для STM8 сделать.
Может, ещё не поздно переагитировать :)))

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб май 14, 2011 17:08:23 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Сб июн 12, 2010 16:19:17
Сообщений: 190
Откуда: Россия, Томск
Рейтинг сообщения: 0
cosmic 4.3.6
оптимизация по скорости:
Код:
main.c:30       ++uu;
0x80f9 <main+2>             0x0C03          INC   (0x03,SP)           INC   (0x03,SP)
main.c:33       hi = TIM3->CNTRH;
0x80fb <main+4>             0xC6528C        LD    A,0x528c            LD    A,0x528c
0x80fe <main+7>             0x6B03          LD    (0x03,SP),A         LD    (0x03,SP),A
main.c:34       ticks = (hi << 8) + TIM3->CNTRL;
0x8100 <main+9>             0x5F            CLRW  X                   CLRW  X
0x8101 <main+10>            0x97            LD    XL,A                LD    XL,A
0x8102 <main+11>            0x4F            CLR   A                   CLR   A
0x8103 <main+12>            0xCB528D        ADD   A,0x528d            ADD   A,0x528d
0x8106 <main+15>            0x2401          JRNC  0x8109              JRNC  0x8109
0x8108 <main+17>            0x5C            INCW  X                   INCW  X
0x8109 <main+18>            0x02            RLWA  X,A                 RLWA  X,A
0x810a <main+19>            0x1F01          LDW   (0x01,SP),X   


оптимизация по размеру:
Код:
main.c:30       ++uu;
0x80f9 <main+2>             0x0C03          INC   (0x03,SP)           INC   (0x03,SP)
main.c:33       hi = TIM3->CNTRH;
0x80fb <main+4>             0xC6528C        LD    A,0x528c            LD    A,0x528c
0x80fe <main+7>             0x6B03          LD    (0x03,SP),A         LD    (0x03,SP),A
main.c:34       ticks = (hi << 8) + TIM3->CNTRL;
0x8100 <main+9>             0x5F            CLRW  X                   CLRW  X
0x8101 <main+10>            0x97            LD    XL,A                LD    XL,A
0x8102 <main+11>            0x4F            CLR   A                   CLR   A
0x8103 <main+12>            0xCB528D        ADD   A,0x528d            ADD   A,0x528d
0x8106 <main+15>            0x2401          JRNC  0x8109              JRNC  0x8109
0x8108 <main+17>            0x5C            INCW  X                   INCW  X
0x8109 <main+18>            0x02            RLWA  X,A                 RLWA  X,A
0x810a <main+19>            0x1F01          LDW   (0x01,SP),X

_________________
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб май 14, 2011 17:50:00 
Опытный кот
Аватар пользователя

Зарегистрирован: Вт янв 20, 2009 14:49:08
Сообщений: 890
Откуда: Гондурас, Мурманск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Может имеет смысл сделать объявление вида:
Код:
unsigned int ticks;
#define ticks_hi (*((unsigned char *) &ticks))
#define ticks_lo (*((unsigned char *) (&ticks)+1))


Тогда COSMIC выдает так:
Код:
2864                     ; 25    ticks_hi=TIM3_CNTRH;
2866  004d 5553280002       mov   _ticks,_TIM3_CNTRH
2867                     ; 26    ticks_lo=TIM3_CNTRL;
2869  0052 5553290003       mov   _ticks+1,_TIM3_CNTRL

Правда надо проверить действительно ли старший байт идет первым, но судя по адресам H и L TIM3_CNTR должно быть правильно.
Zheleznjakov, у тебя переменная локальная - на стеке, у задавшего вопрос - глобальная.
А с локальной мой вариант с дефайнами выдает:
Код:
2876                     ; 25    ticks_hi=TIM3_CNTRH;
2878  004c c65328           ld   a,_TIM3_CNTRH
2879  004f 6b01             ld   (OFST-1,sp),a
2880                     ; 26    ticks_lo=TIM3_CNTRL;
2882  0051 c65329           ld   a,_TIM3_CNTRL
2883  0054 6b02             ld   (OFST+0,sp),a


С инкрементом глобальной переменной COSMIC особо не заморачивается:
Код:
2884                     ; 27    hi++;
2886  0056 3c02             inc   _hi

Хм, у меня инкремент локальной компилируется так:
Код:
2893                     ; 27    hi++;
2895  0057 0c01             inc   (OFST-2,sp)


Версия COSMICa 4.2.8

_________________
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης


Последний раз редактировалось DrWatson Сб май 14, 2011 18:28:37, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб май 14, 2011 18:03:28 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Сб июн 12, 2010 16:19:17
Сообщений: 190
Откуда: Россия, Томск
Рейтинг сообщения: 0
глобальные:
Код:
main.c:31       ++uu;
0x80f7 <main>               0x3C03          INC   0x03                INC   uu
main.c:33       hi = TIM3->CNTRH;
0x80f9 <main+2>             0x55528C0002    MOV   0x0002,0x528c       MOV   hi,0x528c
main.c:34      ticks = (hi << 8) + TIM3->CNTRL;
0x80fe <main+7>             0x5F            CLRW  X                   CLRW  X
0x80ff <main+8>             0xB602          LD    A,0x02              LD    A,hi
0x8101 <main+10>            0x97            LD    XL,A                LD    XL,A
0x8102 <main+11>            0x4F            CLR   A                   CLR   A
0x8103 <main+12>            0xCB528D        ADD   A,0x528d            ADD   A,0x528d
0x8106 <main+15>            0x2401          JRNC  0x8109              JRNC  0x8109
0x8108 <main+17>            0x5C            INCW  X                   INCW  X
0x8109 <main+18>            0xB701          LD    0x01,A              LD    ticks+1,A
0x810b <main+20>            0x9F            LD    A,XL                LD    A,XL
0x810c <main+21>            0xB700          LD    0x00,A              LD    ticks,A

_________________
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб май 14, 2011 18:07:23 
Опытный кот
Аватар пользователя

Зарегистрирован: Вт янв 20, 2009 14:49:08
Сообщений: 890
Откуда: Гондурас, Мурманск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Использование ИЛИ вместо сложения как минимум уберет условный переход и формирование переноса. Вообще в данном случае использование сложения незачем.
А вот это вообще непонятно:
Код:
2842                     ; 21    ticks=(TIM3_CNTRH<<8)|TIM3_CNTRL;
2844  002e c65328           ld   a,_TIM3_CNTRH
2845  0031 5f               clrw   x
2846  0032 97               ld   xl,a
2847  0033 4f               clr   a
2848  0034 02               rlwa   x,a     ; ???????????
2849  0035 01               rrwa   x,a     ; ???????????
2850  0036 ca5329           or   a,_TIM3_CNTRL
2851  0039 b702             ld   _ticks+1,a
2852  003b 9f               ld   a,xl
2853  003c b701             ld   _ticks,a
2854                     ; 22    ticks=TIM3_CNTR;
2856  003e ce5328           ldw   x,_TIM3_CNTR
2857  0041 bf01             ldw   _ticks,x

_________________
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб май 14, 2011 18:11:07 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Сб июн 12, 2010 16:19:17
Сообщений: 190
Откуда: Россия, Томск
Рейтинг сообщения: 0
DrWatson писал(а):
Может имеет смысл сделать объявление вида:

мне проще вот так оборачивать (ещё с авр-ки ползет)
Код:
#define BYTES(Value)    ((uint8_t *) & (Value))

и применять логичнее
Код:
   BYTES(ticks)[1] = TIM3->CNTRH;
   BYTES(ticks)[0] = TIM3->CNTRL;


Код:
main.c:34       ++uu;
0x80f7 <main>               0x3C03          INC   0x03                INC   uu
main.c:36      BYTES(ticks)[1] = TIM3->CNTRH;
0x80f9 <main+2>             0x55528C0001    MOV   0x0001,0x528c       MOV   ticks+1,0x528c
main.c:37      BYTES(ticks)[0] = TIM3->CNTRL;
0x80fe <main+7>             0x55528D0000    MOV   0x0000,0x528d       MOV   ticks,0x528d


с локальными
Код:
main.c:34       ++uu;
0x80f9 <main+2>             0x0C01          INC   (0x01,SP)           INC   (0x01,SP)
main.c:36      BYTES(ticks)[1] = TIM3->CNTRH;
0x80fb <main+4>             0xC6528C        LD    A,0x528c            LD    A,0x528c
0x80fe <main+7>             0x6B04          LD    (0x04,SP),A         LD    (0x04,SP),A
main.c:37      BYTES(ticks)[0] = TIM3->CNTRL;
0x8100 <main+9>             0xC6528D        LD    A,0x528d            LD    A,0x528d
0x8103 <main+12>            0x6B03          LD    (0x03,SP),A


п.с. ух ты а где такой космик взять ? я вроде качал не так давно :(

_________________
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб май 14, 2011 18:28:12 
Опытный кот
Аватар пользователя

Зарегистрирован: Вт янв 20, 2009 14:49:08
Сообщений: 890
Откуда: Гондурас, Мурманск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Блин, обманул с версией ) 4.2.8 у меня, а 5.2.5 - это Idea или как ее там, просто на сплэше выскочила, я и повелся.

_________________
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб май 14, 2011 18:29:41 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Сб июн 12, 2010 16:19:17
Сообщений: 190
Откуда: Россия, Томск
Рейтинг сообщения: 0
хух, а то я уже ещё раз скачал с офф сайта и там то же 4.3.6 :) подумал фришная устарела...

_________________
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru


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

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


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

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


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

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


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