将指针传递给内存映射接口

Ale*_*x12 2 c

我有一个指向内存映射设备的全局指针,初始化如下:

volatile char *base_address = (char *) 0xa0000000;
Run Code Online (Sandbox Code Playgroud)

在程序执行期间,我有一个switch语句,根据输入,必须调整base_address指针,如下所示:

    switch (input) {
        case 'S': 
        base_address = (char *) 0xa0001000;
        InitDevice();
    break;
        case 'A': 
        base_address = (char *) 0xa0001000;
        InitDevice();
            break
Run Code Online (Sandbox Code Playgroud)

TBH,这看起来像是一个肮脏的黑客,将base_address传递给函数可能更好InitDevice((char *) 0xa0001000).后者是否是正确的方法或有更好的方法?

非常感谢,Alex

sbi*_*sbi 5

是的,显式地将所需参数传递给函数总是比通过全局变量传递它更好.

在嵌入式环境中,你可能要考虑调用函数的参数可能需要的参数被压入栈和出栈,否则(除非编译器优化,并将其传递到寄存器).但我不会基于此进行优化,除非我已经建立(通过测量)速度增益实际上值得污染代码.
(既然你例如在输入,这通常是在比较堆栈操作冰川速度来进行切换,这不应该是一个问题在这里呢.)

但是,正如Lars在评论中所说,如果这些文字地址被符号常量所取代,那可能会更好:

volatile char* const A_base_address = (char *) 0xa0001000;
volatile char* const S_base_address = (char *) 0xa0001000;

switch (input) {
case 'S': 
    InitDevice(S_base_address);
    break;
case 'A': 
    InitDevice(A_base_address);
    break;
Run Code Online (Sandbox Code Playgroud)