Змінюй хід війни! Допомагай ЗСУ!

Программирование ARM. Eclipse, Keil,IAR,CooCox - всё сюда.

🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #301
при том, ex EmBlocks существенно круче C::B в этом плане.
но я сильно много в нем не копался, может тоже не фонтан.
а кокос.. ну я тогда как увидал оттуда впервые стартап на Си - чуть не обоссался кипятком :D

А чё там было ржачного?
Я просто не в курсе какие у кокоса стартапы. Я думал, что там подключаешь CMSIS и SPL, которые кокос не писал.

А периферия - да, там жестко. USB там тоже есть.... но оно даже не собирается. Правда, они честно написали какого юзера их комьюнити это код и написали шо юзер не проверен :)

К стати, в 2.0 (єто которій бета и сделав который они завалили нахуй и форум и старій форум - там нельзя зарегаться. Письмо на подтверждение регистрации не приходит) - уже хуй, а не репозиторий. Там есть, конечно, чёта, но того, что было - нету, так что. обвинить их теперь в говнокоде сложнее :)

Если удастся подключить туда HAL - будет вообще заебись - просто еклипсосреда, как для еклипсосреды - нормально собранная, не содержащая бреда в репозитарии.

//---- keil artyfuckts --------

Короче, когда гребёшься в коде (например, лопатишь циклы) и удаляешь скобку - редактор, естественно, охуевает и подчеркивает за скобкой всё подряд, так как не может понять где что кончается, а динамическая проверка синтаксиса ж работает.
Это нормально.
Не нормально - после упаковывания скобок взад подчеркивание НЕ убирается.

Артефакт не мешает компилировать, но что там компилируется - я лично боюсь представлять.

Причина - а хуй его знает.

Лечится - да, подчеркнутый кусок надо просто Ctrl+X -> Ctrl+v обратно на место.

Вот корень этих артефактов - и есть прервопричина лулзов кейла с "забывчивостью". Он однозначно обрабатывает не текст, а какую-то его копию в памяти и иногда забывает её синхронизировать с оригиналом.
 
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #302
А чё там было ржачного?
Я просто не в курсе какие у кокоса стартапы.
как раз таки не ржачно а красиво.
то что потом плавно перешло в opencm3.
а теперь юзают все. я тогда не особо понимал как оно все работает:линкер скрипты, секции, - для меня было откровением.
 
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #303
как раз таки не ржачно а красиво.
то что потом плавно перешло в opencm3.
а теперь юзают все. я тогда не особо понимал как оно все работает:линкер скрипты, секции, - для меня было откровением.

А. Так там тогда всё на SPL работало, их писал не кокос, а STM. Сейчас SPL не развивают - оно перетекло в HAL, а opencm пошло тогда параллельно, и, собсно, оно давольно давно уже есть.
HAL тоже прекрасно работает - вот сейчас в нем и сижу. И USB работает, которое на SPL так ни кто и не спромогся обрать, на радиокоте написан бред (не уверен, что он его запустил, так как примера там нет :) но статью сляпал утверждая, что для подключения USB надо всего 3 библиотеки заинклудить (я проверял, хотя они в комплект и не входят), и потом охуеть от количества того, что за собой эти 3 потянут и не найдут :D ), а единственный пример в репозитарии - не собирается.

А на HAL собрали без вопросов, и в кубик вставили, теперь его может собрать каждый, даже не понимая как оно там внутри устроено.
 
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #304
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #305
скока скока килобайт? :ги:

Нучё... 15кБ я насобирал. Это включив почти всё, кроме SPI 2 из 3 уартов и 2 из 4 таймеров (systick включает собака. что не мешает его использовать для отсчета системного времени :)

Там просто туева хуча прототипов, я посмотрел чего он такой громадный :)

Там, к примеру, в huart есть прототип для каждого типа передачи. Передачи массива в blocking mode, без оного, с DMA, ещё какой-то хуйни... хотя имеет смысл только функция передачи байта, еесли не занято и асинхронной передачи из fifo. Ну, или натравить на тот же fifo - DMA.
Больше там передач и нахер не надо. В 8-битках я обычно так и делаю - функция трансмита в 1 байт + функция запихивания байта в трансмит из фифо по вызову, если трансмит свободен. Функция fifo ставится в главный цикл и если в буфере что-то есть, а трансмит возможен - крутит поинтер fifo на 1 байт и передает его[содержимое]. Скорость, с которой мэйнлуп пробегает всего себя несоизмеримо выше, чем передача байта по UART, так что ни чего больше не надо. То есть, я не пишу ни чего в UART из кода - я пишу тупо в буфер из 256 байт (в восьмибитке - особенно удобно, там как раз переменная переполняется и не надо проверять на крайние значения :) )

В общем - универсализация VS эффективность. Вечный, сцуко, вопрос.
 
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #306
прототип для каждого типа передачи
ну и што, -ffunction-sections -fdata-sections в опциях ГЦЦ (кейлне помню как но точно есть)
плюс ГЦЦ линкеру сказать --gc-sections тобишь выкинуть лишние секции, которые в дереве вызовов не участвуют. В кейле тоже флажок прототип для каждого типа передачиесть.
Для коротких тестов немного геморно, ибо может выкинуть вообще всё :D:D:D
 
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #307
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #308
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #309
Функция fifo ставится в главный цикл и если в буфере что-то есть, а трансмит возможен - крутит поинтер fifo на 1 байт и передает его[содержимое].
А я работаю через прерывания. По окончанию передачи байта вызывается обработчик, смотрит в буфер, если там есть байт, шлем, если нет, валим нафик. И вообще не надо думать ни о чем, и даже функции какие то писать. Не надо париться с временем мейнлупа (у меня например длина цикла мейнлупа может изменятся на порядки). Все делатся само. Эту фичу я честно стырил из Кодвижна (Визард генерит) и портировал на СТМ.

задержки в прерываниях типа for(j=0;j<10000000;j++);
тому подтверждение
А это шо за ужосы такие новые?

Задержки это вообще зло. Хоть в прерываниях, хоть где. Если надо много ждать, лучше уже использовать функции с многократной входимостью и внутри автомат состояний.
 
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #310
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #311
Мне вот интересно, как при таких вот раскладах, ST позиционирует тогда свой HAL? Если это игрушка для студентов и домохозяек, то ладно, а если люди пишут суровые проекты с использованием ЭТОГО. Некошерно ведь и не HALal'но
 
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #312
задержки в прерываниях типа for(j=0;j<10000000;j++);
тому подтверждение :іржач:

Код:
  * @file    stm32f1xx_it.c
  * @brief   Interrupt Service Routines.

Код:
/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"
#include "stm32f1xx.h"
#include "stm32f1xx_it.h"

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/* External variables --------------------------------------------------------*/
extern PCD_HandleTypeDef hpcd_USB_FS;
extern ADC_HandleTypeDef hadc1;
extern TIM_HandleTypeDef htim3;
extern DMA_HandleTypeDef hdma_usart1_tx;
extern DMA_HandleTypeDef hdma_usart1_rx;
extern UART_HandleTypeDef huart1;

/******************************************************************************/
/*            Cortex-M3 Processor Interruption and Exception Handlers         */ 
/******************************************************************************/

/**
* @brief This function handles Non maskable interrupt.
*/
void NMI_Handler(void)
{
  /* USER CODE BEGIN NonMaskableInt_IRQn 0 */

  /* USER CODE END NonMaskableInt_IRQn 0 */
  
  /* USER CODE BEGIN NonMaskableInt_IRQn 1 */

  /* USER CODE END NonMaskableInt_IRQn 1 */
}

/**
* @brief This function handles Hard fault interrupt.
*/
void HardFault_Handler(void)
{
  /* USER CODE BEGIN HardFault_IRQn 0 */
	return;
  /* USER CODE END HardFault_IRQn 0 */
  while (1)
  {
  }
  /* USER CODE BEGIN HardFault_IRQn 1 */

  /* USER CODE END HardFault_IRQn 1 */
}

/**
* @brief This function handles Memory management fault.
*/
void MemManage_Handler(void)
{
  /* USER CODE BEGIN MemoryManagement_IRQn 0 */
return;
  /* USER CODE END MemoryManagement_IRQn 0 */
  while (1)
  {
  }
  /* USER CODE BEGIN MemoryManagement_IRQn 1 */

  /* USER CODE END MemoryManagement_IRQn 1 */
}

/**
* @brief This function handles Prefetch fault, memory access fault.
*/
void BusFault_Handler(void)
{
  /* USER CODE BEGIN BusFault_IRQn 0 */
	return;
  /* USER CODE END BusFault_IRQn 0 */
  while (1)
  {
  }
  /* USER CODE BEGIN BusFault_IRQn 1 */

  /* USER CODE END BusFault_IRQn 1 */
}

/**
* @brief This function handles Undefined instruction or illegal state.
*/
void UsageFault_Handler(void)
{
  /* USER CODE BEGIN UsageFault_IRQn 0 */
	return;
  /* USER CODE END UsageFault_IRQn 0 */
  while (1)
  {
  }
  /* USER CODE BEGIN UsageFault_IRQn 1 */

  /* USER CODE END UsageFault_IRQn 1 */
}

/**
* @brief This function handles Debug monitor.
*/
void DebugMon_Handler(void)
{
  /* USER CODE BEGIN DebugMonitor_IRQn 0 */

  /* USER CODE END DebugMonitor_IRQn 0 */
  while (1)
  {
  }
  /* USER CODE BEGIN DebugMonitor_IRQn 1 */

  /* USER CODE END DebugMonitor_IRQn 1 */
}

/**
* @brief This function handles System tick timer.
*/
void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */

  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  HAL_SYSTICK_IRQHandler();
  /* USER CODE BEGIN SysTick_IRQn 1 */

  /* USER CODE END SysTick_IRQn 1 */
}

/******************************************************************************/
/* STM32F1xx Peripheral Interrupt Handlers                                    */
/* Add here the Interrupt Handlers for the used peripherals.                  */
/* For the available peripheral interrupt handler names,                      */
/* please refer to the startup file (startup_stm32f1xx.s).                    */
/******************************************************************************/

/**
* @brief This function handles DMA1 channel4 global interrupt.
*/
void DMA1_Channel4_IRQHandler(void)
{
  /* USER CODE BEGIN DMA1_Channel4_IRQn 0 */

  /* USER CODE END DMA1_Channel4_IRQn 0 */
  HAL_DMA_IRQHandler(&hdma_usart1_tx);
  /* USER CODE BEGIN DMA1_Channel4_IRQn 1 */

  /* USER CODE END DMA1_Channel4_IRQn 1 */
}

/**
* @brief This function handles DMA1 channel5 global interrupt.
*/
void DMA1_Channel5_IRQHandler(void)
{
  /* USER CODE BEGIN DMA1_Channel5_IRQn 0 */

  /* USER CODE END DMA1_Channel5_IRQn 0 */
  HAL_DMA_IRQHandler(&hdma_usart1_rx);
  /* USER CODE BEGIN DMA1_Channel5_IRQn 1 */

  /* USER CODE END DMA1_Channel5_IRQn 1 */
}

/**
* @brief This function handles ADC1 and ADC2 global interrupts.
*/
void ADC1_2_IRQHandler(void)
{
  /* USER CODE BEGIN ADC1_2_IRQn 0 */

  /* USER CODE END ADC1_2_IRQn 0 */
  HAL_ADC_IRQHandler(&hadc1);
  /* USER CODE BEGIN ADC1_2_IRQn 1 */

  /* USER CODE END ADC1_2_IRQn 1 */
}

/**
* @brief This function handles USB low priority or CAN RX0 interrupts.
*/
void USB_LP_CAN1_RX0_IRQHandler(void)
{
  /* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 0 */

  /* USER CODE END USB_LP_CAN1_RX0_IRQn 0 */
  HAL_PCD_IRQHandler(&hpcd_USB_FS);
  /* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 1 */

  /* USER CODE END USB_LP_CAN1_RX0_IRQn 1 */
}

/**
* @brief This function handles TIM3 global interrupt.
*/
void TIM3_IRQHandler(void)
{
  /* USER CODE BEGIN TIM3_IRQn 0 */

  /* USER CODE END TIM3_IRQn 0 */
  HAL_TIM_IRQHandler(&htim3);
  /* USER CODE BEGIN TIM3_IRQn 1 */

  /* USER CODE END TIM3_IRQn 1 */
}

/**
* @brief This function handles USART1 global interrupt.
*/
void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */

  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */

  /* USER CODE END USART1_IRQn 1 */
}

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

Ну, вот, к примеру, прерывание UART
Оно, канеш, монструозно.
Код:
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
{
  uint32_t tmp_flag = 0, tmp_it_source = 0;

  tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_PE);
  tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_PE);  
  /* UART parity error interrupt occurred ------------------------------------*/
  if((tmp_flag != RESET) && (tmp_it_source != RESET))
  { 
    huart->ErrorCode |= HAL_UART_ERROR_PE;
  }
  
  tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_FE);
  tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR);
  /* UART frame error interrupt occurred -------------------------------------*/
  if((tmp_flag != RESET) && (tmp_it_source != RESET))
  { 
    huart->ErrorCode |= HAL_UART_ERROR_FE;
  }
  
  tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_NE);
  /* UART noise error interrupt occurred -------------------------------------*/
  if((tmp_flag != RESET) && (tmp_it_source != RESET))
  { 
    huart->ErrorCode |= HAL_UART_ERROR_NE;
  }
  
  tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_ORE);
  /* UART Over-Run interrupt occurred ----------------------------------------*/
  if((tmp_flag != RESET) && (tmp_it_source != RESET))
  { 
    huart->ErrorCode |= HAL_UART_ERROR_ORE;
  }
  
  tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE);
  tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE);
  /* UART in mode Receiver ---------------------------------------------------*/
  if((tmp_flag != RESET) && (tmp_it_source != RESET))
  { 
    UART_Receive_IT(huart);
  }
  
  tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_TXE);
  tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_TXE);
  /* UART in mode Transmitter ------------------------------------------------*/
  if((tmp_flag != RESET) && (tmp_it_source != RESET))
  {
    UART_Transmit_IT(huart);
  }

  tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_TC);
  tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_TC);
  /* UART in mode Transmitter end --------------------------------------------*/
  if((tmp_flag != RESET) && (tmp_it_source != RESET))
  {
    UART_EndTransmit_IT(huart);
  }  

  if(huart->ErrorCode != HAL_UART_ERROR_NONE)
  {
    /* Clear all the error flag at once */
    __HAL_UART_CLEAR_PEFLAG(huart);
    
    /* Set the UART state ready to be able to start again the process */
    huart->State = HAL_UART_STATE_READY;
    
    HAL_UART_ErrorCallback(huart);
  }  
}
 
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #313
в ыкзамплах нагреплю покажу :ги: у меня весь этот ужоснах собран.
кста, я таки крепко психанул и пилю свою либу. Даже решил как нада правильно с RCC поступить.

Оно, канеш, монструозно.
они все еще weak? или уже жостко переопределены?
ужас, конечно.
но у них задача: заставить юзера забить флеш и озу такой хуйней, шоб все время покупались более объемистые процы
 
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #314
в ыкзамплах нагреплю покажу :ги: у меня весь этот ужоснах собран.
кста, я таки крепко психанул и пилю свою либу. Даже решил как нада правильно с RCC поступить.


они все еще weak? или уже жостко переопределены?
ужас, конечно.
но у них задача: заставить юзера забить флеш и озу такой хуйней, шоб все время покупались более объемистые процы
_weak, конечно.
Но, чесгря, я тут их обработчики некоторые (уарт тот же) увидел в static и перестал понимать как оно вообще должно работать...
 
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #315
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #316
Это пистець. А, что там реально "huart" везде, или это ты так развлекаешься?

Это не мой код - ихний.
Да, они ж с давних времён передают в функцию указатель на структуру, а структура - стандартизирована.
Ну, и вот кто-то так её назвал... теперь везде хуарт (UART_HandleTypeDef* huart =

typedef struct
{
USART_TypeDef *Instance; /*!< UART registers base address */

UART_InitTypeDef Init; /*!< UART communication parameters */

uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */

uint16_t TxXferSize; /*!< UART Tx Transfer size */

uint16_t TxXferCount; /*!< UART Tx Transfer Counter */

uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */

uint16_t RxXferSize; /*!< UART Rx Transfer size */

uint16_t RxXferCount; /*!< UART Rx Transfer Counter */

DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */

DMA_HandleTypeDef *hdmarx; /*!< UART Rx DMA Handle parameters */

HAL_LockTypeDef Lock; /*!< Locking object */

__IO HAL_UART_StateTypeDef State; /*!< UART communication state */

__IO uint32_t ErrorCode; /*!< UART Error code */

}UART_HandleTypeDef;

Вроде в SPL всегда так было, начиная с GPIO_Init_Typedef_Struct

В принципе, єти структурі создаются временно, но я тот же уарт храню как память. Он у меня как создан huart1, так с ним все действия и делаются в проекте. Открою huart2 - не знаю как поступлю, пока. Я просто его переопределил у куба в свой модуль, и юзаю.
Куба, к стати, можно заставить делать или разделение файлов по ip, или запхать все иниты в жопу main.h. Так что, вроде всё там юзабельно на столько же, на сколько была юзабельна SPL, а её юзали все.
По идее - можно вообще одну эту структуру использовать, а перед обращением к обработчику - писать в неё номер хуарта и нужные параметры.
Если скорость и прочие параметры у всех портов одинаковые - это даст экономию, а если разные - не даст, лучше тогда на каждый порт структуру иметь.
 
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #317
на сколько была юзабельна SPL, а её юзали все.
:ги: даже йа!
но хендлы дело такое, что нада еще смотреть шо туда хендлить.
это может быть как набор для буфера/счетчика байт, может быть и очередь кольцом, например на шышнадать символов, а может быть и вовсе функция а-ля прототред и она там уже шо хочет то и делает.
 
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #318
Там сделано так:
* @File stm32f1xx_it.c
Прототипі функций преріваний
типа
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */

/* USER CODE END SysTick_IRQn 0 */
HAL_IncTick();
HAL_SYSTICK_IRQHandler();
/* USER CODE BEGIN SysTick_IRQn 1 */

/* USER CODE END SysTick_IRQn 1 */
}
задефайненый в одноименном .h


HAL_SYSTICK_IRQHandler();
валяется в
* @File stm32f1xx_hal_cortex.c
в таком виде
void HAL_SYSTICK_IRQHandler(void)
{
HAL_SYSTICK_Callback();
}


А уже HAL_SYSTICK_Callback(); в том же xxxxxx_hal_cortex.c
Чуть ниже и в виде

Код:
[B]__weak void HAL_SYSTICK_Callback(void)
{
  /* NOTE : This function Should not be modified, when the callback is needed,
            the HAL_SYSTICK_Callback could be implemented in the user file
   */
}[/B]

Естественно, каллбэк я переопределяю в своем обработчике, если он мне нужен.

P.S. Во. Пока писал - и сам разобрался, потому как не смотрел - тупо поиск по _weak и переопределил первый же найденый каллбэк. Ну, и он заработал у меня и время считает системмное (ну не таймер же отдельный для него заводить). Потому как Iвачдог систик включает автоматом, когда его дефайнишь в кубе.



//-------------------- PPS -----------------

Да, как видно из того, что выше - stm32f1xx_it.c не является частью HAL.
HAL содержит более высокоуровневые обёртки, чем в cmsys, из которого stm32f1xx_it.c, собственно, и взялся.

То есть, они цмсисные жесткие дефайны просто замкнули на свои имена и раздают их при помощи _weak пользователю, уже с подтяжкой своих библиотек.



Пятница. Вечер. Вопрос: Как остановить DMA в циклическом режиме и нахуя вообще его придумали? :D

P.S. Шучу, его придумали, чтобы видеопамять маслать в вывод, а если надо её менять - она в еёйном буфере меняется независимо от того, чего там DMA по этому поводу думает, а DMA пох на страдания юзера в мэйнлупе.

Но вот нахуя я её уарту включил в циклический режим - неясно.
 
Останнє редагування:
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #319
Но вот нахуя я её уарту включил в циклический режим - неясно.
:ги: шоб прозрачьно работал
не, ну только одно на ум приходит про дма и уарт: модбас на 115200 и жутко загруженный печалью хуинький проц типо f100

по поводу оберток на SysTick - ржачно до колик. Кто смотрел chibiOS - там получше имхо сделано с hal. так уже с осью.
 
  • 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #320
:ги: шоб прозрачьно работал.
Лучше б они ему fifo сделали, чтобы он не просто как йожик на спидах крутился, а крутился с инкрементом поинтера хвоста пока тот не сравняется с поинтером головы, и запускался при событии изменения поинтера головы.

Вот это было бы нереально круто. Снабдил запись байта в буфер инкрементом регистра в периферии DMA - и забыл. Регистр взял, в массив по смещению из регистра записал, регистр ++. Щааааастье.
 
Назад
Зверху Знизу