这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» 软件与操作系统» 在uTenux工程中使用printf(非microlib)

共3条 1/1 1 跳转至

在uTenux工程中使用printf(非microlib)

高工
2013-07-02 13:33:07 打赏

PS:遗留问题已解决

uTenux工程中使用printf(非microlib

前段时间说过过microlib的事情,那时在百度上找到的答案是使用microlib来解决。但是由于microlib的效率和不确定性,uTenux中没有使用这个东西。因此那种使用printf的方法也就不能用了。

今天看英倍特的一个例子,偶然间发现它也在用printf,看了一下没有使用microlib

于是照葫芦画瓢,也在工程里边加上了printf的功能。下面是步骤:

1、编辑分散加载描述文件:kernel-rom.sct。最后的效果是这样的:

LOAD_INTERFLASHROM 0x08000000 0x00100000{; load region size_region

EXEC_INTERROM0x08000000 0x00100000{; load address = execution address

* (.vector,+First);1024k

*(InRoot$$Sections)

.ANY (+RO)

}

EXEC_VECTORRAM0x20000000 0x00000400{; vector table region in ram

};1k

EXEC_BSSDATARAM0x20000400 0x00001c00{; zi and rw data region in ram

.ANY (+RW +ZI)

};7k

EXEC_SYSTEMRAM0x20002000 0x00019000{; ut/kernel management region

};100k

EXEC_USERRAM0x2001b000 0x00001000{; user manual region in ram

};4k

EXEC_STACKRAM0x2001c000 0x00000000{; default stack top

};0k

ARM_LIB_HEAP 0x20007000 EMPTY 0x400

{

}

ARM_LIB_STACK 0x20007FFC EMPTY -0x400

{

}

};

参考百度的结果。我增加了两行,ARM_LIB_HEAP 0x20007000 EMPTY 0x400ARM_LIB_STACK 0x20007FFC EMPTY -0x400

如果不加,就会报链接错误:armlink Error: L6915E

参考在这里:http://blog.sina.com.cn/s/blog_5c4dd3330100s3yk.html

我不了解sct文件的写法,只是简单的复制了一下。

2、从写printf的实现函数fputc,这是老方法了,一直用。

//重定义printf

int fputc(int ch,FILE *f)

{

//检查发送寄存器为空之后再往里边放数据

while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)

{}

//USART发送一个字符

USART_SendData(USART3, (uint8_t) ch);

return ch;

}

3、使用printf,正常用,没啥差别。




关键词: uTenux printf

高工
2013-07-02 13:48:32 打赏
2楼

遗留问题:

ARM_LIB_HEAP 0x20007000 EMPTY 0x400

{

}

ARM_LIB_STACK 0x20007FFC EMPTY -0x400

{

}

加入这两个区域的描述之后,虽然能接受发送,但使用原来的tm_putstring时候,程序会跑飞。

跟踪进去,发现多数是在__set_PRIMASK( 0x1 );和__set_PRIMASK( imask );跑飞。单步运行就没问题,F5连续执行就不行了


应该是我定义的区域不对,改改这两个东西的位置就能好,谁来帮个忙啊!

这两个东西的定义跟EXEC_SYSTEMRAM有重叠。怎样改改啊?

EXEC_SYSTEMRAM 0x20002000 0x00019000 { ; ut/kernel management region
}

解决方法,这不是sct的问题。

首先,因为我不懂sct文件写法,所有已有问题就往这里推。这是不对的。

因为昨天做中断实验,把串口中断打开了。导致今天用原来的tm_getchar跑飞
原来还不是sct的问题。是个低级弱智型问题

关掉串口的那个中断,一切正常。。。

完全正常


院士
2013-07-10 11:21:54 打赏
3楼
记录一下,以后这个问题不能发生在我的身上

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]