DSP

DSP:重新定向 printf 输出到串口

2019-07-13 09:40发布

近期调试24GHz毫米波雷达,处理器为DSP,边学习边写代码,网上也摘录些小笔记,以便理解跟巩固。 from TI中文社区:http://processors.wiki.ti.com/index.php/Tips_for_using_printf

Using printf() to output to a user-defined device

You can install a user-defined driver so that you can use the sophisticated buffering of the high–level C I/O functions on an arbitrary device, such as a UART. The user-defined driver will not use the C I/O ABI to communicate with the debugger; the driver will need to provide some other means of output, such as controlling a peripheral.
  1. Get/write a device driver for outputting data from the UART (or whatever interface you choose).
  2. Write the low-level functions as described in Chapter 8.2 The C I/O Functions of the C Compiler User's Guide.
  3. Call add_device() to add your functions to the stream table (i.e. in addition to stdin, stdout, stderr).
  4. Open your stream.
  5. Redirect your stream to stdout using freopen.
  6. Specify what buffering is to be used for your stream by calling setvbuf.
For example: ret_val = add_device("uart", _SSA, uart_open, uart_close, uart_read, uart_write, uart_lseek, uart_unlink, uart_rename); fid = fopen("uart","w"); freopen("uart:", "w", stdout); // redirect stdout to uart setvbuf(stdout, NULL, _IONBF, 0); // turn off buffering for stdout printf("Hello world! "); See also RAMDISK: A Sample User-Defined C I/O Driver from 360doc:clock2651 http://www.360doc.com/content/18/0821/11/58870741_780016798.shtml 在调试 DSP 程序的时候,不可避免会用到 C 语言运行时提供的一些标准输入/输出函数来获取或输出一些调试信息。但是,在使用 CCS 集成开发环境时,这些调试信息往往是通过 CCS Console 窗口来输入输出的,当程序固化在 Flash 自启动时,这些调试输入输出就不能够使用了。如果,可以使这些标准输出从串口输出,这样不论调试还是固化之后都可以很方便的查看调试信息。 DSP 的 C++/C 语言运行时支持库(Runtime Support Library,即 RTS 库)。RTS 库都是类似这样的名称,rts6600_elf.lib / rts6740_elf.lib / rts6740e.lib 等等,其中 ELF 代表库二进制格式为 ELF,需要注意的是同一工程中链接的库必须是同一种格式的,COFF 或者 ELF,不能够混合使用,也不支持 COFF 格式与 ELF 格式库文件互相转换。rts6740e.lib 中的字母 e 代表大端字节序。库名中的数字代表 DSP CPU 架构,6400,6740,6600等等。 而 RTS 库中,很大一部分函数是 C I/O 函数。在 CCS 集成开发环境下 TI 指定了一套协议通过 C I/O 函数与运行着 CCS 的电脑进行通信。(请参阅 http://processors.wiki.ti.com/index.php/CIO_System_Call_Protocol 获取 C I/O 的详细协议说明)比如,可以通过 C 语言文件操作函数 fopen / fread / fwrite 等函数直接读取电脑上的文件进行处理或者使用 clock() 函数来测量时间等等。