aaa2742 发表于 2011-1-14 11:33:35

rt怎么解决printf可重入性的?

各位大侠,printf是不可重入的,RT里的shell怎么弄的?能详细说一下吗

itspy 发表于 2011-1-14 17:55:22

这需要看源码了

yyl81 发表于 2011-1-24 13:53:09

rtt 0.3rc1
3个线程 优先级不同 都调用rt_printf
打出来的信息 会出错

first_blood 发表于 2011-1-24 14:11:52

//获取uart1 信号量
rt_kprintf.....
//释放信号量 自己加信号量

接收的shell,接收到命令后,里面好像是直接把shell进程挂起,运行完后才会恢复,所以不能同时执行多个命令

first_blood 发表于 2011-1-24 14:18:04

如果打印的内容很长,rt_kprintf 相当耗时间,最好用消息队列将打印信息先写到申请的内存中,然后将地址和长度通过消息队列发给uart1,uart1再用DMA方式发送出去,这样比较复杂,开销也大

aaa2742 发表于 2011-1-24 17:30:11

那是不是有点累赘?我感觉耗时,对实时性的内核会不会有影响?

lixun00 发表于 2011-1-24 17:37:52

我是这样实现的:
动态申请内存,发送完后再释放

bygreencn 发表于 2011-1-25 12:44:32

1. 丨串口发送端做一定深度的指针队列作为发送队列,该队列的head记录该条发送的数据的完成性和数据指针,uart驱动做中断方式发送完整的数据记录。
2. printf不使用静态,全局变量,不调用不可重入的函数。
3. printf将处理完整数据申请互斥量存入发送队列。
页: [1]
查看完整版本: rt怎么解决printf可重入性的?