Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


Ответ
Опции темы
Непрочитано 29.08.2013, 19:41   #861
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   #862
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
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   #863
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
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   #864
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 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   #865
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
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   #866
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
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   #867
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 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   #868
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: FAQ по STM8

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

"Мопед не мой!"(С) Стянул с ИзыйдиЭлектроникс. Просто хотелось уточнить по поводу очередного изобретения велосипеда, но если с tempora никто не стал спорить - примем за истину. ))
nahimovv вне форума   Ответить с цитированием
Непрочитано 04.09.2013, 18:16   #870
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
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, время: 23:41.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot