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

BL51 says: FATAL ERROR L213 I/O ERROR ON WORK FILE

The full message generated after the compilations
are all done, and BL51 starts. It is:
*** FATAL ERROR L213 I/O ERROR ON WORK FILE: EXCEPTION 0029H: ACCESS TO FILE DENIED
Target Not Created

I verified that the temporary file directories are
all valid, writeable, empty, etc. and that the
environment variables point to them.
The error occurs when the target directory
for the output is empty of any files except .uv2 files.
Reinstalls have no curative effect.

I still get this message.
It affects BL51 v6.02, from the
compiler version 8.05;
also BL51 5.11 from compiler version 7.20

BL51 for version 6.10 works.
LX51 for version 8.05a works; unfortunately I have
customers that need to use BL51.
I have full support, theoretically, but Brian Clough
of Plano TX has basically given up.

  • Ray sorry, but I do not fully understand:

    you say BL51 for version 6.10 works. Do you mean by that that an older version works OK?

  • Yes, the older version works fine. I have three versions installed in order to test compatibility of semiconductor demo code with various Keil compilers: 6.10, 7.20 and 8.05a

  • sounds like a "default change" I got badly burnt on that some time ago.

    Try getting rid of all defaults (specify everything - no assumptions) and get rid of all wildcards to see what happens.

    Erik

  • Brian Clough, of Keil support in Plato TX sent
    me an experimental version to isolate the problem.
    Thank-you, Brian!

    I tried it out, and there is now more information:
    *** Fatal Error L213: I/O ERROR ON WORK FILE EXCEPTION 0029H: ACCESS TO FILE DENIED FILE: C:\FSI\TEMP\$$L51$$$.TMP

    Of course, there is no folder C:\FSI\TEMP
    When I created it, everything worked fine.
    What is this folder, anyway?
    Shouldn't it use my temp directory?
    (clearly a much lower-priority issue)

  • The path to this folder is defined with the Environment Variable TEMP. Please see:
    http://www.keil.com/support/docs/2972.htm

  • How was your TEMP Environment Variable set?
    Did it have any spaces in it...?

    Do the initials "FSI" mean anything to you?

  • Initially: "The full message generated after the compilations
    are all done, and BL51 starts. It is:
    *** FATAL ERROR L213 I/O ERROR ON WORK FILE: EXCEPTION 0029H: ACCESS TO FILE DENIED
    Target Not Created"

    Now, "Keil support in Plato TX sent me an experimental version to isolate the problem ... I tried it out, and there is now more information:
    *** Fatal Error L213: I/O ERROR ON WORK FILE EXCEPTION 0029H: ACCESS TO FILE DENIED FILE: C:\FSI\TEMP\$$L51$$$.TMP"

    It would have been far more helpful if the message had included the full file details in the first place, wouldn't it?

    Error messages should never complain about problems with "a file" without stating explicitly which file it concerns!

  • Brian Clough made a wonderful diagnostic suggestion:

    "Hello Ray,

    Can you do the following?

    From a command prompt, type:
    SET >xx.txt

    and send the xx.txt file."

    This showed a -bunch- of environment variables that were not being defined in the computer->advanced->environment variable dialogue box of Win 2000. I double checked.

    Oddly, many of them referred to the nonexistent
    folder C:\FSI\TEMP ...

    Since I used to set up DOS systems, I instantly figured that they might be in autoexec.bat.

    And, they were.

    Apparently BL51 uses a hierarchy of environment variables for its temp files. Maybe so that a more precisely-named environment variable can control its behavior exactly? Anyway, it's definitely undocumented behavior. Reinhard Keil might know, but perhaps forgot to mention it (see above comment by him).

    The exact problem was not the TEMP environment variables (which were correct), but some -other- environment variables set by autoexec.bat (where, of course, they were not visible to the computer->advanced->environment variable dialogue box of Win 2000) My autoexec.bat said:

    SET A51INC=C:\FSI\INC
    SET A51TMP=C:\FSI\TEMP
    SET C51INC=C:\FSI\INC
    SET C51LIB=C:\FSI\LIB
    SET C51TMP=C:\FSI\TEMP
    SET AXAINC=C:\FSI\INC
    SET AXATMP=C:\FSI\TEMP
    SET CXAINC=C:\FSI\INC
    SET CXALIB=C:\FSI\LIB
    SET CXATMP=C:\FSI\TEMP

    When this bad stuff was deleted from autoexec.bat, BL51 started working again.

  • The Keil tools stopped mucking about with autoexec.bat a long time ago. However, there are other tool vendors that still follow this practice. And, some of them use the same environment variable names as the Keil tools.

    The following manual page describes the settings the Keil tools use:

    http://www.keil.com/support/man/docs/c51/c51_cm_envvars.htm

    Jon

  • "other tool vendors ... still follow this practice"

    And "A51" isn't a unique name just for Keil's '51 assembler...

    Hence the earlier question whether the initials "FSI" mean anything to the OP?