gpt4 book ai didi

c - 在 ARM 中使用 32 位数据类型和 8 位数据类型

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:49 25 4
gpt4 key购买 nike

我是 ARM LPC2148 微 Controller 的新手,也是 StackOverflow 的新手。我刚刚在其中一个评估板上看到了一段代码。我正在粘贴,如下所示。

端口引脚 P0.19 到 P0.22 映射到 LCD 的 D4 到 D7。下面的函数用于向在 4 位模式下运行的 LCD 发送命令:

void LCD_Command(unsigned int data)     // This function is used to send LCD commands
{
unsigned int temp=0;
EN_LOW(); // Set EN pin of LCD to to Low
COMMAND_PORT();
WRITE_DATA();

temp=data;
IO0PIN&=0xFF87FFFF;
IO0PIN|=(temp & 0xF0) << 15;

EN_HI(); // Give strobe by enabling and disabling En pin of LCD
EN_LOW();

temp=data & 0x0F;
IO0PIN&=0xFF87FFFF;
IO0PIN|=(temp) << 19;

EN_HI();
EN_LOW();
while(Busy_Wait());
Delay(10);
}

我的问题是:

  1. 变量“data”已经是 32 位宽了。以这种方式转移数据是否有效?编码器可以传递 32 位数据,然后屏蔽 (&)/ORed (|)。还是有其他影响?

  2. 如果我们使用 unsigned char 而不是 unsigned int,我们会在 LPC21xx 中节省任何内存吗?由于寄存器是 32 位宽,我不确定内部是否进行了任何分段以节省内存。

  3. 有什么方法可以轻松地将 8 位数据映射到 32 位数据的 8 位部分之一?在上面的代码中,移位是通过硬编码完成的(<<15<<19 等)。我们能否避免这种硬编码并使用一些#define 来映射位?

最佳答案

  1. Do we save any memory in LPC21xx if we use unsigned char instead of unsigned int?

仅当将它们存储到 RAM 中时,一旦优化器打开,这个小函数将不会执行此操作。请注意,使用 char 类型可能会引入其他代码以生成以正确处理溢出。

  1. [...] 我们能否避免这种硬编码并使用一些#defines 来映射位?

简单:

#define LCD_SHIFT_BITS 19

void LCD_Command(unsigned int data) // This function is used to send LCD commands
{
unsigned int temp=0;
EN_LOW(); // Set EN pin of LCD to to Low
COMMAND_PORT();
WRITE_DATA();

temp=data;
IO0CLR = 0x0F << LCD_SHIFT_BITS;
IO0SET = (temp & 0xF0) << (LCD_SHIFT_BITS - 4);

EN_HI(); // Give strobe by enabling and disabling En pin of LCD
EN_LOW();

temp=data & 0x0F;
IO0CLR = 0x0F << LCD_SHIFT_BITS;
IO0SET = temp << LCD_SHIFT_BITS;

EN_HI();
EN_LOW();
while(Busy_Wait());
Delay(10);
}

我还更改了 pin set 和 clear 为 atomic。

关于c - 在 ARM 中使用 32 位数据类型和 8 位数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29315028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com