Calling a function in an assembler routine

presumably shiftOutByte() is defined in C++ code (.cpp or .ino file), and is therefore "name mangled" into a symbol that reflects the full function signature (including argument types.) Try prototyping it like:

extern "C" void shiftOutByte(byte b);

See also Standard C++

2 Likes