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

Checksum calculation example

Can you tell me, what does "unsigned char CODE *" mean in

checksum = calc_checksum ((unsigned char code *) 0, 0x4000);


from "csumex" Keil example.

My c166 compiler can't complile it.
What shall I do?

  • I think you are mixing the different tool chains. In the C51 tool chain (for example) program memory may be accessed using the code memory type specifier. This keyword does not exist in the C166 tool chain thus the reason for the error.

  • HI there

    I surely seen that it is C51 project. I know nothing about its C code and have no Keil C51.

    I want to know: what should I write in this line to make it works with C166

    Sorry if this question is stupid - I moderate new in C166 too :)

  • Write:

    checksum = calc_checksum( (unsigned char *)0, 0x4000);
    

    Or if removing the code keyword from all places it might appear is too tedious for you:

    #define code
    

    Sauli

  • Hi again!

    It surely compiles. But I have found another pdf - apnt_142.pdf. The example program calculates the checksum of the NCODE memory class.

    #include <stdio.h> /* standard I/O .h-file */
    #include <reg167.h> /* special function register C167 */
    #include <srom.h> /* handling for SECTIONS and CLASSES */
    CLASS_INFO (NCODE) // get class info for NCODE class
    
    /*
    * Calculate Check Sum of NCODE memory class
    */
    
    static unsigned char chksum_ncode (void) {
    unsigned char huge *s;
    unsigned long l;
    unsigned char chksum;
    chksum = 0;
    
    s = CLASS_START (NCODE); // get start address of NCODE class
    l = CLASS_LEN (NCODE); // get length of NCODE class
    
    while (l)
    {
      chksum += *s++;
      l--;
    }
    
    return (chksum);
    
    }
    

    How do you think is it better to use this one or calculate checksum of ALL FLASH size (512 Kb)?

  • "is it better to use this one or calculate checksum of ALL FLASH "

    There is no answer to that.

    There is no such thing as "better" here - it's just a question of what you need to do!

    First, you need to clearly define your Requirement - then you can think about how to meet that requirement.

    Without knowing precisely what the Requirement is, it is impossible to say what is the "best" way to meet it!! :-0

  • HI Andy !

    I just need to check if programm codes in flash was not changed. I have found 2 examples - with all flash checksum (with trash) and only code section checksum (more compact). So I just ask what should I prefer. I have no precise Requirement.

    I have no experience in checksum calculation so I ask your opinion. My be someon can post ITS working example for 166. It will be nice :)