Жесткие ошибки при выполнении MEMSET [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Жесткие ошибки при выполнении MEMSET [закрыто]

Сообщение 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>
ПРИМЕЧАНИЕ: Первый вызов всегда достигает успеха, а второй сбой. Если я переворачиваю звонок, это все еще имеет истинное значение, означающий, что последний вызов не удается.
Помогите мне, если можете.

Подробнее здесь: https://stackoverflow.com/questions/796 ... s-executed
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»