小编Jer*_*emy的帖子

如何在C中创建一个!默认情况

在一个微控制器程序中,我有一些指令,除了默认情况,我想为交换机中的每个案例执行一些指令.但是,我不想为每个案例编写函数调用或使用宏.

因为这适用于以3-7Mhz运行的微控制器,速度和代码空间非常重要.例如:

switch(letter)
{
case a:
    ShowApple();
    printf("You entered an english letter.");
    break;
case b:
    ShowBananna();
    printf("You entered an english letter.");
    break;
...
case z:
    ShowZebra();
    printf("You entered an english letter.");
    break;
default:
    printf("You did not enter an english letter. Silly human!");
    break;
}
Run Code Online (Sandbox Code Playgroud)

c microcontroller microchip pic switch-statement

4
推荐指数
2
解决办法
1720
查看次数

多种获取地址的方法

在IAR C/C++编译器手册中,它声明编写优化友好的源代码:

避免使用&运算符获取局部变量的地址.由于两个主要原因,这是低效的.首先,变量必须放在内存中,因此不能放在处理器寄存器中.这会导致代码越来越大.其次,优化器不能再假设局部变量不受函数调用的影响.

还有哪些方法可以获取局部变量的地址?显然我知道,如果我有一个指向该变量的指针,我可以使用它,如果我有一个数组,我可以使用数组名称,但是我不知道任何其他方法来获取局部变量的地址而不是&运营商.

c msp430 iar

1
推荐指数
1
解决办法
99
查看次数

通过在C中更改函数调用来节省代码空间

我正在调用一个通过指针参数返回变量的函数.我不关心这个参数的返回值,也不想让虚拟变量传递给函数.举一个简单的例子,假设函数如下,我不关心,也不想为参数"d"创建一个虚拟变量.

void foo(int a, int b, int* c, int* d)
{
*c = a+b;
*d = a+b+*c;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,NULL指针理论上是一个指向不是任何对象或函数地址的位置的指针.如果将NULL定义如下,那么在此函数中将NULL传递给"d"是否正确?或者这是否会改变内存中第0个元素的内容?

#define NULL ((void *)0)
Run Code Online (Sandbox Code Playgroud)

目标设备是MSP430,我正在使用IAR C. 没有使用操作系统,因此没有实现内存管理

编辑:请注意,我不想创建虚拟变量.此外,如果有一种方法可以欺骗编译器在不改变函数定义的情况下优化"d"参数,这是更可取的.

编辑#2:我宁愿不在函数调用中使用&运算符,因为它会生成我不想生成的低效代码

编辑#3:对于那些在我谈论&运算符时不相信我的人......编译器手册指出"避免使用&运算符来获取局部变量的地址.这主要有两个原因:效率低.首先,变量必须放在内存中,因此不能放在处理器寄存器中.这会导致代码越来越大.其次,优化器不能再认为局部变量不受函数调用的影响."

c null void-pointers

-3
推荐指数
1
解决办法
254
查看次数