Я пишу прошивку для использования генерации PWM с микроконтроллером STM32H563XX. Я создал класс обертки C ++, который позволяет вам получить доступ к различным API ШИМ. Я пытаюсь проверить класс прямо сейчас, создав два объекта. Внутри конструктора я инициализую ручку таймера (типа TIM_HANDLEYPEDEF), мой призыв MEMSE (static_cast (& my_timer_handle), 0x0, sizeof (my_timer_handle));
Первый класс инициализируется, в то время как второй твердый. Я не уверен, что происходит. < /P>
Вот весь код конструктора: < /p>
Stm32h563xxPwm::Stm32h563xxPwm(interface_id_t interface_id) : HwAbstractionLayerPwmInterface()
{
my_interface_id = interface_id;
memset(static_cast(&my_timer_handle), 0x0, sizeof(my_timer_handle));
}
< /code>
Вот функция GET, которая вызывает конструктор: < /p>
Stm32h563xxPwm* Stm32h563xxPwm::getPwmInterface(
interface_id_t interface_id,
hal_pwm_status_t& ret_status)
{
ret_status = hal_pwm_status_t::SUCCESS;
if (interface_id > interface_id_t::INTERFACE_ID_MAX)
{
ret_status = hal_pwm_status_t::INVALID_PARAMS_ERROR;
return NULL;
}
if (s_instance_list[static_cast(interface_id)] == NULL)
{
switch (interface_id)
{
case interface_id_t::TIM_3_CH_3:
{
static Stm32h563xxPwm tim3_ch3_pwm(interface_id);
s_instance_list[static_cast(interface_id)] = &tim3_ch3_pwm;
return &tim3_ch3_pwm;
}
case interface_id_t::TIM_3_CH_4:
{
static Stm32h563xxPwm tim3_ch4_pwm(interface_id);
s_instance_list[static_cast(interface_id)] = &tim3_ch4_pwm;
return &tim3_ch4_pwm;
}
default:
ret_status = hal_pwm_status_t::INVALID_PARAMS_ERROR;
return NULL;
}
}
return s_instance_list[static_cast(interface_id)];
}
< /code>
Вот код от main.cpp, где функция get называется: < /p>
HwAbstractionLayerPwmInterface *awning_back_light_pwm_p = Stm32h563xxPwm::getPwmInterface(interface_id_t::TIM_3_CH_4, pwm_status); // PC9
if (awning_back_light_pwm_p == nullptr)
{
PLATFORM_ASSERT(nullptr);
}
HwAbstractionLayerPwmInterface *awning_front_light_pwm_p = Stm32h563xxPwm::getPwmInterface(interface_id_t::TIM_3_CH_3, pwm_status); // PC8
if (awning_front_light_pwm_p == nullptr)
{
PLATFORM_ASSERT(nullptr);
}
< /code>
Вот объявление класса: < /p>
class Stm32h563xxPwm final : public HwAbstractionLayerPwmInterface
{
public:
/**
* @brief Get a pointer to the pwm interface
*
* @param interface_id - the id of the interface pointer to get
* @param ret_status - return status
* @return Stm32h563xxPwm* - returned pointer to the interface
*/
static Stm32h563xxPwm *getPwmInterface(
Stm32h563xxPwmApi::interface_id_t interface_id,
hal_pwm_status_t& ret_status);
/**
* @brief Destructor.
*
*/
~Stm32h563xxPwm(){};
private:
/**
* @brief Constructor, declared private to support factory design pattern.
*
* @param interface_id - interface id
*/
Stm32h563xxPwm(Stm32h563xxPwmApi::interface_id_t interface_id);
/**
* @brief Private variables
*
*/
Stm32h563xxPwmApi::interface_id_t my_interface_id;
TIM_HandleTypeDef my_timer_handle;
/**
* @brief Private static variables
*
*/
static Stm32h563xxPwm* s_instance_list[MAX_NUM_OF_INTERFACES];
};
< /code>
Определение статической переменной: < /p>
Stm32h563xxPwm* Stm32h563xxPwm::s_instance_list[MAX_NUM_OF_INTERFACES] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
< /code>
ПРИМЕЧАНИЕ: Первый вызов всегда достигает успеха, а второй сбой. Если я переворачиваю звонок, это все еще имеет истинное значение, означающий, что последний вызов не удается.
Помогите мне, если можете.
Подробнее здесь: https://stackoverflow.com/questions/796 ... s-executed
Жесткие ошибки при выполнении MEMSET [закрыто] ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1751471689
Anonymous
Я пишу прошивку для использования генерации PWM с микроконтроллером STM32H563XX. Я создал класс обертки C ++, который позволяет вам получить доступ к различным API ШИМ. Я пытаюсь проверить класс прямо сейчас, создав два объекта. Внутри конструктора я инициализую ручку таймера (типа TIM_HANDLEYPEDEF), мой призыв MEMSE (static_cast (& my_timer_handle), 0x0, sizeof (my_timer_handle));
Первый класс инициализируется, в то время как второй твердый. Я не уверен, что происходит. < /P>
Вот весь код конструктора: < /p>
Stm32h563xxPwm::Stm32h563xxPwm(interface_id_t interface_id) : HwAbstractionLayerPwmInterface()
{
my_interface_id = interface_id;
memset(static_cast(&my_timer_handle), 0x0, sizeof(my_timer_handle));
}
< /code>
Вот функция GET, которая вызывает конструктор: < /p>
Stm32h563xxPwm* Stm32h563xxPwm::getPwmInterface(
interface_id_t interface_id,
hal_pwm_status_t& ret_status)
{
ret_status = hal_pwm_status_t::SUCCESS;
if (interface_id > interface_id_t::INTERFACE_ID_MAX)
{
ret_status = hal_pwm_status_t::INVALID_PARAMS_ERROR;
return NULL;
}
if (s_instance_list[static_cast(interface_id)] == NULL)
{
switch (interface_id)
{
case interface_id_t::TIM_3_CH_3:
{
static Stm32h563xxPwm tim3_ch3_pwm(interface_id);
s_instance_list[static_cast(interface_id)] = &tim3_ch3_pwm;
return &tim3_ch3_pwm;
}
case interface_id_t::TIM_3_CH_4:
{
static Stm32h563xxPwm tim3_ch4_pwm(interface_id);
s_instance_list[static_cast(interface_id)] = &tim3_ch4_pwm;
return &tim3_ch4_pwm;
}
default:
ret_status = hal_pwm_status_t::INVALID_PARAMS_ERROR;
return NULL;
}
}
return s_instance_list[static_cast(interface_id)];
}
< /code>
Вот код от main.cpp, где функция get называется: < /p>
HwAbstractionLayerPwmInterface *awning_back_light_pwm_p = Stm32h563xxPwm::getPwmInterface(interface_id_t::TIM_3_CH_4, pwm_status); // PC9
if (awning_back_light_pwm_p == nullptr)
{
PLATFORM_ASSERT(nullptr);
}
HwAbstractionLayerPwmInterface *awning_front_light_pwm_p = Stm32h563xxPwm::getPwmInterface(interface_id_t::TIM_3_CH_3, pwm_status); // PC8
if (awning_front_light_pwm_p == nullptr)
{
PLATFORM_ASSERT(nullptr);
}
< /code>
Вот объявление класса: < /p>
class Stm32h563xxPwm final : public HwAbstractionLayerPwmInterface
{
public:
/**
* @brief Get a pointer to the pwm interface
*
* @param interface_id - the id of the interface pointer to get
* @param ret_status - return status
* @return Stm32h563xxPwm* - returned pointer to the interface
*/
static Stm32h563xxPwm *getPwmInterface(
Stm32h563xxPwmApi::interface_id_t interface_id,
hal_pwm_status_t& ret_status);
/**
* @brief Destructor.
*
*/
~Stm32h563xxPwm(){};
private:
/**
* @brief Constructor, declared private to support factory design pattern.
*
* @param interface_id - interface id
*/
Stm32h563xxPwm(Stm32h563xxPwmApi::interface_id_t interface_id);
/**
* @brief Private variables
*
*/
Stm32h563xxPwmApi::interface_id_t my_interface_id;
TIM_HandleTypeDef my_timer_handle;
/**
* @brief Private static variables
*
*/
static Stm32h563xxPwm* s_instance_list[MAX_NUM_OF_INTERFACES];
};
< /code>
Определение статической переменной: < /p>
Stm32h563xxPwm* Stm32h563xxPwm::s_instance_list[MAX_NUM_OF_INTERFACES] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
< /code>
ПРИМЕЧАНИЕ: Первый вызов всегда достигает успеха, а второй сбой. Если я переворачиваю звонок, это все еще имеет истинное значение, означающий, что последний вызов не удается.
Помогите мне, если можете.
Подробнее здесь: [url]https://stackoverflow.com/questions/79687538/hard-faulting-when-memset-is-executed[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия