Я работаю над платформой 8051, которая имеет ширину указателя 16 бит.Не понимаю преобразования от целочисленной к меньшей ошибке указателя
У меня есть общий модуль кода для обработки эмуляции флэш и есть функция, которая возвращает 16 битный начальный адрес страницы:
volatile u16_t start_address = find_start_address_of_page(page);
Я думаю, хочу передать этот «адрес» для функции CRC, что хочет u8_t * в качестве параметра, так что я бросил его в вызове функции, как так:
(u8_t *)start_address
Это генерирует предупреждение
Предупреждение [Pe1053]: преобразование из целого числа к меньшему указателю
Что меня смущает немного, потому что u8_t * имеет ширину 16 бит, и моя переменная является переменной величиной 16 бит. Это просто, что компилятор предупреждает о преобразовании «целое число в указатель» вообще?
код работает отлично, я просто хочу быть уверен, что я не хватает чего-то глупого здесь ...
start_address - целое число с 16 битами, а не указатель на целое число. Попробуйте использовать (u8_t *) (& start_address) – braindf
Да, но это не то, чего я хочу достичь - это даст мне _address_ start_address. start_address - это самое значение адреса, которое хранится как целое число. – Matt
Я вижу. Ваша логика правильна для вашей программы. Но компилятор ожидает переменную, которая является указателем, а не целочисленным значением, имеющим адрес. Вот почему предупреждение происходит. Приведение выполняется и работает так, как вам хочется, но бывают случаи, когда этого не происходит, и именно поэтому компилятор дает вам это предупреждение. – braindf