Код в сообщении и на картинке отличается. В сообщении у вас переменная i не проинициализирована перед первым использованием. Что вы еще там исправили и где, выяснить невозможно.
Программирование STM8
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="Klepko",url="/forum/viewtopic.php?p=3449865#p3449865"]Вопрос, почему test = pData1 равно 0х03, хотя указатель pData1 указывает на значение 0x20?[/uquote]
Код в сообщении и на картинке отличается. В сообщении у вас переменная i не проинициализирована перед первым использованием. Что вы еще там исправили и где, выяснить невозможно.
Код в сообщении и на картинке отличается. В сообщении у вас переменная i не проинициализирована перед первым использованием. Что вы еще там исправили и где, выяснить невозможно.
- Реклама
Проверил в IAR этот же код работает как надо, проблема в Cosmic с указателями. Причем значение по указателю в космике записывается нормально *pData1 = test, а считывается неправильно test = *pData1
Всех убить! Всё отобрать!
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
Нет ни каких проблем в Cosmic c указателями, объявите test как volatile.
И какой-такой HAL вы юзаете с STM8?
И какой-такой HAL вы юзаете с STM8?
- Сообщения: 1846
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="dosikus",url="/forum/viewtopic.php?p=3450100#p3450100"]Нет ни каких проблем в Cosmic c указателями, объявите test как volatile.[/uquote]
До этого автору нужно научиться инитить переменные перед использованием. Тогда может и Cosmic окажется не при чём.
До этого автору нужно научиться инитить переменные перед использованием. Тогда может и Cosmic окажется не при чём.
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="dosikus",url="/forum/viewtopic.php?p=3450100#p3450100"]И какой-такой HAL вы юзаете с STM8?[/uquote]
Я как-то тоже по этом поводу сначала возбудился, но потом не стал заострять. Раз вопрос все-таки возник, то присоединяюсь к нему. Очень интересно, откуда здесь хал.
Насчет проверки, как работает тот или иной неспецифический для МК код, могу посоветовать пользоваться онлайн-компиляторами. Нужно просто в гулге вбить "Online C Compiler" и выбрать подходящий. Там же можно сохранить получившийся после пробных прогонов код и использовать ссылку на него, если он в последующем окажется зачем-то нужен.
Я как-то тоже по этом поводу сначала возбудился, но потом не стал заострять. Раз вопрос все-таки возник, то присоединяюсь к нему. Очень интересно, откуда здесь хал.
Насчет проверки, как работает тот или иной неспецифический для МК код, могу посоветовать пользоваться онлайн-компиляторами. Нужно просто в гулге вбить "Online C Compiler" и выбрать подходящий. Там же можно сохранить получившийся после пробных прогонов код и использовать ссылку на него, если он в последующем окажется зачем-то нужен.
- Реклама
dosikus спасибо большое! Объявил volatile и все заработало ура
Использовал для stm32 куб и хал, был доволен как слон )) Нажал пару кнопок в кубе, пару строчек кода в Keil написал и все работает)) А тут куб для STM8 фигня, хала нету, указатели всякие надо уметь правильно применять и еще пришлось переделывать библиотеку с халом от STM32 на STM8, а чтобы не путаться в названиях функций оставил старые )))
Использовал для stm32 куб и хал, был доволен как слон )) Нажал пару кнопок в кубе, пару строчек кода в Keil написал и все работает)) А тут куб для STM8 фигня, хала нету, указатели всякие надо уметь правильно применять и еще пришлось переделывать библиотеку с халом от STM32 на STM8, а чтобы не путаться в названиях функций оставил старые )))
Всех убить! Всё отобрать!
Прямо ситуация, когда пересел с автомобиля с коробкой - автоматом на механику: "А зачем здесь третья педаль?"
Учитесь нормальные языки применять, а то останетесь неучами на всю жизнь.
Учитесь нормальные языки применять, а то останетесь неучами на всю жизнь.
Два часа назад вышел RC1 SDCC 3.8.0 https://sourceforge.net/projects/sdcc/
Бинарные сборки для Windows имеются
Из приятного, STM8S207S8T6C теперь успешно поддерживается, в связи с появлением в SDCC для STM8 24-х битной адресации (Large memory model).
Бинарные сборки для Windows имеются
Из приятного, STM8S207S8T6C теперь успешно поддерживается, в связи с появлением в SDCC для STM8 24-х битной адресации (Large memory model).
- Сообщения: 8
- Зарегистрирован: Сб авг 18, 2018 21:03:23
Добрый день.
Есть у меня один весьма нубский вопрос, который, тем не менее меня все никак не отпускает.
Как реализованы аппаратные интерфейсы в stm8?
В датащите указано следующее
The serial peripheral interface (SPI1) provides half/ full duplex synchronous serial
communication with external devices.
Maximum speed: 8 Mbit/s (fSYSCLK/2) both for master and slave
Full duplex synchronous transfers
Simplex synchronous transfers on 2 lines with a possible bidirectional data line
Master or slave operation - selectable by hardware or software
Hardware CRC calculation
Slave/master selection input pin
Note: SPI1 can be served by the DMA1 Controller.
3.14.2 I²C
The I2C bus interface (I2C1) provides multi-master capability, and controls all I²C busspecific
sequencing, protocol, arbitration and timing.
Master, slave and multi-master capability
Standard mode up to 100 kHz and fast speed modes up to 400 kHz
7-bit and 10-bit addressing modes
SMBus 2.0 and PMBus support
Hardware CRC calculation
Note: I2C1 can be served by the DMA1 Controller.
3.14.3 USART
The USART interface (USART1) allows full duplex, asynchronous communications with
external devices requiring an industry standard NRZ asynchronous serial data format. It
offers a very wide range of baud rates.
1 Mbit/s full duplex SCI
SPI1 emulation
High precision baud rate generator
SmartCard emulation
IrDA SIR encoder decoder
Single wire half duplex mode
Note: USART1 can be served by the DMA1 Controller.
Так вот, DMA1 Controller - это что за зверь такой?
Можно ли использовать их все вместе, одновременно?
Есть у меня один весьма нубский вопрос, который, тем не менее меня все никак не отпускает.
Как реализованы аппаратные интерфейсы в stm8?
В датащите указано следующее
Спойлер
3.14.1 SPIThe serial peripheral interface (SPI1) provides half/ full duplex synchronous serial
communication with external devices.
Maximum speed: 8 Mbit/s (fSYSCLK/2) both for master and slave
Full duplex synchronous transfers
Simplex synchronous transfers on 2 lines with a possible bidirectional data line
Master or slave operation - selectable by hardware or software
Hardware CRC calculation
Slave/master selection input pin
Note: SPI1 can be served by the DMA1 Controller.
3.14.2 I²C
The I2C bus interface (I2C1) provides multi-master capability, and controls all I²C busspecific
sequencing, protocol, arbitration and timing.
Master, slave and multi-master capability
Standard mode up to 100 kHz and fast speed modes up to 400 kHz
7-bit and 10-bit addressing modes
SMBus 2.0 and PMBus support
Hardware CRC calculation
Note: I2C1 can be served by the DMA1 Controller.
3.14.3 USART
The USART interface (USART1) allows full duplex, asynchronous communications with
external devices requiring an industry standard NRZ asynchronous serial data format. It
offers a very wide range of baud rates.
1 Mbit/s full duplex SCI
SPI1 emulation
High precision baud rate generator
SmartCard emulation
IrDA SIR encoder decoder
Single wire half duplex mode
Note: USART1 can be served by the DMA1 Controller.
Можно ли использовать их все вместе, одновременно?
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
У DMA-контроллера обычно несколько каналов(потоков), привязанных к другим периферийным устройствам. Все их можно использовать одновременно. Сколько их и как привязаны даташит на конкретный чип скажет.
- Сообщения: 3386
- Зарегистрирован: Пн окт 11, 2010 19:00:08
DMA в переводе на русский это ПДП, т. е. Прямой Доступ к Памяти. https://ru.wikipedia.org/wiki/Прямой_доступ_к_памятиSuigintou писал(а):Так вот, DMA1 Controller - это что за зверь такой?
Здесь есть пример, правда для STM32. http://www.cyberforum.ru/blogs/204791/blog5169.html
Возможно после небольшой правки кода его удастся запустить на STM8.
- Сообщения: 373
- Зарегистрирован: Ср мар 09, 2016 08:07:41
[uquote="Suigintou",url="/forum/viewtopic.php?p=3480181#p3480181"]Добрый день.
Есть у меня один весьма нубский вопрос, который, тем не менее меня все никак не отпускает.
Так вот, DMA1 Controller - это что за зверь такой?[/uquote]
В examples SPL для L-серии, есть самый простой и самый понятный пример использования DMA, когда DMA каналом связывается АЦП с одной стороны, и ШИМ контроллер с другой. С точки зрения программирования, такой DMA канал избавляет от необходимости использования АЦП прерывания с одной единственной операцией копирования: "ШИМ_значение = АЦП_значение;"
Есть у меня один весьма нубский вопрос, который, тем не менее меня все никак не отпускает.
Так вот, DMA1 Controller - это что за зверь такой?[/uquote]
В examples SPL для L-серии, есть самый простой и самый понятный пример использования DMA, когда DMA каналом связывается АЦП с одной стороны, и ШИМ контроллер с другой. С точки зрения программирования, такой DMA канал избавляет от необходимости использования АЦП прерывания с одной единственной операцией копирования: "ШИМ_значение = АЦП_значение;"
- Сообщения: 386
- Зарегистрирован: Чт окт 31, 2013 10:54:32
Использую IAR. Хочу собрать uint32_t из 4 байтов. При сдвиге байта на 16, возникает следующая ошибка:
Кто сталкивался с таким и как решить проблему.?
Код: Выделить всё
Warning[Pe063]: shift count is too large
Сначала все операнды привести к 32-х битному виду и тогда объединять. типа
result = ((uint32_t)data3 << 24) | ((uint32_t)data2 << 16) | ((uint32_t)data1 << 8) | ((uint32_t)data0 << 0);
и без разницы, иар или что другое. Это язык C.
result = ((uint32_t)data3 << 24) | ((uint32_t)data2 << 16) | ((uint32_t)data1 << 8) | ((uint32_t)data0 << 0);
и без разницы, иар или что другое. Это язык C.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
А куда Вы 8 бит 16 раз сдвигаете?
А где логика в сие действие ?alex38779 писал(а):При сдвиге байта на 16
union вам в помощь. И никаких сдвигов делать не придётся.
- Сообщения: 1040
- Зарегистрирован: Вс сен 25, 2011 19:09:33
есть ли у кого рабочий пример бутлоадера?
предпочтительно на Си/С++
хочу написать загрузчик из внешней eeprom, куда прошивку предварительно запишет основная прошивка
но для примера подойдет любой загрузчик
предпочтительно на Си/С++
хочу написать загрузчик из внешней eeprom, куда прошивку предварительно запишет основная прошивка
но для примера подойдет любой загрузчик
Расскажу по памяти как делал.
1. Написал скрипт линкера такой, что вектора остались на месте (я их не нашел как переносить в STM8), а все остальное разместилось в самом конце памяти программ. Все остальное это сам загрузчик. При том , для этой области памяти была включена защита от записи, т.е. от случайной порчи.
2. Основной проект собирался со скриптом линкера по умолчанию.
При запуске МК. Запускался загрузчик, и ждал от UART некой команды, если таковой не было, то передавалось управление основной программе, по адресу записанному в еепром.
Если эта некая команда приходила, то опять же по некому протоколу через UART, то загрузчик начинал обновлять всю программу. Только не правил вектор сброса, а записывал его в еепром.
Что в STM8 прикольно, область флеш не надо стирать страницами, работаешь как с еепром побайтно.
Из самых явных недостатков, остается вероятность случайно порчи вектора сброса.
Так как по памяти, мог чего приврать. Но в целом как-то так.
1. Написал скрипт линкера такой, что вектора остались на месте (я их не нашел как переносить в STM8), а все остальное разместилось в самом конце памяти программ. Все остальное это сам загрузчик. При том , для этой области памяти была включена защита от записи, т.е. от случайной порчи.
2. Основной проект собирался со скриптом линкера по умолчанию.
При запуске МК. Запускался загрузчик, и ждал от UART некой команды, если таковой не было, то передавалось управление основной программе, по адресу записанному в еепром.
Если эта некая команда приходила, то опять же по некому протоколу через UART, то загрузчик начинал обновлять всю программу. Только не правил вектор сброса, а записывал его в еепром.
Что в STM8 прикольно, область флеш не надо стирать страницами, работаешь как с еепром побайтно.
Из самых явных недостатков, остается вероятность случайно порчи вектора сброса.
Так как по памяти, мог чего приврать. Но в целом как-то так.
- Сообщения: 1040
- Зарегистрирован: Вс сен 25, 2011 19:09:33
Спасибо
Можно уточнить про загрузчик в хвосте памяти?
Как он получает управление, где этот вектор сброса?
Нашел реализацию похожей на мою задачи http://we.easyelectronics.ru/STM8/bootl ... zduhu.html
Но там загрузчик как раз в начале, а основной проект сдвигается
В этом варианте так понимаю вектор сброса находится в области загрузчикаи его нельзя испортить при загрузке основной программы?
И как защитить кусок флэша от записи?
Можно уточнить про загрузчик в хвосте памяти?
Как он получает управление, где этот вектор сброса?
Нашел реализацию похожей на мою задачи http://we.easyelectronics.ru/STM8/bootl ... zduhu.html
Но там загрузчик как раз в начале, а основной проект сдвигается
В этом варианте так понимаю вектор сброса находится в области загрузчикаи его нельзя испортить при загрузке основной программы?
И как защитить кусок флэша от записи?
Ссылку влом читать, не до STM8. Я сделал загрузчик в конец, чтобы загрузчик располагался в области памяти программ со включенной защитой от перезаписи. Если включить защиту памяти программ в начале, то как вектора править? Может в других STM8 вектора переносятся, в моем детском STM8S103 этого делать нельзя.
Вектор представляет собой спец команду INT, применяется только в таблице векторов. Опкод 82xxxxxx где иксы адрес.
При рестатре МК, он сразу и выполняется.
Я же писал. Загрузчик у меня отдельный проект, со своим скриптом линковщика. А так как под исполняемый код был выделен регион в хвосте памяти, то и вектор сброса автоматически "компилился" на него.
Этот проект загрузчика зашивался программатором.
Другой основной проект собирался отдельно от загрузчика. Загручзчик получал бинарник и прошивал им память, но не трогал вектор сброса, а вектор сброса основного проекта запоминал в еепром, чтобы знать куда передавать управление. Но это я повторяюсь.
Вектор сброса , там же где все остальные вектора, по адресу 0x8000 и каждый вектор занимает 4 байта, Раздел Interrupt mapping ДШ.Можно уточнить про загрузчик в хвосте памяти?
Как он получает управление, где этот вектор сброса?
Вектор представляет собой спец команду INT, применяется только в таблице векторов. Опкод 82xxxxxx где иксы адрес.
При рестатре МК, он сразу и выполняется.
Я же писал. Загрузчик у меня отдельный проект, со своим скриптом линковщика. А так как под исполняемый код был выделен регион в хвосте памяти, то и вектор сброса автоматически "компилился" на него.
Этот проект загрузчика зашивался программатором.
Другой основной проект собирался отдельно от загрузчика. Загручзчик получал бинарник и прошивал им память, но не трогал вектор сброса, а вектор сброса основного проекта запоминал в еепром, чтобы знать куда передавать управление. Но это я повторяюсь.



