Да, явная передача обязательного параметра в функцию всегда лучше, чем передача его через глобальную переменную.
Во встроенной среде вам, возможно, придется учитывать, что для вызова функции с параметром может потребоваться, чтобы параметр был помещен в стек и извлечен в противном случае (если компилятор не оптимизирует и не передаст его в регистр).Но я бы не стал оптимизировать, основываясь на этом, если бы не установил (путем измерения), что выигрыш в скорости действительно стоит загрязнять код.
(И так как ваш пример переключает вход, который обычно идет с ледяной скоростью по сравнению сстековые операции, это не должно быть проблемой в любом случае.)
Однако, как сказал Ларс в комментарии, было бы лучше, если бы эти буквальные адреса были заменены символическими константами:
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;