#elif defined( __ICCARM__)
__INTRINSIC long __lseek(int file, long ptr, int dir) {
struct fd_seek seek;
seek.off = ptr;
seek.dir = dir;
if( ioctl( file, FDSEEK, &seek ) < 0 )
return (_off_t)-1;
else
return seek.off;
}
#endif
int ioctl( int file, unsigned long request, void *ptr )
{
#if defined(__GNUC__)
return _ioctl_r( _REENT, file, request, ptr );
#elif defined( __ICCARM__)
return __ioctl( file, request, ptr );
#endif
}
#elif defined( __ICCARM__)
static int __ioctl( int file, unsigned long request, void *ptr )
{
const DM_DEVICE* pdev;
// Find device, check ioctl function
pdev = dm_get_device_at( DM_GET_DEVID( file ) );
if( pdev->p_ioctl_r == NULL )
{
return -1;
}
// And call the ioctl function
return pdev->p_ioctl_r( DM_GET_FD( file ), request, ptr );
}
#endif
И функция __ioctl как раз возвращала -1 (а надо >=0), т.к. не была определена функция pdev->p_ioctl_r.
Это к тому, что если записали в файл, то надо rewind(pFile) сделать, чтобы его указатель на начало переместить (для уарта, он не буферезирован), а rewind в свою очередь вызовет fseek, а тот вызовет __lseek. Вот так.