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

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

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

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

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

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


 
Опции темы
Непрочитано 03.09.2019, 18:36  
MikeF
Прописка
 
Регистрация: 14.04.2005
Сообщений: 116
Сказал спасибо: 12
Сказали Спасибо 18 раз(а) в 12 сообщении(ях)
MikeF на пути к лучшему
По умолчанию Re: FAQ по STM8

Столкнулся с забавным расположением данных в hex и s19 файлах генерируемых Cosmic - адреса идут не по порядку, а блоками в перемешку. Например так:

:0890800000000096000003E966
:20908B00AE17FF9490CE9088AE908AF62725A5602717BF08E E03BF0BBE08EE0190F6F75C9A
:2090AB00905C90B30B26F5BE08909390EE031C000520D8AE0 0002002F75CA3000E26F9AE2C
:2090CB0001002002F75CA3010026F9CD90DB20FE350850C67 2185011721850123506530C32
:2090EB00725F530D357D530E7214530072105304721053017 21053009AAE0000CD918BAEE5
:20910B009080CD915B24067218500F20047219500FAE0000C D918BAE9084CD915B25DAAE9B
:20912B000000BF02AE0000BF0020CE8080808080808080808 0808080AE0000A601CD917B5A
:20914B0072115302808080808080808080808080B604F1261 AB605E101260CB606E10226AD
:20916B0006B607E10327089C2403A6FF81A60181EB03E7032 4096C0226056C0126017C81CE
:12918B0088F6B704E601B705E602B706E603B7078481A5
:209000008200908B8200913782009138820091398200913A8 200913B8200913C8200913D98
:209020008200913E8200913F8200913682009136820091408 20091418200914282009143A9
:2090400082009150820091518200915282009153820091548 20091558200915682009157DC
:2090600082009158820091598200915A82009136820091368 200913682009136820091363F
:03908800908B00CA
:00FFFF0101

Хотя казалось бы логичным чтобы адреса в файле следовали линейно друг за другом (как генерирует например Atmel Studio) и файл выглядел бы вот так :

:209000008200908B8200913782009138820091398200913A8 200913B8200913C8200913D98
:209020008200913E8200913F8200913682009136820091408 20091418200914282009143A9
:2090400082009150820091518200915282009153820091548 20091558200915682009157DC
:2090600082009158820091598200915A82009136820091368 200913682009136820091363F
:0890800000000096000003E966
:03908800908B00CA
:20908B00AE17FF9490CE9088AE908AF62725A5602717BF08E E03BF0BBE08EE0190F6F75C9A
:2090AB00905C90B30B26F5BE08909390EE031C000520D8AE0 0002002F75CA3000E26F9AE2C
:2090CB0001002002F75CA3010026F9CD90DB20FE350850C67 2185011721850123506530C32
:2090EB00725F530D357D530E7214530072105304721053017 21053009AAE0000CD918BAEE5
:20910B009080CD915B24067218500F20047219500FAE0000C D918BAE9084CD915B25DAAE9B
:20912B000000BF02AE0000BF0020CE8080808080808080808 0808080AE0000A601CD917B5A
:20914B0072115302808080808080808080808080B604F1261 AB605E101260CB606E10226AD
:20916B0006B607E10327089C2403A6FF81A60181EB03E7032 4096C0226056C0126017C81CE
:12918B0088F6B704E601B705E602B706E603B7078481A5
:00FFFF0101

Для прошивки штатными средствами конечно нет разницы, что в файле намешано, а вот для своего бутлоадера это уже имеет значение, данные придется как-то парсить и выравнивать (это усложняет бутлоадер), чтобы писать flash блоками или править файлы перед скармливанием их бутлоадеру. Кто-нибудь решал такую задачу по причесыванию файлов до нормального, линейного следования адресов?
Реклама:
MikeF вне форума  
Непрочитано 17.12.2019, 07:23  
MikeF
Прописка
 
Регистрация: 14.04.2005
Сообщений: 116
Сказал спасибо: 12
Сказали Спасибо 18 раз(а) в 12 сообщении(ях)
MikeF на пути к лучшему
По умолчанию Re: FAQ по STM8

Возник вопрос по использованию printf для вывода в UART. С одним UART всё понятно, как быть при попеременном выводе в оба UART у stm8? Судя по другим контроллерам и компиляторам можно как-то воспользоваться функцией fprintf, но в Cosmic я её не вижу. Хотелось бы решить это элегантно, без флагов в putchar.
MikeF вне форума  
Непрочитано 17.12.2019, 08:46  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,839
Сказал спасибо: 2,530
Сказали Спасибо 11,764 раз(а) в 5,895 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от MikeF Посмотреть сообщение
Хотелось бы решить это элегантно
Я обычно вывожу в строку, а потом строку - куда угодно. Вывод в УАРТ-ы у меня из буфера на прерываниях, потому идет подряд и без задержек.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 17.12.2019, 08:56  
MikeF
Прописка
 
Регистрация: 14.04.2005
Сообщений: 116
Сказал спасибо: 12
Сказали Спасибо 18 раз(а) в 12 сообщении(ях)
MikeF на пути к лучшему
По умолчанию Re: FAQ по STM8

Т.е. sprintf и свой вывод в порты, понятно, спасибо. Может ещё кто-нибудь предложит варианты?
MikeF вне форума  
Непрочитано 17.12.2019, 09:30  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,580
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от MikeF Посмотреть сообщение
sprintf
Разве что самописный.
Я тоже сначала формирую текстовый буфер, а потом отправляю его куда нужно. Правда, с STM8 не так хорошо, как с STM32 — DMA у STM8S нет, поэтому приходится на прерываниях отправку организовывать...
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 17.12.2019, 11:33  
MikeF
Прописка
 
Регистрация: 14.04.2005
Сообщений: 116
Сказал спасибо: 12
Сказали Спасибо 18 раз(а) в 12 сообщении(ях)
MikeF на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от eddy Посмотреть сообщение
поэтому приходится на прерываниях отправку организовывать
Я вот тоже о прерываниях думаю, только не пойму как это будет работать с printf и putchar, на практике проверить руки пока не дошли.
MikeF вне форума  
Непрочитано 17.12.2019, 11:57  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,580
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: FAQ по STM8

Да элементарно будет: формируем помаленьку буфер. Как только набрали нужное количество символов (или же сформировали строчку с данными), копируем этот буфер во внутренний буфер передачи UART'а и выставляем флаг - счетчик данных для передачи. Все, КА отправки данных "сам все сделает". На прием же полезно делать двойную буферизацию: первый буфер заполнили (дошли до '\n', буфер кончился или еще что), выставили флаг готовности, заполняем другой буфер...
Можно вообще сделать эдакий аналог stdio с построчной буферизацией: самопальный putchar постепенно заполняет буфер, а как только дело дошло до конца буфера или '\n', инициирует отправку.
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 17.12.2019, 12:21  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,839
Сказал спасибо: 2,530
Сказали Спасибо 11,764 раз(а) в 5,895 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: FAQ по STM8

Можно на кольцевых. Вот так сделано в CV:
PHP код:
#define DATA_REGISTER_EMPTY ( 1 ‹‹ UDRE )
#define RX_COMPLETE ( 1 ‹‹ RXC )

#define FRAMING_ERROR ( 1 ‹‹ FE )

#define PARITY_ERROR ( 1 ‹‹ UPE )

#define DATA_OVERRUN ( 1 ‹‹ DOR )


// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE ‹= 256
unsigned char rx_wr_index=0,rx_rd_index=0;
#else
unsigned int rx_wr_index=0,rx_rd_index=0;
#endif

#if RX_BUFFER_SIZE ‹ 256
unsigned char rx_counter=0;
#else
unsigned int rx_counter=0;
#endif

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_RXCvoid usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((
status & (FRAMING_ERROR PARITY_ERROR DATA_OVERRUN))==0)
   {
   
rx_buffer[rx_wr_index++]=data;
#if RX_BUFFER_SIZE == 256
   // special case for receiver buffer size=256
   
if (++rx_counter == 0rx_buffer_overflow=1;
#else
   
if (rx_wr_index == RX_BUFFER_SIZErx_wr_index=0;
   if (++
rx_counter == RX_BUFFER_SIZE)
      {
      
rx_counter=0;
      
rx_buffer_overflow=1;
      }
#endif
   
}
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (
rx_counter==0);
data=rx_buffer[rx_rd_index++];
#if RX_BUFFER_SIZE != 256
if (rx_rd_index == RX_BUFFER_SIZErx_rd_index=0;
#endif
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

// USART Transmitter buffer
#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE ‹= 256
unsigned char tx_wr_index=0,tx_rd_index=0;
#else
unsigned int tx_wr_index=0,tx_rd_index=0;
#endif

#if TX_BUFFER_SIZE ‹ 256
unsigned char tx_counter=0;
#else
unsigned int tx_counter=0;
#endif

// USART Transmitter interrupt service routine
interrupt [USART_TXCvoid usart_tx_isr(void)
{
if (
tx_counter)
   {
   --
tx_counter;
   
UDR=tx_buffer[tx_rd_index++];
#if TX_BUFFER_SIZE != 256
   
if (tx_rd_index == TX_BUFFER_SIZEtx_rd_index=0;
#endif
   
}
}

void putchar(char c)
{
while (
tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((UCSRA DATA_REGISTER_EMPTY)==0))
   {
   
tx_buffer[tx_wr_index++]=c;
#if TX_BUFFER_SIZE != 256
   
if (tx_wr_index == TX_BUFFER_SIZEtx_wr_index=0;
#endif
   
++tx_counter;
   }
else
   
UDR=c;
#asm("sei")

Взял это за основу и перепиливаю по нужде и разумению.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.

Последний раз редактировалось akegor; 17.12.2019 в 12:26.
akegor вне форума  
Непрочитано 17.12.2019, 12:26  
MikeF
Прописка
 
Регистрация: 14.04.2005
Сообщений: 116
Сказал спасибо: 12
Сказали Спасибо 18 раз(а) в 12 сообщении(ях)
MikeF на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от eddy Посмотреть сообщение
Да элементарно будет: формируем помаленьку буфер. Как только набрали нужное количество символов (или же сформировали строчку с данными), копируем этот буфер во внутренний буфер передачи UART'а и выставляем флаг - счетчик данных для передачи. Все, КА отправки данных "сам все сделает".
Вы здесь описываете, так понимаю, самопальный вариант, а я говорю про стандартный printf, который наверное сделан через цикл из которого не выйдешь пока всё не отправишь, соответственно как в него внедрять прерывание по отправке байта?
Вы для чего используете прерывания при отправке, чтобы пока байт отправляется, основная прога исполнялась?
MikeF вне форума  
Непрочитано 17.12.2019, 12:53  
MikeF
Прописка
 
Регистрация: 14.04.2005
Сообщений: 116
Сказал спасибо: 12
Сказали Спасибо 18 раз(а) в 12 сообщении(ях)
MikeF на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от akegor Посмотреть сообщение
Вот так сделано в CV:
А можно целиком этот пример увидеть, так понимаю в нем как раз работают через стандартную stdio?
MikeF вне форума  
 

Закладки

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


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