У меня появляется предупреждение типа "аргумент типа" при использовании memset

У меня есть массив;

volatile uint32_t SoftTimers[8] ;

Я хочу сбросить все содержимое моих массивов до нуля в программе (не при инициализации). Я искал это и нашел memset. Но у меня появляется это предупреждение (а не ошибка) при использовании этой функции, это проблема?

Я использовал memset вот так:

memset (SoftTimers, 0, sizeof (SoftTimers));

И это предупреждающее сообщение:

предупреждение: # 167-D: аргумент типа volatile uint32_t * несовместим с параметром типа void *


person abdullah cinar    schedule 02.08.2015    source источник


Ответы (1)


Вы не можете использовать memset в этом случае, потому что он принимает энергонезависимый указатель, в то время как вы пытаетесь передать изменчивый указатель:

6.7.3 Квалификаторы типа

  1. Если предпринята попытка обратиться к объекту, определенному с типом с атрибутом volatile, посредством использования lvalue с типом с атрибутом non-volatile, поведение не определено.

Напишите свою собственную функцию, которая принимает указатель на тип volatile uint32_t.

person this    schedule 02.08.2015
comment
Я понимаю, есть ли более быстрый способ, чем цикл для выполнения этих операций? - person abdullah cinar; 02.08.2015
comment
Я собирался использовать эту memset функцию в обработчике прерывания. Так что я не хочу проводить там много времени. Я пытался быть эффективным - person abdullah cinar; 02.08.2015
comment
@abdullahcinar Сначала убедитесь, что код правильный. О скорости можно побеспокоиться позже. - person this; 02.08.2015
comment
Это было правильно, пока я использую для сброса цикла. Я просто хотел проводить меньше времени. Но вы правы, главное, чтобы он работал правильно. Спасибо за ответ :) - person abdullah cinar; 02.08.2015