文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>vivi-stage2-step1

vivi-stage2-step1

时间:2010-06-07  来源:charming2440

vivi的stage2中一开始就通过putstr()函数调用串口显示信息,表明vivi的开始。

//putstr("\r\n");

//putstr(vivi_banner);

void putstr(const char *str)
{
    putnstr(str, strlen(str));
}

void putnstr(const char *str, size_t n)
{
    if (str == NULL)
        return;

    while(n && *str != '\0')
    {
     putc(*str);
        str++;
        n--;
    }
}

void putc(char c)
{
    PROC_SERIAL_PUTC(c);
}

#define PROC_SERIAL_PUTC(c) \
    ({ while (!SERIAL_WRITE_READY()); \
     SERIAL_WRITE_CHAR(c); })

#define SERIAL_WRITE_READY() ((UTRSTAT0) && UTRSTAT_TX_READY)
#define SERIAL_WRITE_CHAR(c) ((UTXH0) = (c))

#define UTRSTAT0 (*(volatile unsigned long *)0x50000010)
#define UTRSTAT_TX_EMPTY        (1 << 2)

putstr()--->putnstr()--->putc()--->
上面的代码我是按照调用顺序些出来,但是实际的程序中是不推荐这么写的

这个函数有一定的错误。其实也不叫错误,就是这个函数根本就没实现任何功能 首先我们跟踪函数的调用来看源程序

25 static int
 26 read_bt_status(void)
 27 {
 28 ulong status;
 29
 30 //status = ((GPLR & (1 << GPIO_PWBT)) >> GPIO_PWBT);

 31 status = ((PWBT_REG & (1 << PWBT_GPIO_NUM)) >> PWBT_GPIO_NUM);
 32
 33 if (status)
 34 return HIGH;
 35 else
 36 return LOW;
 37 }

 38
 39 static int
 40 is_pressed_pw_btn(void)
 41 {
 42 return read_bt_status();
 43 }
 44
 45 static void
 46 hard_reset_handle(void)
 47 {
 48 #if 0
 49 clear_mem((unsigned long)(DRAM_BASE + VIVI_RAM_ABS_POS), \
 50 (unsigned long)(DRAM_SIZE - VIVI_RAM_ABS_POS));
 51 #endif
 52 clear_mem((unsigned long)USER_RAM_BASE, (unsigned long)USER_RAM_SIZE);
 53 }
 54
 55 static void
 56 soft_reset_handle(void)
 57 {
 58 /* nothing to do */
 59 }
 60
 61 void
 62 reset_handler(void)
 63 {
 64 int pressed;
 65
 66 pressed = is_pressed_pw_btn();
 67
 68 if (pressed == PWBT_PRESS_LEVEL) {
 69 DPRINTK("HARD RESET\r\n");
 70 hard_reset_handle();
 71 } else {
 72 DPRINTK("SOFT RESET\r\n");
 73 soft_reset_handle();
 74 }
 75 }

作者的本意是区分软复位和硬复位,但是在配置的时候我们都没有配置这个功能(配置则出错,相关的寄存器没有定义)

1 /*
  2 * vivi/include/memory.h
  3 *
  4 * Copyright (C) 2001,2002 MIZI Research, Inc.
  5 *
  6 * $Id: reset_handle.h,v 1.1.1.1 2004/02/04 06:22:25 laputa Exp $
  7 */
  8
  9 #ifndef __VIVI_RESET_H__
 10 #define __VIVI_RESET_H__
 11
 12 #include <config.h>
 13
 14 #ifdef CONFIG_RESET_HANDLING
 15 void reset_handler(void);
 16 #else
 17 #define reset_handler() (void)(0)
 18 #endif
 19
 20 #endif /* __VIVI_RESET_H__ */

从上面的头文件就可以看出来,实际上将reset_handler()定义为空函数。
排行榜 更多 +
宝宝情商养成宝宝巴士

宝宝情商养成宝宝巴士

休闲益智 下载
燥热手机版

燥热手机版

飞行射击 下载
巨人狙击手安卓版

巨人狙击手安卓版

飞行射击 下载