Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 28.06.2018, 21:38  
prinv
Прописка
 
Регистрация: 05.09.2012
Адрес: Россия, Пермь
Сообщений: 160
Сказал спасибо: 25
Сказали Спасибо 31 раз(а) в 27 сообщении(ях)
prinv на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Исбанни Посмотреть сообщение
ну тогда вы просто тупой и слепой. И я тоже ответил, что если не нашли и не поняли ответов - ну просто больше не напрягайтесь - это не ваша тема.
Всё как всегда - вместо одной ссылки будет 5 страниц рассказов, что ответ был.
Реклама:
prinv вне форума  
Непрочитано 28.06.2018, 21:38  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от MONIKYS Посмотреть сообщение
Как на си обратится к биту и провести с ним операцию?
Через кратную байту операцию. Но это - НЕАТОМАРНЫЕ операции. (что такое атомарность операции и последствия неатомарности - найдите сами).
Либо на ассемблере, при наличии ассемблерных инструкций битового доступа.

prinv, если бы вы не засрали тему, то ответ не надо было бы искать. Вините самого себя.
Кстати, еще один ответ был буквально на этой странице - сообщение #5333.
Исбанни вне форума  
Непрочитано 28.06.2018, 21:41  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от STM32F0 Посмотреть сообщение
МИСРА... но не суть
Очепятка ))) пишу с планшета
Исбанни вне форума  
Непрочитано 28.06.2018, 21:42  
prinv
Прописка
 
Регистрация: 05.09.2012
Адрес: Россия, Пермь
Сообщений: 160
Сказал спасибо: 25
Сказали Спасибо 31 раз(а) в 27 сообщении(ях)
prinv на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Исбанни Посмотреть сообщение
Кстати, еще один ответ был буквально на этой странице - сообщение #5333.
А ответа всё нет и нет...
prinv вне форума  
Непрочитано 28.06.2018, 21:43  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Если вы не знаете, что такое MISRA - то я вам не помогу тут. Еще один ответ был в сообщении #5333
Исбанни вне форума  
Непрочитано 28.06.2018, 22:02  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Ладно, для особо слепых типа prinv, дублирую свое сообщение #5267 со страницы 527
Вопрос: Чем плох HAL?
Ответ: вот эти два примера кода выполняют одно и то же действие, но с в разы отличающейся скоростью и размером:
HAL (под спойлером в виду огромной портянки):
Нажмите, чтобы открыть спойлер
Код:
/**
  * @brief  Transmit an amount of data in blocking mode
  * @param  hspi: pointer to a SPI_HandleTypeDef structure that contains
  *                the configuration information for SPI module.
  * @param  pData: pointer to data buffer
  * @param  Size: amount of data to be sent
  * @param  Timeout: Timeout duration
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)
{

  if(hspi-›State == HAL_SPI_STATE_READY)
  {
    if((pData == NULL ) || (Size == 0)) 
    {
      return  HAL_ERROR;
    }

    /* Check the parameters */
    assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi-›Init.Direction));

    /* Process Locked */
    __HAL_LOCK(hspi);

    /* Configure communication */
    hspi-›State = HAL_SPI_STATE_BUSY_TX;
    hspi-›ErrorCode   = HAL_SPI_ERROR_NONE;

    hspi-›pTxBuffPtr  = pData;
    hspi-›TxXferSize  = Size;
    hspi-›TxXferCount = Size;

    /*Init field not used in handle to zero */
    hspi-›TxISR = 0;
    hspi-›RxISR = 0;
    hspi-›pRxBuffPtr  = NULL;
    hspi-›RxXferSize  = 0;
    hspi-›RxXferCount = 0;

    /* Reset CRC Calculation */
    if(hspi-›Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)
    {
      SPI_RESET_CRC(hspi);
    }

    if(hspi-›Init.Direction == SPI_DIRECTION_1LINE)
    {
      /* Configure communication direction : 1Line */
      SPI_1LINE_TX(hspi);
    }

    /* Check if the SPI is already enabled */ 
    if((hspi-›Instance-›CR1 &SPI_CR1_SPE) != SPI_CR1_SPE)
    {
      /* Enable SPI peripheral */
      __HAL_SPI_ENABLE(hspi);
    }

    /* Transmit data in 8 Bit mode */
    if(hspi-›Init.DataSize == SPI_DATASIZE_8BIT)
    {
      if((hspi-›Init.Mode == SPI_MODE_SLAVE)|| (hspi-›TxXferCount == 0x01))
      {
        hspi-›Instance-›DR = (*hspi-›pTxBuffPtr++);
        hspi-›TxXferCount--;
      }

      while(hspi-›TxXferCount › 0)
      {
        /* Wait until TXE flag is set to send data */
        if(SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_TXE, RESET, Timeout) != HAL_OK)
        { 
          return HAL_TIMEOUT;
        }
        hspi-›Instance-›DR = (*hspi-›pTxBuffPtr++);
        hspi-›TxXferCount--;
      }
      /* Enable CRC Transmission */
      if(hspi-›Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) 
      {
        SET_BIT(hspi-›Instance-›CR1, SPI_CR1_CRCNEXT);
      }
    }
    /* Transmit data in 16 Bit mode */
    else
    {
      if((hspi-›Init.Mode == SPI_MODE_SLAVE) || (hspi-›TxXferCount == 0x01))
      {
        hspi-›Instance-›DR = *((uint16_t*)hspi-›pTxBuffPtr);
        hspi-›pTxBuffPtr+=2;
        hspi-›TxXferCount--;
      }

      while(hspi-›TxXferCount › 0)
      {
        /* Wait until TXE flag is set to send data */
        if(SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_TXE, RESET, Timeout) != HAL_OK)
        { 
          return HAL_TIMEOUT;
        }
        hspi-›Instance-›DR = *((uint16_t*)hspi-›pTxBuffPtr);
        hspi-›pTxBuffPtr+=2;
        hspi-›TxXferCount--;
      }
      /* Enable CRC Transmission */
      if(hspi-›Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) 
      {
        SET_BIT(hspi-›Instance-›CR1, SPI_CR1_CRCNEXT);
      }
    }

    /* Wait until TXE flag is set to send data */
    if(SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_TXE, RESET, Timeout) != HAL_OK)
    {
      SET_BIT(hspi-›ErrorCode, HAL_SPI_ERROR_FLAG);
      return HAL_TIMEOUT;
    }

    /* Wait until Busy flag is reset before disabling SPI */
    if(SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_BSY, SET, Timeout) != HAL_OK)
    { 
      SET_BIT(hspi-›ErrorCode, HAL_SPI_ERROR_FLAG);
      return HAL_TIMEOUT;
    }
 
    /* Clear OVERUN flag in 2 Lines communication mode because received is not read */
    if(hspi-›Init.Direction == SPI_DIRECTION_2LINES)
    {
      __HAL_SPI_CLEAR_OVRFLAG(hspi);
    }

    hspi-›State = HAL_SPI_STATE_READY; 

    /* Process Unlocked */
    __HAL_UNLOCK(hspi);

    return HAL_OK;
  }
  else
  {
    return HAL_BUSY;
  }
}


аппаратная абстракция на CMSIS:
Код:
void SPI_SendByte(uint8_t byte)
{
	while(READ_BIT(SPI1-›SR, SPI_SR_TXE) == 0) { }
	SPI1-›DR = byte;
}
...и это - ТОЛЬКО ОДИН ИЗ МНОГИХ ПРИМЕРОВ.

Конкретный практический пример аппаратной абстракции на чистом CMSIS без лишней HAL-овской прослойки:

Код:
/*-----------------------------------------------
 * @brief:	Сброс TX FIFO
 * @param:	нет
 * @retval:	нет
 */
void nRF24L01_FlushTX(void)
{
	NRF24L01_SPI_EN;
	nRF24L01Interface_SendReadByte(FLUSH_TX);
	NRF24L01_SPI_DIS;
}
Функция nRF24L01Interface_SendReadByte() является сверхкомпактной заменой функции HAL. Функция nRF24L01_FlushTX() является частью полноценного API.
Этот код работает в десятки раз быстрее аналогичного HAL-а, причем в нем нет ненужной прослойки HAL, а абстракция от "железа" выполнена очень компактно. В условиях мобильных устройств крайне важно энергопотребление, напрямую зависящее от частоты микроконтроллера. Устройство должно всегда работать на минимально возможной необходимой частоте.

Возражения, что "меня не волнуют размеры и скорость" - не канает. Равно как и возражения, что "мне канает" - тоже не принимаются.
Я привел КОНКРЕТНЫЙ пример конкретной НЕВОЗМОЖНОСТИ применения HAL. Да, именно это НЕВОЗМОЖНО сделать на HAL.
Когда к девайсу предъявляются жесткие требования по энергоэффективности - на HAL-е это сделать невозможно. У него всегда будут непродуктивные потери.
Вот КОНКРЕТНЫЙ ОТВЕТ на вопрос, ЧЕГО НЕВОЗМОЖНО СДЕЛАТЬ НА HAL-е.
Ответ: ЭНЕРГОЭФФЕКТИВНОСТЬ. Невозможно обеспечить энергоэффективность.

Отговорки, что "вам это не важно" - в рассмотрение не берутся. Есть немало задач, где это - во главе угла.

Последний раз редактировалось Исбанни; 28.06.2018 в 22:19.
Исбанни вне форума  
Непрочитано 28.06.2018, 22:18  
MONIKYS
Прописка
 
Регистрация: 18.05.2011
Адрес: Ненька Україна
Сообщений: 157
Сказал спасибо: 20
Сказали Спасибо 58 раз(а) в 25 сообщении(ях)
MONIKYS на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Исбанни, Это понятно, портянка большая. Тогда вопрос - Какого хрена они такое наворотили? Смысл?
MONIKYS вне форума  
Непрочитано 28.06.2018, 22:23  
MONIKYS
Прописка
 
Регистрация: 18.05.2011
Адрес: Ненька Україна
Сообщений: 157
Сказал спасибо: 20
Сказали Спасибо 58 раз(а) в 25 сообщении(ях)
MONIKYS на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Исбанни, Еще есть http://gamma.spb.ru/novosti-proizvod...seriyakh-stm32
вроде как облегченная, пока не разбирался.
MONIKYS вне форума  
Непрочитано 28.06.2018, 22:25  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

MONIKYS, смысл прост - во-первых, так называемый "индусский код", а во-вторых, как следствие индусского мышления - попытка предотвратить ситуации вида "ой, а если SPI не включен, а вызывается функция отправки байта по SPI". Да ладно бы еще только эта ситуация. Есть еще более смешные ситуации типа "ой, так мы отправляем все-таки 8 бит или же 16?".
То есть, выбор 8/16 бит или тому подобное идет не на этапе компиляции, а на этапе работы кода.
Исбанни вне форума  
Непрочитано 28.06.2018, 22:28  
MONIKYS
Прописка
 
Регистрация: 18.05.2011
Адрес: Ненька Україна
Сообщений: 157
Сказал спасибо: 20
Сказали Спасибо 58 раз(а) в 25 сообщении(ях)
MONIKYS на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Исбанни, Ясно
MONIKYS вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


Часовой пояс GMT +4, время: 19:21.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot