Определить значение не может измениться в функции

Я хочу изменить глобальные определения TORQUE_HWORD и TORQUE_LWORD при вызове функции If I call. Как я могу это сделать ?

Я пытаюсь так:

uint16_t mAddressArray[10];
 #define TORQUE_HWORD mAddressArray[5]
#define TORQUE_LWORD mAddressArray[6]
void changeValue()
{
 Write_EEPROM_Define(torque, TORQUE_HWORD, TORQUE_LWORD); // Current Limit
 printf("A: %04x B: %04x ", TORQUE_HWORD, TORQUE_LWORD); // I see this value 0000 0000 
}
void Write_EEPROM_Define( float value, uint16_t eepromHValue, uint16_t eepromLValue)
{
 eepromHValue = 0xAA;
 eepromLValue = 0XBB;
}

Яблоки. Апельсины. Эти два фрагмента кода не эквивалентны. Когда вы передаете TORQUE_HEAD второй функции, соответствующий элемент массива будет ранжироваться по значению. Все изменения этого значения во второй функции являются изменениями локальной переменной. (И поскольку вы ничего не делаете с этими переменными до того, как они выйдут из области видимости, они не будут иметь никакого эффекта.)

M Oehm 16.03.2022 15:46

В чем между ними разница, я не понимаю

gogogo 16.03.2022 15:48

В вашем первом коде вы меняете глобальную переменную на значение параметра, во втором источнике вы меняете параметр на константу. Вы видите разницу?

the busybee 16.03.2022 15:48

Окей, я понял свою ошибку. Я обновил свой вопрос. Как изменить значения TORQUE_HWORD и TORQUE_LWORD при вызове функции. Это возможно ?

gogogo 16.03.2022 16:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основная проблема здесь заключается в том, что вы передаете элементы массива по значению, поэтому вы не изменяете исходный массив. И эта проблема была вызвана использованием вводящих в заблуждение макросов при доступе к массиву.

Другая проблема в том, что void changeValue() — это устаревший стиль, он должен быть void changeValue (void). И функция Write_EEPROM_Define плохо названа, я бы ожидал, что подобная функция выполнит реальную запись в EEPROM.

Все эти проблемы можно исправить следующим образом:

uint16_t mAddressArray[10];
#define TORQUE_HWORD_INDEX 5
#define TORQUE_LWORD_INDEX 6

void changeTorque (float value, uint16_t array[10], uint16_t hi_index, uint16_t lo_index)
{
  array[hi_index] = 0xAA;
  array[lo_index] = 0xBB;
}

void changeValue (void)
{
  changeTorque(torque, mAddressArray, TORQUE_HWORD_INDEX, TORQUE_LWORD_INDEX);
  printf("A: %04x B: %04x ", mAddressArray[TORQUE_HWORD_INDEX], mAddressArray[TORQUE_HWORD_INDEX]);
}

Что касается того, почему у вас есть этот массив как глобальная переменная, но вы передаете его между функциями в одном файле, я понятия не имею. Это просто странный дизайн программы, возможно, вам следует сделать ее локальной переменной static в какой-то функции.

Другие вопросы по теме