Форум РадиоКот https://radiokot.ru/forum/ |
|
На STM8 писать как для STM32 возможно? https://radiokot.ru/forum/viewtopic.php?f=62&t=184072 |
Страница 1 из 4 |
Автор: | СКАЗОЧНИК [ Ср авг 10, 2022 16:03:25 ] |
Заголовок сообщения: | На STM8 писать как для STM32 возможно? |
Сразу признаюсь, что очень давно не писал на Си для МК и уже много забыл. Ткните носом, кому не лень. Вот есть у СТМ8 файл iostm8l001j3.h, который подключил вначале программы. Однако, в нем есть описания всех регистров и их битов. Но запись в виде: PB_DDR_bit.DDR6 = 1; меня не устраивает. Можно ли как-то правильно это поменять, чтобы писать что-то вроде: GPIOB->CRH &= ~(GPIO_CRH_MODE12 | GPIO_CRH_CNF12); ? Хочу, чтобы все было одинаково с СТМ32... ![]() ![]() Добавлено after 1 minute 11 seconds: Честно... опять забыл все про структуры... ( Вот они тжело мне даются. |
Автор: | MLX90640 [ Ср авг 10, 2022 16:44:33 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
Если освежите в памяти, что такое "указатель на структуру", то конечно же поймете, что можно. Потому что запись GPIOB->CRH представляет собой обращение к элементу структуры GPIO_TypeDef через указатель на структуру, об этом говорит значок -> в отличие от символа точки . В свою очередь, GPIOB - это текстовая короткая запись указателя на структуру ((GPIO_TypeDef *) GPIOB_BASE), в которой GPIOB_BASE - есть ничто иное как числовой адрес группы регистров GPIOB, записанный через текстовые определения. |
Автор: | СКАЗОЧНИК [ Ср авг 10, 2022 18:04:40 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
Спасибо большое. ) Как раз про это и читаю. Снова и снова. Именно про указатели. Добавлено after 10 minutes 53 seconds: По разному у них эти хидеры организованы... Похоже на мой первый взгляд для СТМ8 написание можно превратить в нечто похожее для АВР8. Не переписывать же весь файл библиотеки. |
Автор: | MLX90640 [ Ср авг 10, 2022 18:08:40 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
Не спорю, тема непростая, сам далеко не с первого раза понял. Я с STM8 не работал, сразу на STM32 пересел, а плата Дискавери с STM8 так и осталась лежать нетронутой. Поэтому не знаю, как в STM8 там сделано. Но наверняка у порта есть аналогичный набор регистров. Нужно составить структуру этих регистров по порядку, с учетом их размерности, в том же виде, как сделано у STM32 со структурой GPIO_TypeDef, то есть создать новый тип данных в виде структуры посредством typedef struct. Затем нужно узнать из карты адресного пространства адрес первого регистра в этой группе и объявить указатель на этот адрес, причем тип указателя (его размерность) будет как раз типом структуры: #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE), где GPIOB_BASE - записанный числом адрес первого регистра этой группы. После этого начнет работать запись в привычном для STM32 виде. Да, а переписывать нужно мноооооого, весь заголовочник, в принципе то. Времени потратится немало. |
Автор: | Eddy_Em [ Ср авг 10, 2022 18:16:47 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
Можно, конечно, макросов наопределять, да и сделать структуры, как у STM32, но ведь под STM8 нет gcc, а есть лишь убогий sdcc, который вообще оптимизировать не умеет. Вот и приходится как-то так писать. |
Автор: | СКАЗОЧНИК [ Ср авг 10, 2022 18:22:14 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
Жаль, конечно... .ХОтелось бы от одного производителя, пусть и разные линейки микросхем, но с одинаковым подходом.... Было бы куда проще. |
Автор: | Eddy_Em [ Ср авг 10, 2022 19:21:08 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
Но это физически невозможно, т.к., к сожалению, а) для STM8 нет gcc, б) восьмибитка значительно ограничена в ресурсах, в) там и регистры совершенно иначе организованы. P.S. Советую там у меня на гитхабе по ссылочке попастись, я там много чего успел на STM8 сделать, пока не плюнул и не решил полностью на STM32 перейти. P.P.S. Кстати, а почему именно STM8? Ведь от него есть выгода лишь если делать огромную кучу изделий (да еще и на каком-нибудь S003, а то и S002), а для единичных поделок что STM32 за 70-200р, что STM8 за 45 и выше. Зато по способностям - просто море же разницы! |
Автор: | Martian [ Ср авг 10, 2022 22:36:44 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
почему именно STM8 ну вот мне на них проще. Они сами проще, и писать проще. Лицензию Cosmic пока выдаёт, его особенности известны... написав что-то для ST7/STM8 я могу дать гарантию и затрачу меньше времени, чем с ARM, так как чтобы дать гарантию с ARM мне надо изучить его, пролистывание же книжки по ядру М3 этим изучением не является...Конечно, если речь о типовых задачах. Если же из 8 выжимать что-то на пределе в попытке конкурировать с 32 - то конечно, нафиг, проще бездумно сгенерировать проект в кодогенераторе да натыкать требуемого. ... а ещё у меня пока достаточно много ST7/STM8, это тоже причина, может, и у ТС тоже их сотня ) |
Автор: | СКАЗОЧНИК [ Чт авг 11, 2022 05:29:29 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
)) у меня их ровно 100 штук. Нужны для одного любопытного проектика. Как прототип. |
Автор: | СКАЗОЧНИК [ Чт авг 11, 2022 19:38:48 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
Еще вопрос для человека, который не знал, да еще и забыл... Если я размещу двумерный массив, то он где разместиться во флеш или ОЗУ? |
Автор: | КРАМ [ Чт авг 11, 2022 19:49:36 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
Если я размещу двумерный массив, то... Если это массив переменных, то в ОЗУ. А если массив констант, то возможны варианты, но обычно во флеше. |
Автор: | СКАЗОЧНИК [ Чт авг 11, 2022 20:03:37 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
Константы. однако, ИАР выдает ошибку, типа слишком много... Вот такой мне надо: Код: unsigned char Letter[5][15] = { 0b0011, 0b1001, 0b1110, 0b1001, 0b0011, 0b0000, 0b0000, 0b0000, 0b0111, 0b0110, 0b0111, 0b1001, 0b0111, 0b1001, 0b0011,
0b0101, 0b1001, 0b0001, 0b1010, 0b0101, 0b0000, 0b0000, 0b0000, 0b1000, 0b1001, 0b1000, 0b1001, 0b1000, 0b1010. 0b0101, 0b1001, 0b1011, 0b0110, 0b1100, 0b1001, 0b0000, 0b1111, 0b0000, 0b1000, 0b1001, 0b1000, 0b1011, 0b1000, 0b1100, 0b1001, 0b1001, 0b1101, 0b0001, 0b1010, 0b1111, 0b0000, 0b0000, 0b0000, 0b1000, 0b1001, 0b1000, 0b1101, 0b1000, 0b1010, 0b1111, 0b1001, 0b1001, 0b1110, 0b1001, 0b1001, 0b0000, 0b0000, 0b0000, 0b0111, 0b0110, 0b0111, 0b1001, 0b0111, 0b1001, 0b1001 }; |
Автор: | КРАМ [ Чт авг 11, 2022 20:09:00 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
типа слишком много... Так посмотрите на адрес массива. Я же сказал, что есть варианты. Есть компиляторы, где константам для попадания во флеш требуется специальный квалификатор. Добавлено after 2 minutes 37 seconds: Вот такой мне надо: Код: unsigned char Letter[5][15] = { Прикольно.. А где квалификатор константы? Должно быть Код: const unsigned char Letter[5][15] = {
|
Автор: | СКАЗОЧНИК [ Чт авг 11, 2022 20:12:52 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
А вообще, не такой, наверное, разверну его по вертикали, т.к. проще выводить будет на светодиоды.. Но не принципиально. Будет одномерный массив, но с большим числом данных. Аааа... спасибо. сейчас подправлю. Добавлено after 2 minutes 55 seconds: И еще, я не знаю как посмотреть адрес массива... Он же не компилирует |
Автор: | КРАМ [ Чт авг 11, 2022 20:19:05 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
Он же не компилирует Сначала нужно исправить все ошибки, естественно... Диагностику приведите. |
Автор: | СКАЗОЧНИК [ Чт авг 11, 2022 20:56:06 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
Я понял, что ему не нравится... Он не хочет, чтобы массив рвали. Т.е. каждый элемент после запятой перенесен на другую строку. Если все элементы в одну строку, то нормально.... Как так-то?! ![]() И самый галвный вопрос, который сейчас интересен - как разместить массив данных во флеши у СТМ8? Нет... Наврал... Не нравится ему запись в виде 0b00111, Error[Pe253]: expected a "," C:\PR\IAR\First\main.c 11 |
Автор: | VladislavS [ Чт авг 11, 2022 21:13:04 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
Разберитесь поддерживает ли компилятор двочные литералы. Iar в этом плане строго стандарта придерживается, а двоичные литералы появились только в С++14. Появилась ли такая поддержка в С не помню, провеьте сами. ЗЫ: Не путать с поддержкой двоичных констант компилятором GCC, она есть давно. |
Автор: | СКАЗОЧНИК [ Чт авг 11, 2022 21:20:23 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
Блин... Я вот всего второй день с этим микроконтроллером и ИАРом в том числе для него. И уже столько гемора. А рефренс на микроконтроллер показался очень простым. Почти нет никаких настроек. )))) Тут же запустил на частоте в 16 МГц, тут же помигал линейкой светодиодов. Решил дальше покопать с таймерами и сделать мигалку типа POV, чтобы буквы в воздухе пислала. И уперся в массив..... этих букв. Добавлено after 1 minute 53 seconds: В АВР можно было на Си писать так двоичные числа. |
Автор: | КРАМ [ Чт авг 11, 2022 21:22:26 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
уперся в массив..... этих букв. Если это буквы, то дефайнами приведите бинарные константы к удобочитаемому виду. При этом вместо бинарной формы определяйте шестнадцатиричную (HEX). |
Автор: | СКАЗОЧНИК [ Чт авг 11, 2022 21:31:51 ] |
Заголовок сообщения: | Re: На STM8 писать как для STM32 возможно? |
Да.. уже начитался об этом... Можно еще хэдер создать с дефайнами (256 штук). ))) Короче, Си не понимает такого представления двоичного числа. А в АВР это значит тоже где-то в хэдерах было, просто я не обращал внимание. Понятно теперь, что надо все в шестнадцатиричные приводить. Добавлено after 1 minute 37 seconds: В том и прикол был, что эти буквы читаются именно как матрицы в двоичном коде. Там прям буквы видно глазами, которые будут выводится на матрицу по столбцам. Ладно. Смирюсь пока с этим. |
Страница 1 из 4 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |