gpt4 book ai didi

c - 有大小限制的加法程序

转载 作者:行者123 更新时间:2023-11-30 15:00:53 26 4
gpt4 key购买 nike

我正在尝试用 C 语言编写代码(使用 Keil µVision 5,设备:AT89C51AC3),让我输入 2 个整数,将它们相加,然后打印出来。问题是我的字节码大小限制为最大。 2048.

我的实际代码需要 2099 字节才能运行。

知道如何使用更少的内存来做同样的事情吗?

#include <stdio.h>
#include <REG52.H>

int main()
{
int a, b;


/*------------------------------------------------
Setup the serial port for 1200 baud at 16MHz.
------------------------------------------------*/
#ifndef MONITOR51
SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 221; /* TH1: reload value for 1200 baud @ 16MHz */
TR1 = 1; /* TR1: timer 1 run */
TI = 1; /* TI: set TI to send first char of UART */
#endif

printf("Enter 2 numbers\n");
scanf("%d%d",&a,&b);

printf("%d\n",a+b);

return 0;
}

最佳答案

当你看到这个简单的代码占用了 2k+ 的内存时,你应该会打嗝。好多啊!原因是 stdio 函数效率极低。

如果您需要节省内存和执行速度,您需要自己编写这些代码。这并不难,因为您可能只需要读取整数,而不需要读取这些函数可以处理的所有其他内容( float 、字符串等)。

同时摆脱 int 类型,改用 stdint.h 中的固定大小类型。 (如果这是一个 8 位 MCU,除非必要,否则您还应该避免使用 16 位数字。)

此外,您还必须对 I/O 部分进行编码。在微 Controller 上,这可能意味着编写您自己的 UART 驱动程序。

您应该能够将代码大小减少到几百字节,具体取决于微 Controller 的代码效率(低效率)。

关于c - 有大小限制的加法程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41809157/

26 4 0
文章推荐: c# - 当编译时类型未知时,将对象动态转换为类型
文章推荐: javascript - 在 JavaScript 小书签中定义多个全局函数
文章推荐: c# - IList 和 IList 之间的比较 - 应该首选哪个?