Hi Richard,

> - interrupt tables not correctly initialized
> - missing volatile qualifier in variables shared between task and interrupt
>  context.

I'm don't use an interrupt handlers. I do polling for the interrupt flags in a main loop.

> - use a GPIO and a logic analyzer to output serialized data at certain
checkmarks to see whether the program works correctly.

It did not helps, because a problem is somewhere  deeped. E.g. in this code:

static BOOL ep0_std_descriptor_proc(void)
{
    BYTE XDATA *pdesc =
            (BYTE XDATA *)hid_ep0_std_desc_get();
    if (pdesc) {
        SUDPTRH = usb_word_msb_get(pdesc);
        SUDPTRL = usb_word_lsb_get(pdesc);
        return TRUE;
    }

    return FALSE;
}

something wrong with SUDPTRH && SUDPTRL features. It is a HW features of this chip which transfer the content of a "standard" descriptors to the HOST automatically. I.e. enough to set an address of a descriptor structure to the  SUDPTRH and SUDPTRL registers.

> If you want to show-case multi-toolchain development with Qbs, why 8051?

Why not? Look to Aliexpress how much this chip costs (also many Logic Analyzers based on this chip). :) This is a very good chip && architecture.

> Why should anybody invest time in using Qbs on 8051?

Are you know that a many modern chips based on 8051 architecture? Look on TI, Cypress and etc. This architecture is more simple than ARM, the ARM it not a panacea to all.

PS: Besides, that my project on GitHub contains also and two branches for the ARM archs (stm32f4 && stm32f103). But there are a problem is that we can't use a HAL to provide it as QBS example (due to licensing and etc). So, in that case, need to refactor that projects and get rid of HAL before submitting it to QBS example.

Summary: I have created this topic in hope that someone used IAR for this chip... So, maybe I can get a minimal valid example... :) If NOT - it is not a problem.


BR,

Denis


19.10.2019 0:02, Richard Weickelt пишет:
Hi,

Currently it does work with Keil C51 compiler && SDCC compiler. But, it does> 
not work with an IAR 8051 compiler.
I guess you do not have JTAG access to this device and can step-debug. But
it looks like you have GPIOs that you could access with a logic analyzer.

I don't know why, but the USB enumeration fails, the OS can't fetch the USB
descriptors from the FW. e.g. at attempt to fetch the USB "Device
Descriptor", the OS receives a zero data.
I haven't reviewed Your code, but here are some ideas:
- interrupt tables not correctly initialized
- missing volatile qualifier in variables shared between task and interrupt
context. This is a common mistake, especially when one side uses this
variable in a loop (task waiting for a flag) and never observes a change
because the variable value is kept in a register.

Maybe, someone can help me? Because I have not ideas why it does not work
with IAR.
Possible strategies when you cannot debug with JTAG:
- use a GPIO and a logic analyzer to output serialized data at certain
checkmarks to see whether the program works correctly.
- decompose your application, make sure that the peripherals are working one
after another

PS: A google has not any mention or example at using this chip && IAR compiler.
And that makes me wonder if you are the only person on the planet trying to
do this. This looks like a hobby project. Is IAR even used among hobbyists?

If you want to show-case multi-toolchain development with Qbs, why 8051? I
doubt that any company uses 8051 for new projects. At least, companies would
build upon a large legacy codebase and infrastructure (we have done this for
30 years...) . Why should anybody invest time in using Qbs on 8051?

However, your project looks exotic enough to be fun :)

Richard
_______________________________________________
Qbs mailing list
[email protected]
https://lists.qt-project.org/listinfo/qbs
_______________________________________________
Qbs mailing list
[email protected]
https://lists.qt-project.org/listinfo/qbs

Reply via email to