Chris Johns wrote:
objwarning.c:26: warning: conversion to 'uint32_t' from 'int' may change
the sign of the result
typedef uint32_t Objects_Id;
typedef uint16_t Objects_Maximum;
RTEMS_INLINE_ROUTINE uint16_t _Objects_Get_index(
Objects_Id id)
uint32_t foo(Objects_Id id, Objects_Id minimum_id, uint16_t v)
{
uint32_t block;
uint32_t block_2;
block = _Objects_Get_index( id ) - _Objects_Get_index( minimum_id );
block_2 = _Objects_Get_index_2( id ) - _Objects_Get_index_2(
minimum_id );
return block + block_2;
}
I think the problem is that, although the return type of
_Objects_Get_Index is uint16_t, you're subtracting another value in your
assignment expressions on block and block_2. The result of the
subtraction is a signed int. You need to explicitly cast it to uint32_t
when you assign to block and block_2 - you're telling the compiler that,
although it is performing a subtraction, the result won't be negative,
and so it'll fit in the unsigned type.
Cheers,
Nicholas Sherlock