Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

FAQ по STM8

Непрочитано 29.08.2013, 19:41  
Uvavan
Временная регистрация
 
Регистрация: 18.04.2011
Сообщений: 84
Сказал спасибо: 23
Сказали Спасибо 6 раз(а) в 4 сообщении(ях)
Uvavan на пути к лучшему
По умолчанию Re: FAQ по STM8

И снова здравствуйте
Опять наткнулся на проблему. Контролер зависает на команде
Код:
asm("RIM");
До этого работало нормально поменял немного кода, не касающегося прерываний, перестало работать. убрал этот кусок проблема не ушла. Отладка показала что контролер зависает на вышеупомянутой команде. Что это случилось с ним??
P.S.
Убираешь команду все работает (кроме прерываний конечно).

Зацикливается на :

Код:
_interrupt_1:
_interrupt_10:
_interrupt_11:
_interrupt_12:
_interrupt_13... +24 symbols not displayed:
    00AD41    CCAD4A         JP        __iar_unhandled_exception
__low_level_init:
    00AD44    5F             CLRW      X
    00AD45    5C             INCW      X
    00AD46    81             RET
exit:
    00AD47    CCAD32         JP        _exit
__iar_unhandled_exception:
    00AD4A    9D             NOP
    00AD4B    20FD           JRA       __iar_unhandled_exception
?‹Constant "1"›:
    00AD4D    31             DC8   49                                       ; '1'
    00AD4E    00             DC8   0                                        ; '.'
?‹Constant "."›:
    00AD4F    2E00           JRSGE     __DebugBreak
__DebugBreak:
    00AD51    81             RET
    00AD52    41             DC8       0x41
    00AD53    A0             DC8       0xA0
Получается он не может определить вектора прерываний? Поэтому и уходит в ступор?
Из прерываний с 13 по 24 не одно не работает. Что случилось с контролером помогите пожалуйста.
Реклама:

Последний раз редактировалось Uvavan; 30.08.2013 в 12:34.
Uvavan вне форума  
Непрочитано 03.09.2013, 11:42  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: FAQ по STM8

Во какая у меня получилась функция для перевода числа в строку:
Код:
void ValueToStr (u32 Value, u8 * String)
{
  u8 zero=0;
  u8 tmp=0;
  u32 cnt=1000000000;
  while (cnt!=1)
  {
    while (Value›=cnt)
    {
      Value-=cnt;
      tmp++;
    }
    if (tmp) zero=1;
    if (zero) * String++ = tmp+48;
    tmp=0;
    cnt/=10;
  }
  * String = Value+48;
}

Последний раз редактировалось Easyrider83; 04.09.2013 в 09:48.
Easyrider83 вне форума  
Непрочитано 03.09.2013, 23:29  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: FAQ по STM8

А в чём изюминка? Так не быстрее будет?
Код:
void ValueToStr (u32 Value, u8 *buffer)
{   
    buffer += 11; 
   
	*--buffer = 0;   
    do   {  
			*--buffer = value % 10 + '0';      
			value = value /10;
		 }   while (value != 0);   
}
nahimovv вне форума  
Непрочитано 04.09.2013, 01:47  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от nahimovv Посмотреть сообщение
А в чём изюминка?
Я так понимаю, функция EasyRider'а предназначена для вызова конструктором форматного вывода - она заполняет строку слева-направо. Хотя, конечно, отсутствие универсальности делает её немного неудобной. Если форматный вывод не нужен, то, действительно, удобнее заполнять справа-налево. И минимизировать количество вариантов за счет небольшого усложнения. Скажем, если не нужны отрицательные числа, м.б. бы сделать так:
Код:
#define WBUFSIZE   16

static char     xtal[] = "0123456789ABCDEF";
static char     buf [WBUFSIZE+1];

char    *_int2str(uint val, uchar radix, uchar width)
{
char *s = &(buf[WBUFSIZE]);
uchar len = 0;

        do {
           *--s = xtal[val % radix];
           ++len;
        } while (val /= radix);

        while ( len++ ‹ width )
                *--s = xtal[0];

        return(s);
}
#define atoi(val)     _int2str(val,   10, 0)
#define atox(val)     _int2str(val, 0x10, 0)
#define ato...(val)   _int2str(val, ...)
________________
__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 04.09.2013 в 02:00.
tempora вне форума  
Непрочитано 04.09.2013, 10:03  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от nahimovv Посмотреть сообщение
А в чём изюминка? Так не быстрее будет?
Код:
void ValueToStr (u32 Value, u8 *buffer)
{   
    buffer += 11; 
   
	*--buffer = 0;   
    do   {  
			*--buffer = value % 10 + '0';      
			value = value /10;
		 }   while (value != 0);   
}
Вот это мне не понравилось. Почему именно 11? У меня пустые элементы остаются, если число короткое.
А по оптимизации - да, ваша на 20 инструкций короче.
Easyrider83 вне форума  
Непрочитано 04.09.2013, 12:04  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: FAQ по STM8

А вот еще полезная фишка. Генерирует уникальный для каждого камушка байт, собранный из серийника.
Код:
u8 GenerateUniqueID8 (u16 UID_Address)
{
 u8 ID[12];
 STM8S_EEPROM_Read_String(ID, UID_Address, 12);
 return Crc8(12, ID);
}
Код:
void STM8S_EEPROM_Read_String (u8 * String, u16 Address, u8 Len)
{
  while (Len--) * String++ = FLASH_ReadByte (Address++);
}
Код:
unsigned char Crc8(unsigned int len, unsigned char *pcBlock)
{
	unsigned char crc = 0xFF;
 	unsigned int i;

 	while (len--)
 	{
 		crc ^= *pcBlock++;
		for (i = 0; i ‹ 8; i++)
 		crc = crc & 0x80 ? (crc ‹‹ 1) ^ 0x31 : crc ‹‹ 1;
 	}
 	return crc;
}
Для STM8S103F2P6 ´
UID_Address=0x4865
Easyrider83 вне форума  
Непрочитано 04.09.2013, 15:02  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от Easyrider83 Посмотреть сообщение
Вот это мне не понравилось. Почему именно 11?
Потому, что в коде жёстко задана десятичная система счисления, а в ней, для u32 Value, максимальное число - 4'294'967'295, то есть, десять символов. Плюс trailing zero.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 04.09.2013, 15:19  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: FAQ по STM8

Это все очень понятно. Не понятно, зачем нужен массив, в котором интересующие нас элементы стоят в конце. Придется потом просеивать нули.
Easyrider83 вне форума  
Непрочитано 04.09.2013, 17:50  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: FAQ по STM8

"Мопед не мой!"(С) Стянул с ИзыйдиЭлектроникс. Просто хотелось уточнить по поводу очередного изобретения велосипеда, но если с tempora никто не стал спорить - примем за истину. ))
nahimovv вне форума  
Непрочитано 04.09.2013, 18:16  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: FAQ по STM8

Зачем с ним спорить? Я его метод тоже использую. Еще пока не решил, который лучше. В идеале надо вообще от деления избавиться.
Easyrider83 вне форума  
 

Метки
arm, cortex, stm32, stm8
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импульсная зарядка для авто-аккумуляторов (новодел) Falconist Источники питания и свет 1915 14.03.2024 19:56
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
STM8(S/L), первые впечатления kison STM8 1423 19.05.2018 19:23
Вопросы и замечания по топику - FAQ по PROTEUS avr123-nm-ru Proteus 291 05.06.2015 20:49
FAQ Импульсный трансформатор alberio Источники питания и свет 87 13.11.2012 18:07


Часовой пояс GMT +4, время: 17:29.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.