Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ср авг 10, 2022 16:03:25
Сразу признаюсь, что очень давно не писал на Си для МК и уже много забыл.
Ткните носом, кому не лень.
Вот есть у СТМ8 файл iostm8l001j3.h, который подключил вначале программы. Однако, в нем есть описания всех регистров и их битов.
Но запись в виде:
PB_DDR_bit.DDR6 = 1;
меня не устраивает.
Можно ли как-то правильно это поменять, чтобы писать что-то вроде:
GPIOB->CRH &= ~(GPIO_CRH_MODE12 | GPIO_CRH_CNF12);
?
Хочу, чтобы все было одинаково с СТМ32...
Добавлено after 1 minute 11 seconds:Честно... опять забыл все про структуры... ( Вот они тжело мне даются.
Ср авг 10, 2022 16:44:33
Если освежите в памяти, что такое "указатель на структуру", то конечно же поймете, что можно. Потому что запись GPIOB->CRH представляет собой обращение к элементу структуры GPIO_TypeDef через указатель на структуру, об этом говорит значок -> в отличие от символа точки . В свою очередь, GPIOB - это текстовая короткая запись указателя на структуру ((GPIO_TypeDef *) GPIOB_BASE), в которой GPIOB_BASE - есть ничто иное как числовой адрес группы регистров GPIOB, записанный через текстовые определения.
Ср авг 10, 2022 18:04:40
Спасибо большое. ) Как раз про это и читаю. Снова и снова. Именно про указатели.
Добавлено after 10 minutes 53 seconds:
По разному у них эти хидеры организованы... Похоже на мой первый взгляд для СТМ8 написание можно превратить в нечто похожее для АВР8. Не переписывать же весь файл библиотеки.
Ср авг 10, 2022 18:08:40
Не спорю, тема непростая, сам далеко не с первого раза понял.
Я с STM8 не работал, сразу на STM32 пересел, а плата Дискавери с STM8 так и осталась лежать нетронутой. Поэтому не знаю, как в STM8 там сделано. Но наверняка у порта есть аналогичный набор регистров. Нужно составить структуру этих регистров по порядку, с учетом их размерности, в том же виде, как сделано у STM32 со структурой GPIO_TypeDef, то есть создать новый тип данных в виде структуры посредством typedef struct. Затем нужно узнать из карты адресного пространства адрес первого регистра в этой группе и объявить указатель на этот адрес, причем тип указателя (его размерность) будет как раз типом структуры: #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE), где GPIOB_BASE - записанный числом адрес первого регистра этой группы. После этого начнет работать запись в привычном для STM32 виде.
Да, а переписывать нужно мноооооого, весь заголовочник, в принципе то. Времени потратится немало.
Ср авг 10, 2022 18:16:47
Можно, конечно, макросов наопределять, да и сделать структуры, как у STM32, но ведь под STM8 нет gcc, а есть лишь убогий sdcc, который вообще оптимизировать не умеет. Вот и приходится
как-то так писать.
Ср авг 10, 2022 18:22:14
Жаль, конечно... .ХОтелось бы от одного производителя, пусть и разные линейки микросхем, но с одинаковым подходом.... Было бы куда проще.
Ср авг 10, 2022 19:21:08
Но это физически невозможно, т.к., к сожалению, а) для STM8 нет gcc, б) восьмибитка значительно ограничена в ресурсах, в) там и регистры совершенно иначе организованы.
P.S. Советую там у меня на гитхабе по ссылочке попастись, я там много чего успел на STM8 сделать, пока не плюнул и не решил полностью на STM32 перейти.
P.P.S. Кстати, а почему именно STM8? Ведь от него есть выгода лишь если делать огромную кучу изделий (да еще и на каком-нибудь S003, а то и S002), а для единичных поделок что STM32 за 70-200р, что STM8 за 45 и выше. Зато по способностям - просто море же разницы!
Ср авг 10, 2022 22:36:44
почему именно STM8
ну вот мне на них проще. Они сами проще, и писать проще. Лицензию Cosmic пока выдаёт, его особенности известны... написав что-то для ST7/STM8 я могу дать гарантию и затрачу меньше времени, чем с ARM, так как чтобы дать гарантию с ARM мне надо изучить его, пролистывание же книжки по ядру М3 этим изучением не является...
Конечно, если речь о типовых задачах. Если же из 8 выжимать что-то на пределе в попытке конкурировать с 32 - то конечно, нафиг, проще бездумно сгенерировать проект в кодогенераторе да натыкать требуемого.
... а ещё у меня пока достаточно много ST7/STM8, это тоже причина, может, и у ТС тоже их сотня )
Чт авг 11, 2022 05:29:29
)) у меня их ровно 100 штук. Нужны для одного любопытного проектика. Как прототип.
Чт авг 11, 2022 19:38:48
Еще вопрос для человека, который не знал, да еще и забыл...
Если я размещу двумерный массив, то он где разместиться во флеш или ОЗУ?
Чт авг 11, 2022 19:49:36
Если я размещу двумерный массив, то...
Если это массив переменных, то в ОЗУ. А если массив констант, то возможны варианты, но обычно во флеше.
Чт авг 11, 2022 20:03:37
Константы. однако, ИАР выдает ошибку, типа слишком много...
Вот такой мне надо:
- Код:
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
типа слишком много...
Так посмотрите на адрес массива. Я же сказал, что есть варианты. Есть компиляторы, где константам для попадания во флеш требуется специальный квалификатор.
Добавлено after 2 minutes 37 seconds:Вот такой мне надо:
- Код:
unsigned char Letter[5][15] = {
Прикольно.. А где квалификатор константы?
Должно быть
- Код:
const unsigned char Letter[5][15] = {
Чт авг 11, 2022 20:12:52
А вообще, не такой, наверное, разверну его по вертикали, т.к. проще выводить будет на светодиоды.. Но не принципиально. Будет одномерный массив, но с большим числом данных.
Аааа... спасибо. сейчас подправлю.
Добавлено after 2 minutes 55 seconds:
И еще, я не знаю как посмотреть адрес массива... Он же не компилирует
Чт авг 11, 2022 20:19:05
Он же не компилирует
Сначала нужно исправить все ошибки, естественно...
Диагностику приведите.
Чт авг 11, 2022 20:56:06
Я понял, что ему не нравится... Он не хочет, чтобы массив рвали. Т.е. каждый элемент после запятой перенесен на другую строку. Если все элементы в одну строку, то нормально....
Как так-то?!
И самый галвный вопрос, который сейчас интересен - как разместить массив данных во флеши у СТМ8?
Нет... Наврал... Не нравится ему запись в виде 0b00111,
Error[Pe253]: expected a "," C:\PR\IAR\First\main.c 11
Чт авг 11, 2022 21:13:04
Разберитесь поддерживает ли компилятор двочные литералы. Iar в этом плане строго стандарта придерживается, а двоичные литералы появились только в С++14. Появилась ли такая поддержка в С не помню, провеьте сами.
ЗЫ: Не путать с поддержкой двоичных констант компилятором GCC, она есть давно.
Чт авг 11, 2022 21:20:23
Блин...
Я вот всего второй день с этим микроконтроллером и ИАРом в том числе для него. И уже столько гемора. А рефренс на микроконтроллер показался очень простым. Почти нет никаких настроек. )))) Тут же запустил на частоте в 16 МГц, тут же помигал линейкой светодиодов. Решил дальше покопать с таймерами и сделать мигалку типа POV, чтобы буквы в воздухе пислала. И уперся в массив..... этих букв.
Добавлено after 1 minute 53 seconds:
В АВР можно было на Си писать так двоичные числа.
Чт авг 11, 2022 21:22:26
уперся в массив..... этих букв.
Если это буквы, то дефайнами приведите бинарные константы к удобочитаемому виду. При этом вместо бинарной формы определяйте шестнадцатиричную (HEX).
Чт авг 11, 2022 21:31:51
Да.. уже начитался об этом... Можно еще хэдер создать с дефайнами (256 штук). )))
Короче, Си не понимает такого представления двоичного числа. А в АВР это значит тоже где-то в хэдерах было, просто я не обращал внимание. Понятно теперь, что надо все в шестнадцатиричные приводить.
Добавлено after 1 minute 37 seconds:
В том и прикол был, что эти буквы читаются именно как матрицы в двоичном коде. Там прям буквы видно глазами, которые будут выводится на матрицу по столбцам.
Ладно. Смирюсь пока с этим.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.