近期调试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.
- Get/write a device driver for outputting data from the UART (or whatever interface you choose).
- Write the low-level functions as described in Chapter 8.2 The C I/O Functions of the C Compiler User's Guide.
- Call add_device() to add your functions to the stream table (i.e. in addition to stdin, stdout, stderr).
- Open your stream.
- Redirect your stream to stdout using freopen.
- 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!\r\n");
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() 函数来测量时间等等。