This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

about error C212 in keilC51

hi: when I compile the below code ,the keil51 emergered a error : error C212: indirect call: parameters do not fit within registers .

source code:

typedef struct NODE{

struct NODE *link; int value;

}NODE;

int
compare_ints(void const *a,void const *b)
{ if(*(int *)a == *(int *)b) return 0; else return 1;

}

NODE *
search_list(NODE *node,void const *value, int(*compare)(void const *,void const *))
{

while(node != NULL ){

if(compare(&node->value,value)==0)//error point break;

node = node -> link;

}

return node;

}

int main()
{ NODE *cur,*root;
int value;

cur = search_list(root,&value,compare_ints);
}

I can find where the error happen ,I mark with"error point" in the code. the compare() function pointer can not be filled in parameters,or the compile gives an alarm. I don't know why.

Parents Reply Children
  • it is very well said previously in this thread
    Basically, the 8051 is not "just another processor" that you can program as you would a PC, etc.
    if you want to code for the '51 you WILL have to code "'51 C" not "C"

    I would state the above reoly this way
    consider whether the fight is really worth it, or a different software architecture would be more appropriate.
    Function pointers, for all practical purposes is a "convenience feature".

    Erik

  • In fact, writing anything in 'C' is a "convenience feature"!

    Function pointers are "inconvenient" to the 8051 architecture because of the nature of the 8051 architecture; in other architectures, it's no big deal - there is no (significant) penalty and, therefore, no reason not to take advantage of their convenience!

  • in other architectures, it's no big deal
    agreed. Ever so often we see that the "architecture ignorance", which for the PC is not a big deal, carries a heavy penalty in the smaller micros.

    it's been a while, but here it is again

    The '51 aint no PC

    Erik