Q&A
C言語初心者です。
g++でのC言語のコンパイルが以下のエラーによってうまくいきません。
添付コードの最後の
return (uint32_t)flash_env;
でcast from 'FlashEnv*' {aka '_flash_env*'} to 'uint32_t' {aka 'unsigned int'} loses precision [-fpermissive]
というエラーが出ます。
あるC applicationのtutorialを行うことが目的でこのコード以外にも同じエラーが多数発生しています。
お力添えいただければ幸いです。
発生している問題・エラーメッセージ
cast from 'FlashEnv*' {aka '_flash_env*'} to 'uint32_t' {aka 'unsigned int'} loses precision [-fpermissive]
該当のソースコード
C
1 2#ifndef LINUX_APP 3 4#include <stdio.h> 5#include <stdlib.h> 6 7#include "xparameters.h" 8#include "xil_printf.h" 9#include "xiicps.h" 10#include "sleep.h" 11#include "xstatus.h" 12 13#define IIC_SCLK_RATE 400000 ///< I2C clock rates 14#define FLASH_MAX_LENGTH 256 ///< Maximum flash transfer length 15 16typedef struct _flash_env { 17 uint16_t slave_addr; ///< Slave address 18} FlashEnv; 19uint32_t fnInitFlash(uintptr_t addr, uint16_t slave_addr) 20{ 21 XIicPs_Config *pCfgPtr; 22 int Status; 23 24 FlashEnv *flash_env = (FlashEnv *)malloc(sizeof(FlashEnv)); 25 if (flash_env < 0) { 26 return XST_FAILURE; 27 } 28 29 flash_env->slave_addr = slave_addr; 30 31 //avoid multiple initializations 32 if (fIicPSInit) 33 goto iic_init_done; 34 35 //extract configuration pointer 36 pCfgPtr = XIicPs_LookupConfigBaseAddr(addr); 37 if (!pCfgPtr) { 38 xil_printf("No config found for %X\n", addr); 39 return -1; 40 } 41 42 //apply configuration to the Iic pointer 43 Status = XIicPs_CfgInitialize(&XIicPS, pCfgPtr, pCfgPtr->BaseAddress); 44 if (Status != XST_SUCCESS) { 45 xil_printf("Initialization failed %X\n"); 46 return -1; 47 } 48 49 //set the desired clock rate 50 XIicPs_SetSClk(&XIicPS, IIC_SCLK_RATE); 51 52iic_init_done: 53 return (uint32_t)flash_env; 54}
回答3件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。