Прямо с начала: ARM_CAN_Initialize() - два callback, ARM_I2C_Initialize() - один callback, ARM_USART_Initialize() - один callback, ARM_USBH_Initialize() - - два callback. Хватит для начала?
STM32 без Си. mikroBasic for ARM.
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
- Реклама
Мурик, получается действительно не заглядывали 
Прямо с начала: ARM_CAN_Initialize() - два callback, ARM_I2C_Initialize() - один callback, ARM_USART_Initialize() - один callback, ARM_USBH_Initialize() - - два callback. Хватит для начала?
Прямо с начала: ARM_CAN_Initialize() - два callback, ARM_I2C_Initialize() - один callback, ARM_USART_Initialize() - один callback, ARM_USBH_Initialize() - - два callback. Хватит для начала?
[uquote="Мурик",url="/forum/viewtopic.php?p=3642204#p3642204"][quote="dosikus"]Просто скачав книжки не получится понять почему происходят ошибки при компиляции[/uquote]
Я заказывал книгу Белова "Разработка устройств на мк AVR",с диском
(Черт меня дернул читать эту ветку,снова читаю эту книгу,может до меня чего-то и дойдет...
)
Я заказывал книгу Белова "Разработка устройств на мк AVR",с диском
(Черт меня дернул читать эту ветку,снова читаю эту книгу,может до меня чего-то и дойдет...
Novice user, может быть, я и не прав, но знакомиться с C надо по Кернигану и Ритчи. Причем пробовать их примеры не на МК, а на обычном компе, например с GCC. Тогда быстро прийдет понимание языка. А пытаться одновременно изучать МК и С можно конечно, но в разы сложнее, чем по очереди.
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Не пользовался этими функциями.ПростоНуб писал(а):Мурик, получается действительно не заглядывали
AVR и ARM это не одно и тоже.Novice user писал(а):Я заказывал книгу Белова "Разработка устройств на мк AVR",с диском
Чтобы изучить Си нужна одна из книг для начинающих по этому ЯП, а не по МК.
Можно и на МК попробовать. Только отладку нужно настроить в ОЗУ чтобы не перезаписывать много раз флеш.ПростоНуб писал(а):Причем пробовать их примеры не на МК, а на обычном компе, например с GCC.
- Реклама
Я могу запомнить, почему палочка это xor, галочка двойная это сдвиг, == это не =, а ! это not. Я даже научился вводить с клавиатуры "|" , Умею писать примитивные программы на Си, и даже читать некоторые чужие, транслировать их в Бейсик... Но язык Си, даже если я запомню все эти воиды и палочки с галочками, не станет удобным языком для реализации задумок, так как привычнее массивы, for...next , do...loop и shift вместо дурацких птичек >> . Проблема в синтаксисе. Сама программа строится одинаково во всех компиляторах. Код из под Bascom, работает точно также по таймингам, а иногда и лучше, чем из под компиляторов на Си.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3642331#p3642331"]Мурик, получается действительно не заглядывали 
Прямо с начала: ARM_CAN_Initialize() - два callback, ARM_I2C_Initialize() - один callback, ARM_USART_Initialize() - один callback, ARM_USBH_Initialize() - - два callback. Хватит для начала?[/uquote]Решил таки посмотреть, чего же я себя лишил никогда не воспользовавшись этими волшебными функциями. Искал, искал... В компиляторах которыми я пользуюсь в CMSIS-Driver только шаблоны этих функций, реализации нет. Ладно, копнём дальше. В Keil нашёл реализацию.Ну и как мне теперь это развидеть?
Для вполне себе комфортного программирования от CMSIS достаточно определения регистров, функций для работы с контроллером прерываний типа NVIC_EnableIRQ() и макросов для доступа к низкоуровневым функциям ядра типа __set_MSP().
Добавлено after 7 minutes 57 seconds:
[uquote="Microtech",url="/forum/viewtopic.php?p=3642358#p3642358"]Проблема в синтаксисе.[/uquote]Проблема в "стоя в гамаке".
[uquote="Microtech",url="/forum/viewtopic.php?p=3642358#p3642358"]Код из под Bascom, работает точно также по таймингам, а иногда и лучше, чем из под компиляторов на Си.[/uquote]Голословно. Пример в студию!
Прямо с начала: ARM_CAN_Initialize() - два callback, ARM_I2C_Initialize() - один callback, ARM_USART_Initialize() - один callback, ARM_USBH_Initialize() - - два callback. Хватит для начала?[/uquote]Решил таки посмотреть, чего же я себя лишил никогда не воспользовавшись этими волшебными функциями. Искал, искал... В компиляторах которыми я пользуюсь в CMSIS-Driver только шаблоны этих функций, реализации нет. Ладно, копнём дальше. В Keil нашёл реализацию.
Спойлер
Код: Выделить всё
static int32_t I2C_Initialize (ARM_I2C_SignalEvent_t cb_event, I2C_RESOURCES *i2c) {
int32_t status;
uint32_t lock;
status = ARM_DRIVER_OK;
if ((i2c->status.state & I2C_INIT) == 0U) {
/* Clear run-time resources */
memset ((void *)i2c, 0, sizeof(I2C_RESOURCES));
/* Register application callback */
i2c->cb_event = cb_event;
do {
lock = LockSet(&I2C.CallLock);
if (lock == 1U) {
/* Increment the number of initializations */
I2C.InitState += 1U;
if (I2C.InitState == 1U) {
/* Initialize resources */
I2C.Active = NULL;
I2C.Qin = 0U;
I2C.Qout = 0U;
I2C.PowerState = 0U;
I2C.BusSpeed = 0U;
/* Call the underlying driver */
status = Driver_I2C->Initialize (I2C_MultiSlaveEvent);
}
if (status == ARM_DRIVER_OK) {
i2c->status.state = I2C_INIT;
} else {
I2C.InitState = 0U;
}
LockClr (&I2C.CallLock);
}
else {
osThreadYield();
}
} while (lock == 0U);
}
return (status);
}
Для вполне себе комфортного программирования от CMSIS достаточно определения регистров, функций для работы с контроллером прерываний типа NVIC_EnableIRQ() и макросов для доступа к низкоуровневым функциям ядра типа __set_MSP().
Добавлено after 7 minutes 57 seconds:
[uquote="Microtech",url="/forum/viewtopic.php?p=3642358#p3642358"]Проблема в синтаксисе.[/uquote]Проблема в "стоя в гамаке".
[uquote="Microtech",url="/forum/viewtopic.php?p=3642358#p3642358"]Код из под Bascom, работает точно также по таймингам, а иногда и лучше, чем из под компиляторов на Си.[/uquote]Голословно. Пример в студию!
VladislavS, а что Вы хотели увидеть в функции инициализации, кроме регистрации callback для последующего вызова его уже из других функций?
И Вы действительно каждый раз сами выписываете взаимодействие с CAN или USB через низкоуровневые функции? Зачем?
К тому же, когда ресурсами устройства в разное время пользуются разные модули программы, намного проще регистрировать Callback функции, чем для каждого модуля править общий обработчик прерываний.
Microtech, при чем тут "удобство"? Например, английский тут для большинства не родной язык и не удобный, что совершенно не мешает его знать и использовать при чтении даташит и прочей документации.
И Вы действительно каждый раз сами выписываете взаимодействие с CAN или USB через низкоуровневые функции? Зачем?
К тому же, когда ресурсами устройства в разное время пользуются разные модули программы, намного проще регистрировать Callback функции, чем для каждого модуля править общий обработчик прерываний.
Microtech, при чем тут "удобство"? Например, английский тут для большинства не родной язык и не удобный, что совершенно не мешает его знать и использовать при чтении даташит и прочей документации.
Свалил из темы. Sorry. Закройте.. Сообщения есть, но информацию они не содержат.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3642407#p3642407"]VladislavS, а что Вы хотели увидеть в функции инициализации, кроме регистрации callback для последующего вызова его уже из других функций?[/uquote]Там и дальше жесть. Тот же I2C_MasterTransmit() посмотри. Уж лучше HAL тогда. 
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3642407#p3642407"]И Вы действительно каждый раз сами выписываете взаимодействие с CAN или USB через низкоуровневые функции? Зачем?[/uquote]Да, низкоуровневое пишу каждый раз под конкретный чип, а как по другому? Логика работы USB находится уровнем выше и универсальная для разных чипов, само собой.
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3642407#p3642407"]И Вы действительно каждый раз сами выписываете взаимодействие с CAN или USB через низкоуровневые функции? Зачем?[/uquote]Да, низкоуровневое пишу каждый раз под конкретный чип, а как по другому? Логика работы USB находится уровнем выше и универсальная для разных чипов, само собой.
как всегда: вопрос начинающего плавно, но неизбежно, переходит в писькомерство профессионалов.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Да какой он в пень начинающий??? 30 лет на васике сидит!!! За это время обезьяну можно Си научить.
начинать (и заканчивать) что-либо можно в любом возрасте. в вот на Си перешел позже 40 лет, до этого с 20 лет пользовался Delphi - и был очень даже начинающим, и волосы шевелились от Си... что не так-то?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
VladislavS, Я ни в коем случае не оспариваю Ваше право выбора реализации работы с тем же CAN или USB, но использование CMSIS заметно упрощает разработку и, тем более портирование между ARM MK, даже разных производителей.
При этом добиться того же уровня оптимальности кода, как в CMSIS тоже довольно трудоемко.
А асинхронный ввод-вывод я всегда считал предпочтительней синхронного. Почему Вы считаете иначе?
При этом добиться того же уровня оптимальности кода, как в CMSIS тоже довольно трудоемко.
А асинхронный ввод-вывод я всегда считал предпочтительней синхронного. Почему Вы считаете иначе?
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3642483#p3642483"]А асинхронный ввод-вывод я всегда считал предпочтительней синхронного. Почему Вы считаете иначе?[/uquote]Не надо приписывать мне свои фантазии!!! Где я хоть слово про это писал??? Нет и не может быть единственно верного решения на все случаи жизни.
VladislavS, простите, значит я не так понял Ваши слова. Но не на нулевом кольце защиты в ARM асинхронный ввод-вывод возможен только через callback функции. А я так понял, что callback функциями Вы не пользуетесь...
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3642532#p3642532"]А я так понял, что callback функциями Вы не пользуетесь...[/uquote]Да хватит уже за меня писать! Лично Я программирую всё что умеет выполнять код. А месседж мой был в том, что для освоения программирования микроконтроллеров на Си во все эти дебри с кольцами защиты и коллбэками лезть не надо. Берёшь Cortex-M0 и в стиле AVR дрыгаешь ногами параллельно осваивая периферию.
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Палочка | это OR. XOR это ^. https://ru.wikipedia.org/wiki/Операторы ... _операторыMicrotech писал(а):Я могу запомнить, почему палочка это xor
Нужно больше практики и тогда станет проще и язык удобнее. Все дело в том что настолько привыкли писать на бейсике что изменение синтаксиса вызывает бурную негативную реакцию. Со временем по мере программирования на Си это пройдет. Но если даже не пытаться перейти на Си, конечно же негативная реакция никуда не денется.Microtech писал(а):Но язык Си, даже если я запомню все эти воиды и палочки с галочками, не станет удобным языком для реализации задумок
В Си это есть, но синтаксис немного другой.Microtech писал(а):так как привычнее массивы for...next , do...loop
Представьте что в бейсике вместоMicrotech писал(а):shift вместо дурацких птичек >>
Код: Выделить всё
If a <> b ThenКод: Выделить всё
If a NoEqual b ThenЕсть диалекты бейсика где сдвиг выполняется "птичками" и побитовые операторы как в Си. https://www.purebasic.com/documentation ... ables.html
Поверьте, дело в привычке. Просто вы сильно привыкли к синтаксису бейсика. Какой язык лучше русский или английский? Большинство русскоязычных ответят что русский, а англичане и американцы назовут английский язык. То есть люди выберут язык который лучше всего знают и которым пользуются вне зависимости от того на самом деле он лучший или нет.Microtech писал(а):Проблема в синтаксисе.
Это не так. В зависимости от компилятора машинный код может сильно отличаться. Обычно Си компиляторы лучше оптимизируют код из-за чего он компактнее и быстрее работает. Замечу что дело не в языке, а в команде программистов, разрабатывающих компилятор. Чем опытнее она, тем лучше будет компилятор.Microtech писал(а):Сама программа строится одинаково во всех компиляторах.
Например есть компилятор бейсика FastAVR, который по размеру кода может обойти компиляторы Си. https://radiokot.ru/forum/viewtopic.php ... 1#p3354381
Но не все компиляторы бейсика настолько хорошо оптимизируют код и обычно они проигрывают Си.
Сравнение производительности математических вычислений. http://purebasic.mybb.ru/viewtopic.php?id=717#p7651VladislavS писал(а):Голословно. Пример в студию!
В Cortex-M?ПростоНуб писал(а):Но не на нулевом кольце защиты в ARM
Мурик, Вас в гугле забанили? Ну читайте.
Добавлено after 15 minutes 15 seconds:
VladislavS, что-то мне очень тяжело понимать ход Ваших мыслей. По мне так, для изучения ногодрыга есть ардуина. А если уж человек начинает изучать ARM, то или ногодрыг давно освоен, или он ему не нужен.
Ну как бы, для примера. Изучая программирование PC на уроках информатики в школе и даже в подавляющем большинстве институтов, регистры GPU не изучаются, режимы работы ядер GPU рассматриваются только поверхностно, и даже относительно высокоуровневое программирование на языке шейдеров, обычно, не изучают. Потому что для изучения PC и получения навыков программирования это не надо. Не надо даже уметь напрямую вызывать драйвер GPU. Достаточно пользоваться простыми для понимания и применения библиотечными функциями.
Я, конечно, не против детального изучения GPU, но я не могу себе представить не то что начинающего, даже студента, которому эта информации поможет в освоении PC.
Аналогично и с ARM. Прежде чем опускаться до детального изучения переферии, причем столь сложной, как Ethernet, WiFi, USB и даже CAN, лучше освоить стандартные библиотеки для работы с этой переферией. И, с очень большой вероятностью, доскональное изучение контроллера Ethernet и даже стека протоколов TCP/IP этому начинающему не понадобится. Тот же веб-сервер он сможет поднять только используя стандартные библиотеки, причем почти сразу, в начале освоения ARM, например, на STM32F4-DISCOVERY.
Добавлено after 15 minutes 15 seconds:
VladislavS, что-то мне очень тяжело понимать ход Ваших мыслей. По мне так, для изучения ногодрыга есть ардуина. А если уж человек начинает изучать ARM, то или ногодрыг давно освоен, или он ему не нужен.
Ну как бы, для примера. Изучая программирование PC на уроках информатики в школе и даже в подавляющем большинстве институтов, регистры GPU не изучаются, режимы работы ядер GPU рассматриваются только поверхностно, и даже относительно высокоуровневое программирование на языке шейдеров, обычно, не изучают. Потому что для изучения PC и получения навыков программирования это не надо. Не надо даже уметь напрямую вызывать драйвер GPU. Достаточно пользоваться простыми для понимания и применения библиотечными функциями.
Я, конечно, не против детального изучения GPU, но я не могу себе представить не то что начинающего, даже студента, которому эта информации поможет в освоении PC.
Аналогично и с ARM. Прежде чем опускаться до детального изучения переферии, причем столь сложной, как Ethernet, WiFi, USB и даже CAN, лучше освоить стандартные библиотеки для работы с этой переферией. И, с очень большой вероятностью, доскональное изучение контроллера Ethernet и даже стека протоколов TCP/IP этому начинающему не понадобится. Тот же веб-сервер он сможет поднять только используя стандартные библиотеки, причем почти сразу, в начале освоения ARM, например, на STM32F4-DISCOVERY.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3642565#p3642565"]VladislavS, что-то мне очень тяжело понимать ход Ваших мыслей.[/uquote]Почитайте первое сообщение темы. Краткий смысл которого
[uquote="Microtech",url="/forum/viewtopic.php?p=3641828#p3641828"]Начал изучать StM32, как замену AVR в несложных и средних проектах.
...
Предлагаю обмен опытом работы с StM32, без использования Си.[/uquote]
Причём тут вообще ваши GPU, USB, WiFi и т.д. ? Речь о том, что Си надо изучать и не обязательно сразу в дебри лезть.
ЗЫ: Меня не надо учить.
[uquote="Microtech",url="/forum/viewtopic.php?p=3641828#p3641828"]Начал изучать StM32, как замену AVR в несложных и средних проектах.
...
Предлагаю обмен опытом работы с StM32, без использования Си.[/uquote]
Причём тут вообще ваши GPU, USB, WiFi и т.д. ? Речь о том, что Си надо изучать и не обязательно сразу в дебри лезть.
ЗЫ: Меня не надо учить.


