Jump to content

joli

EstablishedMember
  • Content Count

    87
  • Joined

  • Last visited

Community Reputation

0 Neutral

About joli

  • Rank
    Regular

Profile Information

  • Gender
    Male
  • Location
    Portugal

Recent Profile Visitors

916 profile views
  1. What's new about 8.01 version besides being free ? I have boostc++ pro licence.
  2. Delayed reply, even thus maybe helpfull for others As Reynard said, why not... #include <system.h> // zero at the end, to end of string detection rom char *test_txt = "\n\rMatrix Controller Test mode\n\r\0"; void puts( rom char* c ) { for( unsigned char i=0;;i++ ) { while( !txsta.TRMT ) clear_wdt(); if( c[i] != 0 ) { txreg = c[i]; } else break; } } void main( void ) { puts( test_txt ); while(1); } regards
  3. Answering to my self. Its working now. Under mplabx the libraries should be added to the project through Project Properties and add it to BoostLink / Additional options. By the way, the compiler/linker finish the job in about 3 minutes > 72 module_files / 273 functions - 4 core, i7, 2.8GHZ, 16gb_ram The compiler takes 30 seconds. The rest of the time is spent by the linker (2.5 minutes)... It would be great if linker could be improved.
  4. #include <system.h> typedef unsigned char uchar; void main() { uchar j=20; uchar i = (j/10); } Compiling the little snipet above under mplabx, it return errors like this: Error: Unresolved external function:'__div_8_8(unsigned char,unsigned char)' depending of the evaluated expression the error could be: Error: Unresolved external function:'__div_16_16(unsigned char,unsigned char)' Surprinsingly, the same not happens to 16/32 bit multiplications. The solution is to include libc.pic16.lib or libc.pic18.lib, depending the pic family we are using. This could be done, under mplabx/File/Project Properties. Now in the Project Properties Window, select Libraries and Add Library/Object File, choose <libc.pic1x.lib> and thats it. Alternately, it can be done following the procedure above but picking Linker instead Libraries and add <libc.pic1x.lib> in the Additional Options. P.S. the same procedure works with floats.
  5. Is there any trick for float lib to work with mplab x? The code below compiles ok in sourceboost editor but not in mplabx. #include <system.h> #include <float.h> void main() { float f = float32_mul(2.5, 2.5); } Here is some errors when compiling this code in mplabx ide: Error: Unresolved external function:'__mul_32_32(unsigned long,unsigned long)' ... same error above repeated n times ! Error: Unresolved external symbol, function:__mul_32_32 ... same error above repeated n times ! make[2]: *** [dist/default/production/float.X.production.hex] Error -2 make[1]: *** [.build-conf] Error 2 make: *** [.build-impl] Error 2 BUILD FAILED (exit value 2, total time: 5s) float.pic18.lib was included as explained in the FoatMath.pdf page 9 PIC18LF67K40 / c++ pro licence / sourceboost 4.43 / mplab x 4.15
  6. Hi there, As far as I can see, J94 types are not supported and I have no idea if the compiler will continue to be upgraded or not. The 18(l)fxxk40 types, they are supported, but the header files are incomplete, so i wrote a simple tool to generate them from the "inc" files included in the mplabx/v4.10/mpasmx. I can put them here if the owners of sourceboost allow me to... i have no idea about legal stuff. Optionally it can be done by modifying the files provided by microchip, using an editor with macros in order to turn the job less painfull... for instance, p18lf67k40 has about 6700 lines. regards
  7. try this out instead of your #pragma's: // FUSES #pragma config OSC = INTOSCPLL // Internal osc PLL can be enable/disable #pragma config CP0 = OFF // Program memory is unprotected #pragma config FCMEN = ON // Enable osc monitor #pragma config WDTEN = OFF // Watchdog OFF #pragma config WDTPS = 512 // 1:512 #pragma config XINST = OFF // Disable extended instruction set (mandatory) #pragma config IOL1WAY = OFF // works either way
  8. There is a clean crc16 code, based in the example given in the sourceboost / examples, to all that needs it The code is working pretty well in a real app that uses several industrial modbus devices. // crc16 table hi/lo rom char *aucCRCHi = { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 }; rom char *aucCRCLo = { 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 }; uint CRC16( uchar *pucFrame, uchar usLen ) { uchar ucCRCHi = 0xFF; uchar ucCRCLo = 0xFF; uint iIndex; while( usLen-- ) { iIndex = ucCRCLo ^ *( pucFrame++ ); ucCRCLo = (uchar)( ucCRCHi ^ (uchar)aucCRCHi[iIndex] ); ucCRCHi = (uchar)aucCRCLo[iIndex]; } return (uint)( ucCRCHi << 8 | ucCRCLo ); } br
  9. I did an atempt to use this in a real application by using several lists of structures but the compiler boostc/bostc++, failed. After several tests i concluded that the compiler do doesn't like to have "methodes" inside of the structure. So, until better oppinion, i believe that this is a compiler issue. Modifications: 1. delete AddStudent( uchar *pstudent ) "methode" inside of structure. 2. instead of StuList.AddStudent( adata ), StuList.s_id = data[0] and StuList.s_age = data[1] should be used. br
  10. Same here with xp, vista, w7, w10. I remember that this worked in previous versions, 6.97 for instance. br
  11. ANDYp, looking at datasheet, timer 1 section, i can't see how to achieve 20 minutes with timer 1 interrupt... lets see: clock = 4000000 Hz maximum prescaler = 8 maximum timer 1 count = 65536 t1_tick = 1 ( 4000000 / 4 / 8 / 65536 ) = 0.524288 secs But it can be used by polling the timer 1 interrupt flag and count the number of times that the TMR1IF rises. To achieve 20 mins the number of counts is 20*60/ t1_tick = 2288 Then you can call your function to change state or whatever you want timer 1 interrupt isn't need, polling pir1.TMR1IF is enough. write a function to do it and call this function from main. If my math is right it should work pretty well br
  12. im glad you got it working. about Dave and Pavel, i see no activity from him in here for a long time. but company keep selling cause i brought a boostc++ pro weeks ago i don't know what that absence means, i just know that in my oppinion they have a great product with a very competitive price br
  13. Forgot to mention the basis of it is on boostc++ manual page 83. br
  14. With just the code fragment you show is not possible to comment. http://www.microchip.com/forums/m816748.aspx http://ww1.microchip.com/downloads/en/AppNotes/00000734C.pdf br
  15. Another way to do the same with less code on set/clear output, imagining that the Green output is a led with cathode connected to the ground This is also faster than previous example because just one instruction is needed to change the output state #include <system.h> #define GREEN 1 // Green pin gpio = (1<<GREEN); // precondition(HI) when triso.1 = 0 (as output) trisio = ~(1<<GREEN); // all pins = inputs except for GREEN pin = output // macro #define SET_GREEN_HI ( trisio &= ~(1<<GREEN)) // <=> trisio.GREEN=0 #define SET_GREEN_LO ( trisio |= (1<<GREEN)) // <=> trisio.GREEN=1 void main( void ) { SET_GREEN_HI; // turn Green out = high SET_GREEN_LO; // turn Green out = low } reedited: Forgot to mention that this issue only happens when u want to modify one or more port pin state(not the entire port). This means if u write the entire port, mirror is not needed, but as a rule for devices without latx i use to write everything through the mirror. hope this helps, br
×
×
  • Create New...