I am trying to store and use a pointer to a global function. The function global_f returns a String and takes an object as parameter:

String global_f(Request r){
    // ...
    return "This is it";

I have also declared a type:

typedef String (*f_type)(Request);

And this is the class that stores the function:

class T {
    f_type f;

    void setF(f_type fFunc){ // called as: setF(&global_f)
        f = fFunc;
        f(Request());        // This Works

    void callF(){
        f(Request());       // This Freezes the arduino

So I can call f in the instructor, but it freezes the Arduino in other methods.

Follow-up: It runs in all methods, that the function is being passed as a parameter and stored in the object. This is where this functions is called in the actual code: GitHub

  • //called as: T(&global_f)? it should be T(global_f)
    – Juraj
    Commented Mar 1, 2019 at 20:34
  • how do you know it is freezing the Arduino? or even working in the first case? You don't do anything with the return value in either case!; can you make a complete, minimal sketch that shows the problem?
    – esoterik
    Commented Mar 1, 2019 at 20:41
  • @Juraj I tried both of them and they give the same results, also PlatformIO compiles both
    – Kostas C.
    Commented Mar 1, 2019 at 21:20
  • @esoterik I am using Serial.print to know how it runs. This is just the most important part of the code for this problem. I can provide a link to github if it is needed.
    – Kostas C.
    Commented Mar 1, 2019 at 21:25
  • 1
    @Juraj This is the actual code I'm using github.com/kachatzis/ArduinoWebServer/blob/…
    – Kostas C.
    Commented Mar 2, 2019 at 17:02


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.