2014-08-09 3 views
-1

я определяю указатель памяти, который начинается в 0x20000# 173-D недопустимого типа преобразование

char * Flash_ptr = (char *) 0x20000; 

следовательно я получаю это предупреждение (# 173-D недопустимого преобразования типов), но если я уменьшить адрес -Дль instance- to 0x1800, предупреждение исчезает, я пытался определить его как unsigned, но это не помогло, никаких других предложений? и может ли кто-нибудь объяснить мне, почему это происходит, пожалуйста?

+2

Что такое платформа/компилятор? – mafso

+2

Какой компилятор/платформа для этого? Это 18-разрядный адрес. Каков размер указателя на этой платформе? Вы можете превысить это. – OldProgrammer

+0

Code Composer Studio –

ответ

-1

Я нашел это here:

Вы можете альтернативно избежать ошибок при первой отливке указателя на функцию целого типа, которая может полностью удерживать значение («uintptr_t», определенное в stdint.h, является стандартный typedef для использования для такого рода литья), а затем отбрасывается на меньший тип. Опять же, это приведет к предупреждению об усечении:

mrCla.MVECT1 = (без знака) ((uintptr_t) Cla1Task1 - (uintptr_t) & Cla1ProgStart));

Возможно, если вы используете uintptr_t вместо char *, это позаботится об этом.

+0

'uintptr_t' - это неопределенный идентификатор !, относительно вопроса о броске, я не понимаю вас –

Смежные вопросы