Windows CE Native Compilers

Posted by: Russ Keldorph

Hi, I’m Russ Keldorph, the dev lead for the native (ARM, MIPS, & SH-4) C++ compilers and runtime libraries for Windows CE.  I started an MSDN blog a while ago, but came to realize that I’m a terrible blogger because I just don’t have the motivation to post regularly.  I’m moving to the CE Base team blog so that I can hide amongst all these other great posters and occasionally answer a particularly nasty question to which people really ought to know the answer.

At any rate, if you’d like to know something about the compilers, libraries or something else you think I might know the answer to, feel free to respond or send me email.  My address is russellk.  I’m particularly interested in errors and omissions in our documentation.

I look forward to hearing from you!

Comments (4)

  1. ce_base says:

    Welcome to the blog, Russ!  🙂


  2. Marcelo van Kampen says:

    Hi, i’m writing an article on how to convert BSPs from windows ce 4.2 to windows ce 5 (to non pqoal, at first) and there is a doubt that cane across… Why windows Ce 5 compiler is so more restrictive about the volatile keyword? A lot of volatile keywords must be removed to make eboot routines from smc and ne2000 work in windows ce 5. Is there any compiler switch to overcome this?

    Thanks in advance, Marcelo

    marcelo.kampen AT

  3. russellk says:

    Can you be more specific about the problem(s) you are seeing?  If the compiler is issuing

       warning C4090: ‘<operator>’ : different ‘volatile’ qualifiers

    then you should add that qualifier to the target variable.  If you can’t, then see below.

    If the compiler is issuing

       warning C4197: ‘volatile LPDWORD’ : top-level volatile in cast is ignored

    then this is usually a real bug because the volatile modifier doesn’t do what most people think.  It is modifying the pointer, not the pointed-at data.  You should cast to (unsigned long volatile *) or create a new typedef like LPVDWORD that has the volatile built in and cast to that.

    In general, you should not be removing volatile qualifiers unless the data is true not volatile.  You should add the volatile qualifier to the target of the assignment.  If that’s not possible because you don’t own the code, cast away the volatileness with a C-style cast or const_cast in C++ and report the bug to the owner of the code.

  4. Marcelo van Kampen says:

    Sorry, i really forgot to tell that i was converting Lubbock PXA250 BSP from windows ce 4.2 to ce 5.

    My error message is

    warning C4197: ‘volatile PBYTE’ : top-level volatile in cast is ignored

    i know it’s a warning, but the compiler treat it as error.

    This is from the bootloader from XSC1BD (lubbock) that is distributed with Windows ce 4.2. I already did the port, except from the bootloader that was unnecessary, but as i’m writing the article i was just wondering why this goes further on 4.2 compiler and not in 5. But as you explained, might be a bug from who wrote the code.