|
STM32: HardFault |
|
|
|
Mar 27 2014, 04:16
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Реализую 1-wire на UART+DMA, камень STM32F407 Делается все на фирменных ST библиотеках HAL (новые SPL) После вызова функции HAL_UART_Receive_DMA(&UartHandle, (uint8_t *)ds18b20_buf_rx, sizeof(ds18b20_buf_rx)); попадаю в хардфаулт. uint8_t ds18b20_buf_rx[8]; часть внутренностей функции: Код HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) { uint32_t *tmp; tmp = (uint32_t*)&pData; } Прерывание происходит на строчке tmp = (uint32_t*)&pData; Как так? точно такая же функция на отправку работает нормально...
|
|
|
|
|
 |
Ответов
|
Mar 27 2014, 08:17
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(k000858 @ Mar 27 2014, 05:16)  Реализую 1-wire на UART+DMA, камень STM32F407 часть внутренностей функции: Код HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) { uint32_t *tmp; tmp = (uint32_t*)&pData; } Прерывание происходит на строчке tmp = (uint32_t*)&pData; Как так? Процессор не любит словные (32-битовые) обращения по невыровненному адресу. Вообще, (uint32_t*)&pData - явно чушь. Либо должно быть (uint32_t*)&pData[0], либо (uint32_t*)pData. Без вариантов. И если вышеуказаный код в библиотеке стоит, значит в ней типичная индусская ошибка.
Сообщение отредактировал KnightIgor - Mar 27 2014, 08:34
|
|
|
|
|
Mar 27 2014, 23:53
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(KnightIgor @ Mar 28 2014, 00:55)  То есть, по соглашению о передаче параметров в ARM С, указатель содержится в регистре R1. Оператор пытается взять указатель на регистр R1, а это вам не MSC-51 архитектура, где все регистры есть одновременно и ячейки памяти. Прежде чем писать, потрудились-бы хотя-бы в листинг заглянуть: при взятии адреса аргумента функции переданного в регистре, компилятор переместит его на стек (внутри функции). Цитата(KnightIgor @ Mar 27 2014, 14:17)  Процессор не любит словные (32-битовые) обращения по невыровненному адресу. "Любит-нелюбит" - это к девушкам. А вообще Cortex-M вполне нормально переваривает невыровненные доступы (в отличие от ARM7/9) (исключение - инструкции LDM, STM, LDRD, STRD, но вряд-ли компилятор их там нагенерил). Опционально можно разрешить Usage Fault при невыровненном доступе. Это делается в регистре CCR Cortex-ядра. Но по дефолту это там запрещено.
|
|
|
|
Сообщений в этой теме
k000858 STM32: HardFault Mar 27 2014, 04:16 Сергей Борщ Сама по себе строчка некриминальна. Надо пройтись ... Mar 27 2014, 04:55 ISK2010 Может вы хотели написать "tmp = (uint32_t*)pD... Mar 27 2014, 05:01 k000858 это не я написал, это библиотека от ST
сейчас убр... Mar 27 2014, 05:38   aaarrr Цитата(KnightIgor @ Mar 27 2014, 22:55) 1... Mar 27 2014, 19:19 k000858 Проблема решилась. пошагал отладчиком и все такое.... Mar 28 2014, 01:07 Сергей Борщ Цитата(k000858 @ Mar 28 2014, 03:07) Проб... Mar 28 2014, 03:39  k000858 Цитата(Сергей Борщ @ Mar 28 2014, 07:39) ... Mar 28 2014, 04:00   Сергей Борщ Цитата(k000858 @ Mar 28 2014, 06:00) на с... Mar 28 2014, 05:08 k000858 ну библы новые, может причешут!
зато удалось р... Mar 28 2014, 05:39 Golikov A. ну не за пол дня, а за сутки все таки...
тем более... Mar 28 2014, 09:22 jcxz Цитата(Golikov A. @ Mar 28 2014, 15:22) л... Mar 28 2014, 10:10 DASM За это и можно ненавидеть язык С. В fault на ровно... Mar 28 2014, 14:09 Genadi Zawidowski HAL_DMA_Start_IT(huart->hdmarx, (uint32_t)... Mar 29 2014, 06:43 RusikOk Цитата(k000858 @ Mar 27 2014, 07:16) Реал... Sep 3 2016, 19:59 k000858 Цитата(RusikOk @ Sep 3 2016, 22:59) как у... Sep 7 2016, 12:17  RusikOk Цитата(k000858 @ Sep 7 2016, 15:17) да, в... Sep 7 2016, 22:38   k000858 Цитата(RusikOk @ Sep 8 2016, 01:38) подел... Sep 8 2016, 07:28    RusikOk Цитата(k000858 @ Sep 8 2016, 10:28) поста... Sep 10 2016, 09:01     k000858 Цитата(RusikOk @ Sep 10 2016, 12:01) будж... Sep 13 2016, 04:19 RusikOk схема мне не нужна. главное что все построено на U... Sep 13 2016, 05:20 k000858 Цитата(RusikOk @ Sep 13 2016, 08:20) схем... Sep 13 2016, 09:02 IgorC проект на CubeMx? как делали изменение скорости по... Feb 11 2017, 09:56 RusikOk Цитата(IgorC @ Feb 11 2017, 12:56) но хот... Feb 11 2017, 10:50
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|