У меня есть ниже код в встроенной среде C, компилятор: Hightec (Big-Endian)Несовпадение в копии данных в качестве аргумента функции в вызове функции
unsigned char GlobalVar;
Func_A()
{
unsigned char var1,Retval;
var1 = 0;
retval = Func_B(0,&var1);
}
unsigned char Func_B (unsigned char val, void* ptr)
{
unsigned long localvar;
localvar = (unsigned long)GlobalVar;
*(unsigned char*)ptr = (unsigned char)localvar;
return (0);
}
Вход: GlobalVar = 1, Func_A вызывает Func_B.
ожидаемый выход: Func_B называется, Второй параметр обновляется со значением 1.
Что я вижу: Func_B называется, Второй параметр имеет значение 64 (0100 0000).
Дополнительные комментарии
1. Func_A is an application file.
2. Func_B is part of a different software module.
3. Func_A reads the value from Func_B to do some action in application.
4. Func_B reads the value from a global variable (it is an array) and copies it into the second argument passed to it.
5. The second argument is a void* because Func_B can read different global variables and finally it would typecast based on parameter 1
(this part is not related, so i have excluded the related code)
Что вы думаете, что здесь происходит?
EDITED
переиздан
Я сожалею, что я закрыл вопрос в спешке
Проблема я сталкиваюсь здесь
- var1 является локальной переменной FUNC_A
- Значение обновляется в адрес var1 в FUNC_B
- Когда FUNC_B возвращается, значение var1 еще старое значение.
Как я решил, что
- Я сделал переменную переменная1 глобальной.
- Я вижу данные
Что я подозреваю
- var1 это выделено в FUNC_A
- FUNC_A называет FUNC_B, выделенное пространство находится вне области для обновления данных до
Что вы думаете об экспертах? Я действительно хочу знать, в чем причина этого поведения?
Пожалуйста, измените вопрос, чтобы включить правильный и действенный код, который не дает ошибки компилятора или предупреждение. Предпочтительно [Минимальный, Полный и Подтверждаемый пример] (http://stackoverflow.com/help/mcve). –
Где retval в Func_A вы должны использовать Retval .. Это не скомпилировало – Gopi
«Настоящий код» отличается от того, что вы опубликовали, или ваш компилятор имеет ошибку (возможно, прежнюю) –