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

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

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

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

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

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


Ответ
Опции темы
Непрочитано 11.02.2014, 18:50   #1111
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: FAQ по STM8

Та я не про то. Переписывать каждый раз хедер под другой камень и под другую задачу - "Это не серьёзно!"(С).
Реклама:
nahimovv вне форума   Ответить с цитированием
Непрочитано 11.02.2014, 19:15   #1112
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от nahimovv Посмотреть сообщение
Переписывать каждый раз хедер под другой камень и под другую задачу - "Это не серьёзно!"
Пока что все одинаково (и в STM8S003, и в STM8S105), просто некоторых вещей нет в одном, некоторых - в другом. Если появится у меня третий камень, где что-то будет по-другому, то буду уже #ifdef'ы впихивать.
А пока - у меня файлик потихоньку деталями обрастает (сразу все из даташита туда писать смысла не вижу - я всем этим вряд ли пользоваться буду).

Сейчас вот с другим столкнулись: коллеге надо для ЧПУшки самопальной сделать тестовый блок управления, а там все четыре оси независимы, да и скорости разные (а шпиндель, кажись, вообще не шаговиком управляется). Лишней макетки с STM32 у меня пока нет, зато эту дешевую 105-ю можно использовать. Правда, боюсь, придется уже тупым "ногодрыгством" заниматься: у этого МК всего лишь 3 таймера выведено наружу, если четвертый движок будет тоже шаговиком, с ним придется попыхтеть.

Сделал заметку в ЖЖ по поводу ШД.
__________________
Союз Советских Социалистических Округов Северной Америки

Последний раз редактировалось eddy; 12.02.2014 в 23:16. Причина: upd
eddy вне форума   Ответить с цитированием
Непрочитано 12.02.2014, 18:31   #1113
boydyzy
Частый гость
 
Регистрация: 30.12.2008
Сообщений: 36
Сказал спасибо: 7
Сказали Спасибо 28 раз(а) в 13 сообщении(ях)
boydyzy на пути к лучшему
По умолчанию Re: FAQ по STM8

Люди добрые, помогите. Уже 3 дня не могу разобраться, может кто сталкивался.
Среда - STM8S-DISCOVERY (STM8S105C6T6) + IAR
Предыстория.
Считаю CRC16. Натыкаюсь на странность - сумма не сходится! Т.е. та, что вычислена компилятором (IAR) и та, что в программе - разные.
Грешил на кривые руки сначала. Начал отлаживать. Оказалось определенные куски считает функция на кристалле правильно. Но после определенного момента - не сходится.
Дальнейший дебаг показал странность:
Загрузка байта в переменную по адресу дает не тот результат, что ожидается. Должен грузиться в байт 0x81, а оказывается 0x8B.
Причем это бывает в одном и том же месте, хотя если меняется код, то адрес ошибки со считыванием может меняться, но это всегда ошибка на 81 и возвращается всегда 8B, но в другом месте может считать 81 нормально. Вообще считывание идет нормально везде, кроме этого места. Т.е. соседние байты при изменении указателя считываются нормально.
Если вручную в этом ОДНОМ месте поменять в отладчике считанное значение на правильное (81), то сумма посчитается правильно.
Что бы не подумали, что у меня глюки, приведу куски кода и как меняются регистры-память.
Интересует адрес 0x8FD8, содержимое в памяти 00 81 ff ff ff ff ff ff
Код -
unsigned char *p = 0x8FD8
unsigned char byte = *(p)
Первое считывание byte = 00 (правильно)
Увеличиваем p++
Считываем - byte = 8B (должно быть 81)
Увеличиваем p++
Считываем byte = FF (правильно)

В окне с памятью вижу нужное значение - 81, считывается - 8B
Смотрю дизасм, код такой:
// unsigned char byte = *(p);
92C606 LD A, [?b6.w]
B709 LD ?b9, A
К моменту загрузки [?b6.w] имеет правильное значение 0x8FD9.
Операция LD A, [?b6.w] грузит по непонятной причине в A значение 8B, что видно после ее выполнения в регистрах.

Вопрос - в чем проблема? Дохлый кристалл или совершенно кривые руки?
boydyzy вне форума   Ответить с цитированием
Непрочитано 13.02.2014, 03:21   #1114
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию Re: FAQ по STM8

Надо бы привести фрагмент реального кода, а не его описание.
А то получается, что при объявлении переменной byte в неё кладётся значение, на которое указывает в данный момент пойнтер p. Потом пойнтер увеличивается, и Вы ожидаете, что и переменная byte тоже изменится? То есть byte как бы отслеживает, на что указывает пойнтер по ходу программы?
Судя по описанию, связь byte и p была только при объявлении byte, а после этого их дорожки разошлись. Пойнтер пошёл скакать по памяти, а byte как сидел с 00, так и должен сидеть дальше. Непонятно, как вообще получается разные значения считывать из него ...
Вобщем, нужен реальный код.
Yurkin2014 вне форума   Ответить с цитированием
Непрочитано 13.02.2014, 16:17   #1115
boydyzy
Частый гость
 
Регистрация: 30.12.2008
Сообщений: 36
Сказал спасибо: 7
Сказали Спасибо 28 раз(а) в 13 сообщении(ях)
boydyzy на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от Yurkin2014 Посмотреть сообщение
Вобщем, нужен реальный код.
Код из библиотеки IAR. С его примерами.
Привожу тут:
Код:
unsigned short slow_crc16(unsigned short sum, unsigned char *p, unsigned short len)
{
  while (len--)
  {
    int i;
    unsigned char byte = *(p);
    for (i = 0; i ‹ 8; ++i)
    {
      unsigned long osum = sum;
      sum ‹‹= 1;
      if (byte & 0x80)
        sum |= 1;
      if (osum & 0x8000)
        sum ^= 0x1021;
      byte ‹‹= 1;
    }
    p++;
  }
  return sum;
}
Додумался запустить на симуляторе - считает правильно.

Последний раз редактировалось boydyzy; 13.02.2014 в 16:26.
boydyzy вне форума   Ответить с цитированием
Непрочитано 13.02.2014, 17:22   #1116
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию Re: FAQ по STM8

Ну, к примеру из библиотеки IAR вопросов нет. В цикле каждый раз после изменения пойнтера p++ переменной byte присваивается новое значение unsigned char byte = *(p).

Поглядите внимательно на место объявления переменных в Вашем коде. Может статься, что рядом с адресом 0x8FD8 в памяти находится другая переменная ххх, объявленная как char, например. А в программе её используют как int. Вот и портится 0x81 на 0x8B при записи в ххх.
Yurkin2014 вне форума   Ответить с цитированием
Непрочитано 14.02.2014, 01:45   #1117
boydyzy
Частый гость
 
Регистрация: 30.12.2008
Сообщений: 36
Сказал спасибо: 7
Сказали Спасибо 28 раз(а) в 13 сообщении(ях)
boydyzy на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от Yurkin2014 Посмотреть сообщение
Ну, к примеру из библиотеки IAR вопросов нет. В цикле каждый раз после изменения пойнтера p++ переменной byte присваивается новое значение unsigned char byte = *(p).

Поглядите внимательно на место объявления переменных в Вашем коде. Может статься, что рядом с адресом 0x8FD8 в памяти находится другая переменная ххх, объявленная как char, например. А в программе её используют как int. Вот и портится 0x81 на 0x8B при записи в ххх.
Проблема в том, что вот этот код и выполняется. Передается указатель на 0x8FD8, счетчик на 4.
При первом считываении по адресу 0x8FD8 читается правильно - 00.
Второй проход - читается фигня (8B вместо 81).
Третий - опять нормально - ff.
В окне инспектора памяти видно правильные значения по этому адресу - 00 81 ff ff ff ff ff ff
А читается другое.
Еще раз - смотрел именно процесс считывания в регистр из памяти.
Выполняется команда LD A, [?b6.w], значение ?b6.w = 0x8FD9
Читается в регистра А значение 8B
Причем только на кристалле читается неправильно, а в симуляторе - правильно.
Если что - это область памяти программ. Это код. Я проверяю его контрольную сумму, что бы убедиться в бутлоадере, что главная программа в порядке и обновление не требуется.
Проверка контрольки другими средствами дает правильные значения, если бы считалось 81, как и положено. Т.е. читается явно фигня.
С чем связано - понять не могу.

Последний раз редактировалось boydyzy; 14.02.2014 в 01:50.
boydyzy вне форума   Ответить с цитированием
Непрочитано 14.02.2014, 10:05   #1118
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: FAQ по STM8

boydyzy, а у вас там, часом, никакой счетчик не завалялся по этому адресу? Что там у вас в .rst-файле по этому адресу лежит?
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума   Ответить с цитированием
Непрочитано 14.02.2014, 12:41   #1119
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: FAQ по STM8

Проще всего проверить код на лругой плате. А так, если есть подозрения на "мерцание", то добавьте простой код типа
Код:
  volatile uint8_t tmp = 0;

  while(1)
   {
    tmp = (*(__IO uint8_t *)(0x8FD8));
    if(tmp != 0x81) break;
    
//    Delay_mS(5);
   }
  
  nop();
и посмотрите. Можно задержку добавить/поиграться.
Но мне кажется, что там что-то связанное с volatile, точнее с его отсутствием.
nahimovv вне форума   Ответить с цитированием
Непрочитано 22.02.2014, 11:34   #1120
vehfdtqxbrc
Прохожий
 
Регистрация: 22.02.2014
Сообщений: 2
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
vehfdtqxbrc на пути к лучшему
По умолчанию Re: FAQ по STM8

добрые люди помогите тупому
не разу с прошивками не связывался
пытаюсь собрать схему на STM8S105C6T6
имею STM8Discovery пошивку stm.s19 ST Visual Develop ST Visual Programmer
хочу прошить и отломить МК
подскажите какую программку установить куда загрузить прошивку
и какую кнопочку нажать чтобы прошить или дайте ссылку где все
разжевано
лазил по форумам голова пухнет не чего не понял там слова заморские
непонятные
заранее спасибо

Последний раз редактировалось vehfdtqxbrc; 22.02.2014 в 11:37.
vehfdtqxbrc вне форума   Ответить с цитированием
Ответ

Закладки

Метки
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, время: 00:49.


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