As the third argument of this function is an address, it has no need of being a pointer to a variable stored in an address. I am trying to use a #define for the pData address but for obvious reasons it doesn't work because it is not a pointer. It does work for the second argument.
Is there some simple way to create a temporary pointer variable just to store the declaration of the address?
As I wrote before, the answer is "no".
Suppose there is something to create a temporary variable on the stack and the parameter is a pointer to that variable. But that is exactly what you are doing when you declare the 'chip_id' variable. There is no automatic or magic trick for it.
A #define is a text replacement, nothing more, nothing less. A variable can store data, a pointer is a variable that holds an address and a function has parameters. They are all totally different things. You have to glue them together with code.
In the 'C' and 'C++' language, you have to tell the compiler what to do. The compiler does not generate code based on your intentions.
It is not so bad after all, is it ? It is just normal code for the 'C' and 'C++' language.