STM32 без Си. mikroBasic for ARM.

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3384
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: STM32 без Си. mikroBasic for ARM.

Сообщение Мурик »

ПростоНуб, ссылки в студию. Посмотрим.
Реклама
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: STM32 без Си. mikroBasic for ARM.

Сообщение ПростоНуб »

Мурик, получается действительно не заглядывали :)))
Прямо с начала: ARM_CAN_Initialize() - два callback, ARM_I2C_Initialize() - один callback, ARM_USART_Initialize() - один callback, ARM_USBH_Initialize() - - два callback. Хватит для начала?
Реклама
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: STM32 без Си. mikroBasic for ARM.

Сообщение Novice user »

[uquote="Мурик",url="/forum/viewtopic.php?p=3642204#p3642204"][quote="dosikus"]Просто скачав книжки не получится понять почему происходят ошибки при компиляции[/uquote]
Я заказывал книгу Белова "Разработка устройств на мк AVR",с диском
(Черт меня дернул читать эту ветку,снова читаю эту книгу,может до меня чего-то и дойдет... :)) )
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: STM32 без Си. mikroBasic for ARM.

Сообщение ПростоНуб »

Novice user, может быть, я и не прав, но знакомиться с C надо по Кернигану и Ритчи. Причем пробовать их примеры не на МК, а на обычном компе, например с GCC. Тогда быстро прийдет понимание языка. А пытаться одновременно изучать МК и С можно конечно, но в разы сложнее, чем по очереди.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3384
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: STM32 без Си. mikroBasic for ARM.

Сообщение Мурик »

ПростоНуб писал(а):Мурик, получается действительно не заглядывали
Не пользовался этими функциями.
Novice user писал(а):Я заказывал книгу Белова "Разработка устройств на мк AVR",с диском
AVR и ARM это не одно и тоже.
Чтобы изучить Си нужна одна из книг для начинающих по этому ЯП, а не по МК.
ПростоНуб писал(а):Причем пробовать их примеры не на МК, а на обычном компе, например с GCC.
Можно и на МК попробовать. Только отладку нужно настроить в ОЗУ чтобы не перезаписывать много раз флеш.
Реклама
Аватара пользователя
Microtech
Поставщик валерьянки для Кота
Сообщения: 2052
Зарегистрирован: Вт ноя 03, 2009 21:02:38
Откуда: Москва
Контактная информация:

Re: STM32 без Си. mikroBasic for ARM.

Сообщение Microtech »

Я могу запомнить, почему палочка это xor, галочка двойная это сдвиг, == это не =, а ! это not. Я даже научился вводить с клавиатуры "|" , Умею писать примитивные программы на Си, и даже читать некоторые чужие, транслировать их в Бейсик... Но язык Си, даже если я запомню все эти воиды и палочки с галочками, не станет удобным языком для реализации задумок, так как привычнее массивы, for...next , do...loop и shift вместо дурацких птичек >> . Проблема в синтаксисе. Сама программа строится одинаково во всех компиляторах. Код из под Bascom, работает точно также по таймингам, а иногда и лучше, чем из под компиляторов на Си.
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 без Си. mikroBasic for ARM.

Сообщение VladislavS »

[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 нашёл реализацию.
Спойлер

Код: Выделить всё

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]Голословно. Пример в студию!
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: STM32 без Си. mikroBasic for ARM.

Сообщение ПростоНуб »

VladislavS, а что Вы хотели увидеть в функции инициализации, кроме регистрации callback для последующего вызова его уже из других функций?
И Вы действительно каждый раз сами выписываете взаимодействие с CAN или USB через низкоуровневые функции? Зачем?
К тому же, когда ресурсами устройства в разное время пользуются разные модули программы, намного проще регистрировать Callback функции, чем для каждого модуля править общий обработчик прерываний.

Microtech, при чем тут "удобство"? Например, английский тут для большинства не родной язык и не удобный, что совершенно не мешает его знать и использовать при чтении даташит и прочей документации.
Аватара пользователя
Microtech
Поставщик валерьянки для Кота
Сообщения: 2052
Зарегистрирован: Вт ноя 03, 2009 21:02:38
Откуда: Москва
Контактная информация:

Re: STM32 без Си. mikroBasic for ARM.

Сообщение Microtech »

Свалил из темы. Sorry. Закройте.. Сообщения есть, но информацию они не содержат.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 без Си. mikroBasic for ARM.

Сообщение VladislavS »

[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 находится уровнем выше и универсальная для разных чипов, само собой.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18671
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 без Си. mikroBasic for ARM.

Сообщение ARV »

как всегда: вопрос начинающего плавно, но неизбежно, переходит в писькомерство профессионалов.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 без Си. mikroBasic for ARM.

Сообщение VladislavS »

Да какой он в пень начинающий??? 30 лет на васике сидит!!! За это время обезьяну можно Си научить.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18671
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 без Си. mikroBasic for ARM.

Сообщение ARV »

начинать (и заканчивать) что-либо можно в любом возрасте. в вот на Си перешел позже 40 лет, до этого с 20 лет пользовался Delphi - и был очень даже начинающим, и волосы шевелились от Си... что не так-то?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: STM32 без Си. mikroBasic for ARM.

Сообщение ПростоНуб »

VladislavS, Я ни в коем случае не оспариваю Ваше право выбора реализации работы с тем же CAN или USB, но использование CMSIS заметно упрощает разработку и, тем более портирование между ARM MK, даже разных производителей.
При этом добиться того же уровня оптимальности кода, как в CMSIS тоже довольно трудоемко.
А асинхронный ввод-вывод я всегда считал предпочтительней синхронного. Почему Вы считаете иначе?
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 без Си. mikroBasic for ARM.

Сообщение VladislavS »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3642483#p3642483"]А асинхронный ввод-вывод я всегда считал предпочтительней синхронного. Почему Вы считаете иначе?[/uquote]Не надо приписывать мне свои фантазии!!! Где я хоть слово про это писал??? Нет и не может быть единственно верного решения на все случаи жизни.
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: STM32 без Си. mikroBasic for ARM.

Сообщение ПростоНуб »

VladislavS, простите, значит я не так понял Ваши слова. Но не на нулевом кольце защиты в ARM асинхронный ввод-вывод возможен только через callback функции. А я так понял, что callback функциями Вы не пользуетесь...
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 без Си. mikroBasic for ARM.

Сообщение VladislavS »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3642532#p3642532"]А я так понял, что callback функциями Вы не пользуетесь...[/uquote]Да хватит уже за меня писать! Лично Я программирую всё что умеет выполнять код. А месседж мой был в том, что для освоения программирования микроконтроллеров на Си во все эти дебри с кольцами защиты и коллбэками лезть не надо. Берёшь Cortex-M0 и в стиле AVR дрыгаешь ногами параллельно осваивая периферию.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3384
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: STM32 без Си. mikroBasic for ARM.

Сообщение Мурик »

Microtech писал(а):Я могу запомнить, почему палочка это xor
Палочка | это OR. XOR это ^. https://ru.wikipedia.org/wiki/Операторы ... _операторы
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
Но не все компиляторы бейсика настолько хорошо оптимизируют код и обычно они проигрывают Си.
VladislavS писал(а):Голословно. Пример в студию!
Сравнение производительности математических вычислений. http://purebasic.mybb.ru/viewtopic.php?id=717#p7651
ПростоНуб писал(а):Но не на нулевом кольце защиты в ARM
В Cortex-M?
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: STM32 без Си. mikroBasic for 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.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 без Си. mikroBasic for ARM.

Сообщение VladislavS »

[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 и т.д. ? Речь о том, что Си надо изучать и не обязательно сразу в дебри лезть.

ЗЫ: Меня не надо учить.
Ответить

Вернуться в «ARM»