rt怎么解决printf可重入性的?
各位大侠,printf是不可重入的,RT里的shell怎么弄的?能详细说一下吗 这需要看源码了 rtt 0.3rc13个线程 优先级不同 都调用rt_printf
打出来的信息 会出错 //获取uart1 信号量
rt_kprintf.....
//释放信号量 自己加信号量
接收的shell,接收到命令后,里面好像是直接把shell进程挂起,运行完后才会恢复,所以不能同时执行多个命令 如果打印的内容很长,rt_kprintf 相当耗时间,最好用消息队列将打印信息先写到申请的内存中,然后将地址和长度通过消息队列发给uart1,uart1再用DMA方式发送出去,这样比较复杂,开销也大 那是不是有点累赘?我感觉耗时,对实时性的内核会不会有影响? 我是这样实现的:
动态申请内存,发送完后再释放 1. 丨串口发送端做一定深度的指针队列作为发送队列,该队列的head记录该条发送的数据的完成性和数据指针,uart驱动做中断方式发送完整的数据记录。
2. printf不使用静态,全局变量,不调用不可重入的函数。
3. printf将处理完整数据申请互斥量存入发送队列。
页:
[1]