2013-09-26 29 views
0

原代碼是循環功能,給予的錯誤「與價值迴歸」,在函數返回void」

#define MAX_FRAMES 10000 
#define MS_BETWEEN_FRAMES CONFIG_FB_MSM_LOGO_ANIMATE_FPS 

int load_565rle_image(char *filename, bool bf_supported); 
struct delayed_work rle_animate_work; 

static void load_565rle_animate(struct work_struct *work) 
{ 
    int i, ret = 0, bf_supported = 0; 
    char filename [20]; 
    struct fb_info *info = registered_fb[0]; 
    set_fs(KERNEL_DS); 
    printk(KERN_INFO "Starting kernel boot animation\n"); 
    for (i = 1; i < MAX_FRAMES; i++) { 
     sprintf(filename, "/res/bootlogo/%d.rle", i); 
     ret = load_565rle_image(filename, bf_supported); 
     sys_unlink(filename); 
     if (ret == -ENOENT) 
      break; 
     info->fbops->fb_open(info, 0); 
     info->fbops->fb_pan_display(&info->var, info); 
     msleep(MS_BETWEEN_FRAMES); 
    } 
} 

static int __init logo_animate_init(void) 
{ 
    INIT_DELAYED_WORK(&rle_animate_work, load_565rle_animate); 
    schedule_delayed_work(&rle_animate_work, 5 * HZ); 
    return 0; 
} 

static void __exit logo_animate_exit(void) 
{ 
    return; 
} 

本作內核標誌動畫,通過加載系列* .RLE圖像的連續即1.rle> 2.rle> 3.rle> 4.rle> 5.rle等。

它最初編寫的方式是停止加載這些圖像,當它到達圖像文件名的結尾,即如果最後一個文件名是5.rle,它停止並在那裏停止。基本上我現在要做的是循環,當它到達最後一個文件(5.rle)時,它會繼續從頭開始加載(1.rle)。

所以我說CONFIG_FB_MSM_LOGO_ANIMATE_LOOP

static void load_565rle_animate(struct work_struct *work) 
{ 
    int i, ret = 0, bf_supported = 0; 
    char filename [20]; 
    struct fb_info *info = registered_fb[0]; 
    set_fs(KERNEL_DS); 
    printk(KERN_INFO "Starting kernel boot animation\n"); 
    for (i = 1; i < MAX_FRAMES; i++) { 
     sprintf(filename, "/res/bootlogo/%d.rle", i); 
     ret = load_565rle_image(filename, bf_supported); 
     sys_unlink(filename); 
     if (ret == -ENOENT) 
#ifdef CONFIG_FB_MSM_LOGO_ANIMATE_LOOP 
      return ret; 
#else 
      break; 
#endif 
     info->fbops->fb_open(info, 0); 
     info->fbops->fb_pan_display(&info->var, info); 
     msleep(MS_BETWEEN_FRAMES); 
    } 
} 

但當CONFIG_FB_MSM_LOGO_ANIMATE_LOOP是啓用,它給編譯「警告:‘錯誤回報’用一個值,在函數返回void [默認啓用]」 其停止編譯過程。有什麼想法嗎?

+0

你爲什麼把它聲明'void'如果你想返回一個值? – Barmar

回答

0
#ifdef CONFIG_FB_MSM_LOGO_ANIMATE_LOOP 
      return ret; 
#else 
     break; 
#endif 

這是與否有關preprocessr進行預處理,並導致從你的函數返回int ret定義CONFIG_FB_MSM_LOGO_ANIMATE_LOOP時。所以

「迴歸」用一個值,在函數返回void

似乎是相當合理的暗示。

解決方案: 變化也函數的返回類型,然後或將其更改爲:

#ifdef `CONFIG_FB_MSM_LOGO_ANIMATE_LOOP` 
      return; 
#else 
     break; 
#endif