Jump to content


  • Content count

  • Joined

  • Last visited

Everything posted by jartim

  1. jartim

    Compiler hangs with in-line assembly

    Hi Pavel You are 100% correct, I was changing the coding from assembler to C and wasn't concentrating! Please disregard my original post. Regards Tim
  2. Bug description: Compiler hangs indefinitely with the following source - Steps to reproduce: This file is "TClass.hpp" - unsigned char ReadFlash(unsigned int FlashAddr) { asm { _tblptru = 0 _tblptrh = _FlashAddr _tblptrl = _FlashAddr+1 tblrd* } return tablat; } Expected behaviour: This should compile with no errors Is the problem 100% reproduceable: 100% every time IDE version: MPLAB-X V4.20 Compiler: BoostC++ Compiler version: V7.43 Target device: PIC18F8527 OS: Win 7 Comments: Compiles if the three lines relating to _tblptrx are commented out.
  3. Bug description: Compiler generates incorrect code from mixed C++ and inline assembler - Steps to reproduce: The following is a sample section of code that generates the wrong address for _TestTemp+1 - void CPUTest() { unsigned char TestTemp[3]; asm { CPUTest_9: movlw 0xff ; set up locations ready to change movwf _TestTemp movwf _TestTemp+1 movwf _TestTemp+2 lfsr 0, _TestTemp+1 ; set up a pointer movlw 0x55 movwf _postdec0 } } Expected behaviour: In my application TestTemp[0] is located at 0x5C2, TestTemp[1] and [2] are at 0x5C3 and 0x5C4 respectively. The compiler should load fsr0 with the value 0x5C3 (_TestTemp+1), however the final generated code loads the value 0x5C2 instead. Is the problem 100% reproducible: 100% happens every time IDE version: MPLAB-X V4.20 Compiler: BoostC++ Compiler version: V7.43 Target device: PIC18F8527 OS: Win7 Comments:
  4. Hi Jorge No, not yet, I will do this today. I assumed that the forum was the first place to go to report an issue? Regards Tim
  5. jartim

    Incorrect code generated

    Thanks Pavel. Unfortunately the Chameleon compiler does not support C++ (does it?) Regards Tim
  6. jartim

    Incorrect code generated

    Bug description: The compiler generates incorrect code for the following statement - while (c -= 1) Steps to reproduce: My source code is this - #define BSIZE 120 unsigned char RxBuffer[BSIZE]@0x100; unsigned char TxBuffer[BSIZE]@0x200; unsigned char RamSwapArea[16U]@0x300; void main() { asm lfsr 1, _RxBuffer asm lfsr 2, _TxBuffer unsigned char c = BSIZE; while (c -= 1) { asm movff _postinc1, _postinc2 } } The bug is the statement "while (c -= 1)" generates an INFSNZ instruction, even though variable c is being decremented. Here is the disassembly listing - 13: #define BSIZE 120 14: unsigned char RxBuffer[BSIZE]@0x100; 15: unsigned char TxBuffer[BSIZE]@0x200; 16: unsigned char RamSwapArea[16U]@0x300; 17: 18: void main() 19: { 20: asm lfsr 1, _RxBuffer 0008 EE11 LFSR 1, 0x100 000A F000 NOP 21: asm lfsr 2, _TxBuffer 000C EE22 LFSR 2, 0x200 000E F000 NOP 22: 23: unsigned char c = BSIZE; 0010 0E78 MOVLW 0x78 0012 6E01 MOVWF c, ACCESS 24: while (c -= 1U) 0014 4A01 INFSNZ c, F, ACCESS 001C D7FB BRA 0x14 25: { 26: asm movff _postinc1, _postinc2 0018 CFE6 MOVFF POSTINC1, POSTINC2 001A FFDE NOP 27: } 28: } 0016 0012 RETURN 0 Expected behaviour: The instruction at address 0014 should be 'DCFSNZ c, F, ACCESS Is the problem 100% reproduceable: 100% every time IDE version: MPLAB-X 4.15 (64-bit) Compiler: BoostC++ Optimizing C++ Compiler Version 7.43 (for PIC18 architecture) Compiler version: V7.43 Target device: PIC18F8527 OS: Windows 10 Pro 64-bit Comments: Have included the source files - main.cpp
  7. Thanks Pavel, that was the problem. Cannot believe I missed it, it was a long day. Rgds Tim
  8. Hi, Does anyone have any insight into how to access a function parameter from in-line assembler? I am doing the following - void type24Var::add(const unsigned long src) { asm { movf _src, W } } But this will not compile and I get the message - failure type24Var.cpp(68:2): error: error in built-in assembly make[2]: [build/default/production/type24Var.o] Error 1 (ignored) It's driving me crazy, nothing I do seems to clear the error!
  9. jartim

    Unrecognised type ID

    Hi guys, I'm getting this message when I build my project - Coff generation: Internal Warning: Member Var:currentCrcRomPtr Unrecognised type id:0xF000000F Coff generation: Internal Warning: Member Var:currentCrcRomPtr Unrecognised type id:0xF000000F Coff generation: Internal Warning: Member Var:currentCrcRomPtr Unrecognised type id:0xF000000F Coff generation: Internal Warning: Member Var:currentCrcRomPtr Unrecognised type id:0xF000000F Coff generation: Internal Warning: Member Var:currentCrcRomPtr Unrecognised type id:0xF000000F Coff generation: Internal Warning: Member Var:currentCrcRomPtr Unrecognised type id:0xF000000F Coff generation: Internal Warning: Member Var:currentCrcRomPtr Unrecognised type id:0xF000000F It doesn't appear to be causing any issues, however the compiler reports a warning so I expect there is something odd going on. Any ideas? (Compiler = BoostC++ V7.42) Regards Tim Jarrett
  10. Thanks Jorge, pretty much what I had decided to do as well. It just would be easier to have the compiler and linker do all the work for me, rather than have to build the code twice. Regards Tim
  11. Hi guys, Is there any easy way of identifying the last used address in rom using BoostC or BoostC++ compilers? I cannot find a linker control file to add a label, is there any way to guarantee that a label defined in the source code ends up as the last addressed object? Thanks Tim
  12. Hi Jorge All I'm trying to do is calculate a CRC checksum for the ROM, starting at 0x0000 and ending at the last used address of my program, hence I need to know the last address used. I can't CRC the entire ROM because I will be using the top end for non-volatile storage, and for that I also need to know the last used address. Normally I would edit the linker control file and add a label after the used code section, but this compiler doesn't appear to use a control file, I guess it has the parameters hard-coded in. All I can do at the moment is build the code with a 0x0000 address coded in as a rom char* pair, look at the code statistics after the build process, copy the size of the code in to the rom char* and then re-build. It would be safer and easier to have the compiler and linker do it automatically. Regards Tim
  13. Another request, not much luck with enhancements so far but worth a punt... Please can you add support for friend functions for classes? Thanks.
  14. A long shot I know, but what are the chances of the source code being moved to an open-source licence? That way maybe there could be more third-party improvements and bug fixes etc. Just a thought. (I would certainly be interested in adding new features, i.e. 12-bit support, true template support, overloaded constructor support etc.) Regards Tim
  15. Please can you add support for the 12-bit baseline devices to BoostC and BoostC++? Some of these have relatively large FLASH and register memories but have a 12-bit instruction-width core, which the current compiler doesn't support! Regards Tim Jarrett
  16. Pavel, I don't think this is correct? I'm using MPLAB-X and I've added a new header for a PIC16F570 device and modified the MPLAB jar files to allow me to use SourceBoost with that device (it doesn't by default). I haven't created a .tdf file for the same device because I don't use the SourceBoost IDE, but when I try to build under MPLAB-X, I get this message - main.cpp error: could not open input file 'C:\Program Files (x86)\SourceBoost\config\PIC16F570.tdf' So it appears as though the build process needs the .tdf file as part of the build as well (this is using the C++ compiler under MPLAB-X). I will have a go at creating one for my new device. If it's successful, is there somewhere I can post it on the forum to make it available to other users? [EDIT] Pavel, is there a full list of the options that can be used in the .tdf file entries? I found a .txt file in the config folder that partly explains the .tdf file format, but it does not give a complete list of all the possible options? Rgds Tim
  17. Guys, No disrespect, but why would I want to use the Chameleon compiler instead of the BoostC compiler, especially as it is only 95% back-compatible? Does the Chameleon compiler give any better performance, smaller object code, better optimisation etc? Many thanks. Tim Jarrett
  18. Thanks Pavel. Will you be doing a similar exercise with an alternative to the BoostC++ compiler as well, or does Chameleon already support C++? Thanks Rgds. Tim
  19. Ok, found the problem. I had a member function and a member variable in one class, both with the same name, and that caused the compiler to fall over. Changed one of them and everything is compiling again.
  20. My build keeps crashing with the following error code, any ideas what this code means, please? make[2]: [build/default/production/PortClass.o] Error -1073740777 (ignored) Windows reports that the program has stopped responding when this happens, so my guess is that this is an internal compiler error?
  21. jartim

    Can't register the licence?

    Hey Chris - I purchased the BoostC++ compiler a couple of months ago, and received the licence information from SWReg as you did. But, before I had chance to enter the licence, I received an email from Pavel with a different licence key to use instead. I got the impression from other posts on the forum that they had had problems with the licence server and were emailing the keys out manually. Not sure if this still applies or applies in your case, but worth an email to "support" ? Rgds Tim
  22. Hi Jorge I agree, the coding looks a bit odd as it stands; it wasn't meant to be an example of how to do it, rather an example of a possible way the compiler could implement a solution. The syntax looks strange, but it's not breaking any of the compiler's rules or the C++ language rules. Having two structure members at non-consecutive addresses is quite acceptable, in fact many C-compilers do just by adding padding bytes between members when the target processor requires each member to be aligned on 16 or 32-bit boundaries. My suggestion just tries to force the alignment rather than assume that the compiler will do it (it probably won't). As for the compiler not accepting a variable as a bit index, you're correct, but as you said - so I cannot see any reason why the compiler could not be modified to do this. Rgds Tim
  23. Hi, not really a request for an enhancement to the compiler, but it would be really nice if you would occasionally post on the forum what developments / improvements / bug fixes etc you are currently planning and/or working on for the Boost compilers. IMHO the forum is pretty quiet and it's not filling me with confidence that this product is being actively developed or supported. I'm having a difficult time convincing my client that this is the compiler for their project development, any information posted would help give your current and potential future users and customers a bit of a moral boost (no pun intended ).
  24. Please can you add support for private, public and protected class members? I know the compiler accepts these at present, but it doesn't honour them.
  25. What would be useful would be a construct like this - struct sMyPortStruct { volatile unsigned char BasePortA @0x05; volatile unsigned char BasePortC @0x07; } MyPortStruct; for (unsigned char c = 0; c!= 16; c++) { MyPortStruct.c = 1; } Although the compiler quite happily accepts this syntax, it ignores the fixed addresses and assigns the structure members to consecutive registers in RAM instead, so this doesn't work. Also it would need some additional code inserted by the compiler to make sure you're addressing the correct member port. I suspect this could be done in C++, but there's no way to overload the '.' operator (overloaded operators aren't supported )