繁体   English   中英

将指针传递到内存映射的接口

[英]Passing pointer to memory-mapped interface

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

volatile char *base_address = (char *) 0xa0000000;

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

    switch (input) {
        case 'S': 
        base_address = (char *) 0xa0001000;
        InitDevice();
    break;
        case 'A': 
        base_address = (char *) 0xa0001000;
        InitDevice();
            break

TBH,对我来说这似乎是一个肮脏的技巧,将base_address传递给函数InitDevice((char *) 0xa0001000)可能会更好。 后者是执行此操作的正确方法还是有更好的方法?

非常感谢,亚历克斯

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

在嵌入式环境中,您可能必须考虑使用参数调用函数可能需要将参数压入堆栈并以其他方式弹出(除非编译器对其进行优化并将其传递到寄存器中)。 但是除非基于(通过测量)确定速度增益实际上值得污染代码,否则我不会基于此进行优化。
(并且由于您的示例正在切换输入,与堆栈操作相比,输入切换通常以很高的速度进行,因此无论如何这都不是问题。)

但是,正如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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM