This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
尊敬的先生:
我正在尝试使用 CCS 5在msp430g2553 Launchpad上编译printf程序。 此程序不是标准的printf C程序,而是缩小内存大小的程序。
您可以通过以下链接找到有关在MSP430 CPU上运行此程序的讨论:
我附上了一份方案副本如下:
e2e.ti.com/.../tiny_5F00_printf.c
我附上了从编译器收到的错误消息的快照。 请注意,我已插入较大尺寸的堆栈和堆大小,但没有结果。 下面的副本是典型的错误信息。
作为解决此问题的一部分,我将附加MSP430g数据表的快照。 我希望能够正确解释快照中的数据表信息。 在下图中,您将看到2个RAM值。 请告诉我如何解释这两个值,即使用msp430g2553处理器可以插入堆和堆栈大小的最大值。
结构图显示RAM大小的2个值的原因是数据表 SLAS735J涵盖了许多不同的设备,具有不同的内存量。在下图中,您将看到2个RAM值。 请告诉我如何解释这两个值, 在使用 msp430g2553 处理器可以插入堆和堆栈大小的最大值方面。
如果您查看后面的表8,该表显示了每个器件的实际内存大小,其中显示MSP430G2553具有512字节的RAM:
根据您所显示的错误消息,链接器正在使用512 (0x200)字节的正确RAM大小。
错误消息显示大小为0x1F4 (500)字节的.stack段分配失败,表示程序空间不足。
[引用user="Michael Choi "]请注意,我插入了更大尺寸的堆栈和堆大小,但没有结果。增加堆栈和堆大小需要更多内存,这增加了程序不适合的可能性。
您的程序是否需要堆? 您引用的小printf()的代码不使用堆本身,但您的putc()和puts()函数有什么作用?
请参阅 了解实用 程序的静态堆栈使用情况,以确定程序的堆栈要求,这对于具有少量RAM的设备很有用,可以找到允许程序运行的最小堆栈大小。
亲爱的切斯特:
感谢您的回复。
当您撰写:
"根据您显示的错误消息,链接器正在使用512 (0x200)字节的正确RAM大小。
错误消息显示大小为0x1F4 (500)字节的.stack段分配失败,表示程序空间不足。"
我尝试了不同的RAM值大小-已经尝试了512字节。
我最初写道:
"请注意,我已插入较大尺寸的堆栈和堆大小,但没有结果。"
我发布了错误消息的"快照" ,以向 读者显示"典型"错误消息。
我要感谢你向我指出的文献。 我会读一读。 我读了一篇由TI工程师撰写的文章,他认为“堆栈”值计算并不是一项简单的任务。
我复制并粘贴了程序,这样任何TI工程师都可以复制该代码,然后尝试在CCS 5上运行它。 我相信此程序以前已经由TI工程师进行过试验(它在互联网上到处都有)。 当MSP430g2553处于开发阶段时,我相信有人曾经尝试过使用它。 "printf"非常有用-对于初级程序员开发人员来说非常重要-有人必须尝试一下。
关于你的问题:
“您的putc()和puts()函数有什么作用?”
请访问以下链接:
www.tutorialspoint.com/.../c_function_putc.htm
www.tutorialspoint.com/.../c_function_puts.htm
我之所以开始这一岗位,是因为我认为"经验"最了解情况。
MSP430G双列直插式封装非常出色,可以与之配合使用,因此您可以在一个出色的主题上冲浪。 我只是希望一些TI工程师能够为我找到解决方案。 我有打印机可以在其他的启动板上工作,但是双列直插式软件包是不能被击败的。 TI应该销售另一款具有更多内存和空白开发板的双列直插式封装处理器Launchpad。 我一定会以合适的价格购买它。 TI需要为开发人员推出另一款双列直插式封装处理器。
What我指的是您是实施了自己的“Tiny”putc()和Puts()函数,还是使用了标准运行时库中的函数?关于您的问题:
“您的putc()和puts()函数有什么作用?”
请访问以下链接:
www.tutorialspoint.com/.../c_function_putc.htm
www.tutorialspoint.com/.../c_function_puts.htm
如果您使用标准运行时库函数,则会增加内存要求。
此外,您希望微型打印输出显示在CCS CIO控制台中,还是写入另一个设备(如MSP430G2553上的UART)?
感谢您的快速回复。
我在这个阶段所做的就是尝试编译程序。 程序 已剪切并粘贴-没有其他修改-除了不同的#include文件(msp430g2553.h或MSP430-h)。
如果需要在CCS 5中进行设置以利用标准运行时库,请告诉我。
我已经访问了此TI wiki页面并 更改了一些设置,但 编译仍然失败。 请参阅以下链接:
processors.wiki.ti.com/.../Printf_support_for_MSP430_CCSTUDIO_compiler
我 冲浪了很多其他页面,尝试了推荐的内容。 此时,我要回答的问题是,是否可以编译我 最初在MSP430G2553上发布的程序?
要回答您关于我希望如何查看小printf输出的问题,我希望在CCS CIO控制台中显示小printf库调用。
您是否已剪切并粘贴(或下载)程序并 成功 编译该程序?
如果需要在CCS 5中进行设置以利用标准运行时库,请告诉我。[/QUOT]无需在CCS 5中进行设置即可利用标准运行时库, 问题是标准运行时库需要太多RAM才能通过C stdio实现printf(),从而无法适应MSP430G2553。
我研究了使用MSP430F4793中标准运行时库中的putc()所需的RAM量。 所需的最小RAM为1028字节,其中包括由cg_xml call_graph实用程序计算的54字节堆栈和putc()使用的stdio缓冲所需的260字节堆栈。即仅调用putc()超出MSP430G2553上的内存量。您是否已经剪切并粘贴(或下载)了程序并 成功 编译了程序?
我创建了一个替换putc(),它只需将字符直接写入CCS CIO控制台, 不支持标准运行时库中的其他文件I/O功能。要回答您关于我希望如何查看小printf输出的问题,我希望小printf库调用出现在CCS CIO控制台中。
然后,我可以让Tiny_printf测试程序仅使用94字节的内存,即适合MSP430G2553,并且仍然在CCS CIO控制台上显示文本。 堆栈空间被设置为48字节,即call_graph程序计算的堆栈空间。 完整的程序可能需要更多的堆栈空间。 微型printf,putc或puts函数不需要堆空间。
以下是在MSP430G2553上运行的Tiny_printf测试在CCS CIO控制台上的输出:
示例项目附加 在e2e.ti.com/.../MSP430G2553_5F00_tiny_5F00_printf.zip中
该项目使用CCS 7和TI MSP430编译器v MSP.0.LTS进行了测试16.9。 虽然我没有在CCS 5上测试代码,但我认为它也应该在CCS 5下运行。 CCS 5将无法导入CCS 7项目,因此将以下源文件复制到CCS 5项目中:
Tiny_printf.c -包含极小的printf(),putc()和Puts()函数。 MAX_bytes_per写入宏的值可以减小以降低所用的内存。
main.c -包含对引用 的http://forum.43oh.com 链接中的微型printf()的测试
亲爱的切斯特:
哇!!! 我不知所措。 非常感谢您的努力。
我想我会尝试下载并安装CCS 7,然后尝试运行您的程序。 在Windows 7上下载和安装CCS时出现问题。 我以前曾遇到过这个问题。 我将尝试向您提供 您的程序在CCS 7上运行的结果(即,如果我获得CCS 7以正确安装)。 这可能需要几天 时间,甚至更多。
我对你的努力和你的专业知识感到不知所措。 你 是真正的"天才"。 非常感谢。
亲爱的切斯特:
我让您的程序在CCS7上运行没有问题。
在Win7专业版32位版上下载和安装CCS7时,要求用户在最初尝试保存并运行下载时键入并保存文件扩展名*。exe。 这是 我的系统唯一需要清除的障碍。
MSP430G 的内存太少,这是一种遗憾。 我想知道 TI是否销售 任何在DIP封装中具有更多内存的处理器,这些处理器可以安装在Launchpad中并与引脚对引脚兼容? 也许,我希望太多,但也许我会幸运,那里会有一个。
无论如何,感谢您的帮助,您是最棒的!
Michael Choi 说:我想知道 TI是否销售 任何具有更多内存的DIP封装处理器,该封装将适合Launchpad并与引脚对引脚兼容? [/报价]使用 产品搜索MSP430超低功耗MCU并在PDIP封装上进行过滤,显示最大大小为16K闪存和512字节RAM。 答案是否定的
虽然不与Launchpad引脚兼容,但Olimex销售 包含 MSP430和无源组件/晶体的管座板,并将引脚引入0.1 节距连接器,允许在通孔板中使用MSP430。
亲爱的切斯特:
再次感谢您的精彩回复。
当TI销售Launchpad时,这是一个很好的主意,扩展PCB开发板也是一个很好的主意。 人们喜欢使用Launchpad购买商用现成(COTS)开发板的便利。 时间和麻烦太多了,不能自己动手。
我认为TI没有注意到 人们喜欢可靠的开发系统,没有什么能比用于制造“可修复”系统原型的DIP更好。 具有大量内存的DIP处理器 使平台变得方便且可扩展。 如果TI不销售 这种类型的处理器,其他人会(或者有人已经拥有,我只是不知道他们的产品)。 也许,有人可以告诉我们 ,目前市场上的DIP 嵌入式处理器具有大量内存和与MSP430g类似的功能。
我将验证您的答案。 不过,我还是喜欢跟你切斯特说。 我还有另一个问题,我希望你们能回答。 我可以在CCS论坛上再起一篇文章来回答这个问题。 这是我第一次遇到 “内存不足” 问题。
这是我的问题:
编译器和链接器组合在一起后,代码和内存将被分配到处理器上。 如何使用CCS来查看处理器,以查找可用用户内存的开始位置。 例如,假设我使用了您的printf程序,并且我想将打印出来的任何内容存储在内存中,如何使用CCS来查找可用内存开始的起始地址?