- 论坛徽章:
- 0
|
本帖最后由 crifan 于 2011-04-19 21:40 编辑
最近遇到个问题,2011.03版本的uboot,tq2440的板子,在调试的时候,遇到很奇怪的事情,尝试N次,仍是失败:
uboot 2011.03的arch/arm/lib/board.c中:
如果把测试点亮led的函数s3c2440_led_on放在init_sequence之前,那么就可以正常执行s3c2440_led_on,点亮led。
- extern int s3c2440_led_on(void);
- ...
- init_fnc_t *init_sequence[] = {
- timer_init, /* initialize timer */
- ... ...
- NULL,
- };
-
- void board_init_f (ulong bootflag)
- {
- ...
- gd->mon_len = _bss_end_ofs;
-
- s3c2440_led_on();
- for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
- if ((*init_fnc_ptr)() != 0) {
- hang ();
- }
- }
- debug ("monitor len: %08lX\n", gd->mon_len);
- ...
复制代码 但是如果把该s3c2440_led_on放到init_sequence之中,即使是第一个要执行的函数,如下所示:
- extern int s3c2440_led_on(void);
- ...
- init_fnc_t *init_sequence[] = {
- s3c2440_led_on,
- timer_init, /* initialize timer */
- ... ...
- NULL,
- };
-
- void board_init_f (ulong bootflag)
- {
- ...
- gd->mon_len = _bss_end_ofs;
- for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
- if ((*init_fnc_ptr)() != 0) {
- hang ();
- }
- }
- debug ("monitor len: %08lX\n", gd->mon_len);
- ...
复制代码 结果程序都无法执行s3c2440_led_on,无法点亮led。
这个问题折腾了好久,怀疑过是函数调用堆栈没设置好的问题,但是后来排除此原因。
其他方面,实在想不通,是为何。
求高手指教,有知道的,帮忙分析一下。谢谢。 |
|