STM32 новичку в ARM что к чему
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
Понятно, спасибо.
Мой диагноз - как допилят 6-ю версию пусть позовут. А я как-нибудь на вменяемых компиляторах останусь.
Мой диагноз - как допилят 6-ю версию пусть позовут. А я как-нибудь на вменяемых компиляторах останусь.
- Реклама
Re: STM32 новичку в ARM что к чему
А вменяемые -- это какие? На сайте арма есть GCC 7. К кейлу я не стал его прикручивать, а как автономный компайлер через make мои исходники собирает без проблем. Я, правда, без плюсов пишу.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
GCC 7 - C++17
IAR - C++14 с элементами С++17
IAR - C++14 с элементами С++17
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
VladislavS, для начало хотя бы ANSI C изучил. Тебе уже обьяснил что в С++ явное инстанцирование шаблона делается после реализации.
Реализация шаблонов должна быть определена в заголовочном файле, чтобы компилятор смог выполнить инстанцирование шаблона для любых аргументов, но можно скрыть реализацию, используя явное инстанцирование. В заголовочном файле при этом остаётся только объявление шаблонов, а реализация помещается в отдельный файл. Для всех возможных вариантов применения шаблонов в этом модуле выполняется явное инстанцирование
Изучай С++ и не умничай на форумах. Ты слушай что тебе люди говорят и не брызгай своей желчью.
И завязывай уже KEIL убогим называть. В голове проблемы у тебя.
Если компилятор додумал твоих тараканов и проглотил это не значит что ты сделал по стандарту.
Это ты еще MISRA C не юзал, там для тебя вообще полнейший АД будет. Более 500 правил.
Реализация шаблонов должна быть определена в заголовочном файле, чтобы компилятор смог выполнить инстанцирование шаблона для любых аргументов, но можно скрыть реализацию, используя явное инстанцирование. В заголовочном файле при этом остаётся только объявление шаблонов, а реализация помещается в отдельный файл. Для всех возможных вариантов применения шаблонов в этом модуле выполняется явное инстанцирование
Изучай С++ и не умничай на форумах. Ты слушай что тебе люди говорят и не брызгай своей желчью.
И завязывай уже KEIL убогим называть. В голове проблемы у тебя.
Если компилятор додумал твоих тараканов и проглотил это не значит что ты сделал по стандарту.
Это ты еще MISRA C не юзал, там для тебя вообще полнейший АД будет. Более 500 правил.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
Oxford , ты что, по всему интернету за мной гоняться будешь? Э как тебя штырит то 
- Реклама
Re: STM32 новичку в ARM что к чему
Совершенно неожиданно столкнулся с проблемой, по всей видимости, настроек кейла. Перестал работать дебагинг. Создал новый проект, запускаю дебаг и... ничего. Указатель стоит на функции main() и дальше двигаться не желает:
Делаю сброс, после чего начинается начальная инициализация, которая останавливается на импорте SystemInit и далее так же не движется:
Уже глаз дергается, но понимания где косячу так и нет 
Re: STM32 новичку в ARM что к чему
А проект собирается с отладочной информацией? Гляньте таб debug в опциях проекта.
Re: STM32 новичку в ARM что к чему
Там я все на 10 раз перепроверил уже, в приложении скрин на всякий. Я вот еще что заметил, проблема не только в дебаге - проект собирается, благополучно отправляется в МК, но при этом загруженный в него код не исполняется. В режиме дебага руками потыкал регистры - реагирует адекватно, что случилось?
- Вложения
-
- 2018-08-02_23-55-19.png
- (33.04 КБ) 258 скачиваний
Re: STM32 новичку в ARM что к чему
На втором скрине видно что произошел переход в NMI_Handler.
- bezzabotna
- Встал на лапы
- Сообщения: 134
- Зарегистрирован: Пн ноя 07, 2016 12:14:14
Re: STM32 новичку в ARM что к чему
Здравствуйте.
Настраиваю I2C с помощью HAL.
В main.c в глобальных переменных появляется для заполнения структуры.
Теперь мне нужно использовать hi2c1 в функциях для работы с периферией
Эти функции мне нужны в других .c файлах.
Сами функции видны, а вот на первый аргумент компилятор ругается
Я пиcала и в хедере и в .c файле, и без extern пробовала, но компилятор ругается
В принципе неважно, HAL это или какая либо друга библиотека. Непонятно как "портировать" переменные структуры между модулями.
Настраиваю I2C с помощью HAL.
В main.c в глобальных переменных появляется
Код: Выделить всё
I2C_HandleTypeDef hi2c1;Теперь мне нужно использовать hi2c1 в функциях для работы с периферией
Код: Выделить всё
HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_I2C_Mem_Write(hi2c1, (uint16_t) (slave_adr<<1), (uint16_t) adxl_reg, I2C_MEMADD_SIZE_8BIT, adxl_data, datasize, (uint32_t)1000) {}//
Сами функции видны, а вот на первый аргумент компилятор ругается
Я пиcала и в хедере и в .c файле, и без extern пробовала, но компилятор ругается
Код: Выделить всё
extern I2C_HandleTypeDef hi2c1; Как быть?error: #20: identifier "I2C_HandleTypeDef" is undefined
I2C_HandleTypeDef hi2c1;
В принципе неважно, HAL это или какая либо друга библиотека. Непонятно как "портировать" переменные структуры между модулями.
Я конечно все понимаю, но этого я не понимаю.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
у вас компилятор не видит типа I2C_HandleTypeDef, а не структуры hi2c1. вам надо там, где эта структура упоминается/используется (или указатель на неё) подключить соответствующий хедер из HAL, где выполнено описание этого типа
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- bezzabotna
- Встал на лапы
- Сообщения: 134
- Зарегистрирован: Пн ноя 07, 2016 12:14:14
Re: STM32 новичку в ARM что к чему
Проблема "решилась" помещением функция R/W в main.c
Теперь они выглядят так:
А в других фалах эти функции прописываются с extern в хэдере.
Все работает, но мне бы все равно хотелось узнать есть ли альтернативное решение это проблемы со структурами.
Добавлено after 4 minutes 50 seconds:
Описание этого типа находится в "stm32f2xx_hal_i2c.h", который у меня подключен, иначе бы функции HAL_I2C_Mem_Read, HAL_I2C_Mem_Write не были бы видны, они описаны там же.
Теперь они выглядят так:
Код: Выделить всё
void I2C1_WriteData(uint8_t slave_adr, uint8_t reg, uint8_t*data, uint16_t datasize){
uint8_t error_str[]={"I2C Error"};
while(HAL_I2C_Mem_Write(&hi2c1, (uint16_t) (slave_adr<<1), (uint16_t) reg, I2C_MEMADD_SIZE_8BIT, data, datasize, (uint32_t)1000)!= HAL_OK){
if (HAL_I2C_GetError(&hi2c1) == HAL_I2C_ERROR_AF){
LCD_Clear(white);
LCD_PutStr(0,0,error_str,red,white);
}}}
//---------------------------------------------------------------------------------------//
void I2C1_ReadData(uint8_t slave_adr, uint8_t reg, uint8_t*data, uint16_t datasize){
uint8_t error_str[]={"I2C Error"};
while(HAL_I2C_Mem_Read(&hi2c1, (uint16_t) (slave_adr<<1), (uint16_t) reg, I2C_MEMADD_SIZE_8BIT, data, datasize, (uint32_t)1000)!= HAL_OK){
if (HAL_I2C_GetError(&hi2c1) == HAL_I2C_ERROR_AF){
LCD_Clear(white);
LCD_PutStr(0,0,error_str,red,white);
}}}
Все работает, но мне бы все равно хотелось узнать есть ли альтернативное решение это проблемы со структурами.
Добавлено after 4 minutes 50 seconds:
Описание этого типа находится в "stm32f2xx_hal_i2c.h", который у меня подключен, иначе бы функции HAL_I2C_Mem_Read, HAL_I2C_Mem_Write не были бы видны, они описаны там же.
Я конечно все понимаю, но этого я не понимаю.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
если он ругается на это, то именно в этом месте где-то выше по тексту и должен быть проинклюден stm32f2xx_hal_i2c.h - это так?bezzabotna писал(а):Я пиcала и в хедере и в .c файле, и без extern пробовала, но компилятор ругается
Код:
extern I2C_HandleTypeDef hi2c1;
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- bezzabotna
- Встал на лапы
- Сообщения: 134
- Зарегистрирован: Пн ноя 07, 2016 12:14:14
Re: STM32 новичку в ARM что к чему
Да.
Пробовала подключать и напрямую
#include "stm32f2xx_hal_i2c.h"
и через
#include "stm32f2xx_hal.h"
Ошибки выдает.
Пробовала подключать и напрямую
#include "stm32f2xx_hal_i2c.h"
и через
#include "stm32f2xx_hal.h"
Ошибки выдает.
Я конечно все понимаю, но этого я не понимаю.
Re: STM32 новичку в ARM что к чему
покажите весь проект, чего там куда понаписали.
навскидку так - хидер, в котором вы объявляете переменную, точно цепляется после HAL-овских?
навскидку так - хидер, в котором вы объявляете переменную, точно цепляется после HAL-овских?
- bezzabotna
- Встал на лапы
- Сообщения: 134
- Зарегистрирован: Пн ноя 07, 2016 12:14:14
Re: STM32 новичку в ARM что к чему
Действительно в main.c было
#include "main.h"
#include "stm32f2xx_hal.h", а не наоборот.
Но на количество ошибок это не повлияло. В остальных файлах вроде в правильном порядке.
#include "main.h"
#include "stm32f2xx_hal.h", а не наоборот.
Но на количество ошибок это не повлияло. В остальных файлах вроде в правильном порядке.
- Вложения
-
- adxl345.c
- (1.96 КБ) 548 скачиваний
-
- main.c
- (11.91 КБ) 348 скачиваний
-
- main.h
- (3.48 КБ) 539 скачиваний
-
- adxl345.h
- (873 байт) 512 скачиваний
Я конечно все понимаю, но этого я не понимаю.
Re: STM32 новичку в ARM что к чему
[uquote="arkhnchul",url="/forum/viewtopic.php?p=3431361#p3431361"]навскидку так - хидер,[/uquote]
Чуть глаз не вырвало. Может все-таки так?
Чуть глаз не вырвало. Может все-таки так?
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: STM32 новичку в ARM что к чему
А среда какая?
- bezzabotna
- Встал на лапы
- Сообщения: 134
- Зарегистрирован: Пн ноя 07, 2016 12:14:14
Re: STM32 новичку в ARM что к чему
в main.h подцепите stm32f2xx_hal.h , иначе на момент объявления там переменной этот тип еще не описан
или нет. Чот запутался.
что происходит: при попытке компиляции файла adxl345.c с раскомментированными в adxl345.h строчками с extern I2C_HandleTypeDef hi2c1, ADXL_WriteData и ADXL_ReadData оно не может найти тип I2C_HandleTypeDef?
в stm32f2xx_hal_conf.h раскомментировано #define HAL_I2C_MODULE_ENABLED?
или нет. Чот запутался.
что происходит: при попытке компиляции файла adxl345.c с раскомментированными в adxl345.h строчками с extern I2C_HandleTypeDef hi2c1, ADXL_WriteData и ADXL_ReadData оно не может найти тип I2C_HandleTypeDef?
в stm32f2xx_hal_conf.h раскомментировано #define HAL_I2C_MODULE_ENABLED?


