10.02.2011, 20:51
|
|
Частый гость
Регистрация: 29.04.2007
Сообщений: 11
Сказал спасибо: 5
Сказали Спасибо 2 раз(а) в 1 сообщении
|
Re: STM8(S/L), первые впечатления
Сообщение от kison
|
Завтра чего нибудь выложу. Библиотеку управления тактом точно.
|
Я пропустил или не выкладывалось?
|
|
|
|
10.02.2011, 23:22
|
|
Вид на жительство
Регистрация: 21.11.2009
Сообщений: 342
Сказал спасибо: 4
Сказали Спасибо 149 раз(а) в 66 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Еще глюк - иногда компилер самовольно переставляет команды asm-a (оптимизирует под конвейер ?). Заметил по поведению в дебаггере - курсор проскакивал одну строку. Смотрю в листинг - нужная команда почему-то оказалась после следующей. Поменял местами соседние команды - все ок. Вот такие чудеса. Видимо для серъезных задач пока не годится (напоминает ситуацию с первыми версиями AVR-GCC).
Последний раз редактировалось qwerky; 10.02.2011 в 23:26.
|
|
|
|
22.02.2011, 19:05
|
|
Частый гость
Регистрация: 02.02.2010
Сообщений: 35
Сказал спасибо: 2
Сказали Спасибо 1 раз в 1 сообщении
|
Re: STM8(S/L), первые впечатления
Доброго всем вечера.
Возник тупой вопрос или я раньше не замечал или правда глюк какой-то.
Когда включаешь livewatch у вас показывает например переменную, которую обозначил глобально?
Например, int i=0xFF;
У меня на stm8l пишет что она всегда нулю, а на stm8s вообще пишет ошибку
|
|
|
|
22.02.2011, 22:56
|
|
Частый гость
Регистрация: 29.04.2007
Сообщений: 11
Сказал спасибо: 5
Сказали Спасибо 2 раз(а) в 1 сообщении
|
Re: STM8(S/L), первые впечатления
Сообщение от mac0dee
|
Доброго всем вечера.
Возник тупой вопрос или я раньше не замечал или правда глюк какой-то.
Когда включаешь livewatch у вас показывает например переменную, которую обозначил глобально?
Например, int i=0xFF;
У меня на stm8l пишет что она всегда нулю, а на stm8s вообще пишет ошибку
|
В какой среде работаете?
|
|
|
|
23.02.2011, 11:25
|
|
Частый гость
Регистрация: 02.02.2010
Сообщений: 35
Сказал спасибо: 2
Сказали Спасибо 1 раз в 1 сообщении
|
Re: STM8(S/L), первые впечатления
sreda razrabotki IAR
|
|
|
|
23.02.2011, 13:00
|
|
Частый гость
Регистрация: 02.02.2010
Сообщений: 35
Сказал спасибо: 2
Сказали Спасибо 1 раз в 1 сообщении
|
Re: STM8(S/L), первые впечатления
разобрался в чём дело, хотя для меня это всё-равно дико.
Раньше в цикле while, который идёт в main стояла такая строчка:
flag=EXTI_GetITStatus(EXTI_IT_Pin7);
когда из программы начал выкидывать ненужные строки выкинул и её.
В следствии был такой глюк.
Так осталось и непонятно. Глюк IAR, livewatch или глюк меня?
|
|
|
|
23.02.2011, 13:12
|
|
Прохожий
Регистрация: 02.05.2010
Сообщений: 7
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
_delay_ms() _delay_us()
Кому нужно - ф-ции задержек для космика и резонанса без таймеров.
Работают при включенной оптимизации по размеру на частоте 16 МГц. Частоту можно поменять define'ом.
Видно, что Raisonance генерит код побольше и помедленней Cosmic.
Код:
|
#include "delay.h"
#include "stm8s.h"
#define F_CPU 16000000
#define F_CPU_MHZ 16
void _delay_ms(unsigned int ms){
while(ms){
_delay_us(1000);
--ms;
}
}
void _delay_us(unsigned int us){
static u16 i;
#ifdef _COSMIC_
i = (us-1)* F_CPU_MHZ / 7; //7 циклов выполняется while(--i), 2 цикла выполняется вычитание и деление
#else
i = (us-2)* F_CPU_MHZ / 9; //9 циклов выполняется while(--i), 1 цикл выполняется вычитание и деление
#endif
while(--i){
#ifdef _COSMIC_
#asm
nop
#endasm
#endif
}
} |
Хотя, есть ситуации, где Raisonance генерит код лучше.
Например,
Код:
|
#define GPIO_WriteReverse(x,y) (x)-›ODR ^= (y) |
в Cosmic компилируется в
Код:
|
LD A,0x500f
XOR A,#0x01
LD 0x500f,A |
в Raisonance компилируется в одну инструкцию - bcpl.
P.S. Кстати, помогите вделать define для Cosmic, чтобы WriteReverse компилировался в BCPL.
Я так предполагаю, что это будет что-то вроде
Код:
|
#define GPIO_WriteReverse(x,y) _asm("BCPL x-›ODR, y \n"); |
Соответственно помогите - как передать параметры в эту конструкцию, и она компилировалась в одну инструкцию? Или как по-другому заставить Cosmic вставлять BCPL?
Последний раз редактировалось vertexodessa; 23.02.2011 в 18:54.
|
|
|
|
23.02.2011, 13:23
|
|
Прописка
Регистрация: 02.01.2011
Сообщений: 159
Сказал спасибо: 8
Сказали Спасибо 32 раз(а) в 28 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Да уж лучше тогда всю функцию на асме переписать, чтоб не зависеть от настроек компилятора.
|
|
|
Сказали "Спасибо" akimych
|
|
|
23.02.2011, 13:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от vertexodessa
|
Кому нужно - ф-ции задержек для космика и резонанса без таймеров.
|
Подставьте 1us и удивитесь. Кроме того это будет зависеть от оптимизации и на разных уровнях можно получить разный результат.
Выше qwerky удивлялся зачем я в дефайне наворотил довольно сложную конструкцию вычисляющую количество проходов по циклу. А это сделано для того, чтоб не получить максимальную задержку если нужна чуть меньше минимальной.
|
|
|
|
23.02.2011, 13:29
|
|
Вид на жительство
Регистрация: 21.11.2009
Сообщений: 342
Сказал спасибо: 4
Сказали Спасибо 149 раз(а) в 66 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
в чем кайф писать GPIO_WriteReverse(x,y) вместо Px_ODR ^= y ?
Цитата:
|
чтоб не получить максимальную задержку если нужна чуть меньше минимальной.
|
суб-микросекундную задержку наверно лучше сделать nop-ами чтобы не морочить голову с циклами/конвейером.
Последний раз редактировалось qwerky; 23.02.2011 в 13:40.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:52.
|
|