CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Implementing a simple bootloader
Goto page 1, 2  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
allenhuffman



Joined: 17 Jun 2019
Posts: 552
Location: Des Moines, Iowa, USA

View user's profile Send private message Visit poster's website

Implementing a simple bootloader
PostPosted: Fri Nov 01, 2019 3:23 pm     Reply with quote

My system does not have ex_bootload.c/ex_bootloader.c in the Examples folder, so maybe those answer some questions I am about to ask.

I am toying with implementing a very simple bootloader for disaster recovery. The goal is to have the system always start with the bootloader code, then it will decide to jump to an APPLICATION in memory, or accept an upload of new firmware to whatever address I load it to.

BOOTLOADER will be simple and not use interrupts. It will probably implement Traps.c to catch all bad exceptions (division by zero, etc.) so we can detect and recover from that.

I see I can use #BUILD and #ORG to move things around, so it appears I would need to have the RESET vector stay normal, pointing to bootloader code. Since the application code will want interrupts, I see how I can alter the BOOTLOADER's vector table so they point omewhere else (where no code exists). Then I can use #BUILD to make the APPLICATION's ISR/vector table stuff live there in the HEX file.

I'll post a diagram of what I envision next week.

It looks pretty straight forward and simple. Any gotchas I should be aware of?
_________________
Allen C. Huffman, Sub-Etha Software (est. 1990) http://www.subethasoftware.com
Embedded C, Arduino, MSP430, ESP8266/32, BASIC Stamp and PIC24 programmer.
http://www.whywouldyouwanttodothat.com ?
temtronic



Joined: 01 Jul 2010
Posts: 9225
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Fri Nov 01, 2019 5:04 pm     Reply with quote

You must have a really old compiler as mine has them, dated 2005.
if you ask CCS, they may send them to you. A few years ago I asked for the current 'examples' folder and within minutes they sent them to me.
Jay
Ttelmah



Joined: 11 Mar 2010
Posts: 19504

View user's profile Send private message

PostPosted: Sun Nov 03, 2019 3:00 am     Reply with quote

I've just done a search back, and even the V3 compilers have these
examples. Back to 2003 (gave up at this point). The examples as a whole
are a critical part of the documentation of the compiler. Re-install if they
are missing (the install includes them).
A lot depends on what chip is involved?. I'm significantly 'puzzled', since you
are posting questions on other threads which seem to involve PCD. This
wasn't even launched till well after these examples existed.
What chip are you actually trying to use, and what compiler version do you
have?. This also affects some of the answers you have already been given,
since some of the very early compilers do not do some of the things that
are 'assumed' on later versions.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Nov 03, 2019 3:50 am     Reply with quote

If the examples are missing, it could be that:

1. He's using the CCS demo and not telling us. CCS says the demo only
has 15% of the available examples and drivers.
http://www.ccsinfo.com/ccsfreedemo.php

2. His IT department has doctored his installation and removed the examples.

I favor number 1.
allenhuffman



Joined: 17 Jun 2019
Posts: 552
Location: Des Moines, Iowa, USA

View user's profile Send private message Visit poster's website

PostPosted: Mon Nov 04, 2019 8:24 am     Reply with quote

PCM programmer wrote:
If the examples are missing, it could be that:

1. He's using the CCS demo and not telling us. CCS says the demo only
has 15% of the available examples and drivers.
http://www.ccsinfo.com/ccsfreedemo.php

2. His IT department has doctored his installation and removed the examples.

I favor number 1.


I show IDE 5.087 and PCD 5.082. Our release is locked to an older release of the compiler.

I have an Examples folder with plenty of files, but not those two.

But I don't think I need the examples since this looks really simple to implement with the PIC architecture. It took maybe 10 minutes to get a proof-of-concept going with some code at the start that fires up first, then jumps to a second block of code we can load separately. The only thing I had to look into was redirecting the vector table. I now have a GOTO to a GOTO, but it works.
_________________
Allen C. Huffman, Sub-Etha Software (est. 1990) http://www.subethasoftware.com
Embedded C, Arduino, MSP430, ESP8266/32, BASIC Stamp and PIC24 programmer.
http://www.whywouldyouwanttodothat.com ?
Ttelmah



Joined: 11 Mar 2010
Posts: 19504

View user's profile Send private message

PostPosted: Mon Nov 04, 2019 10:42 am     Reply with quote

Seriously you should investigate what examples are mising.
You version does have those examples. If re-iinstalling does not add them,
ask CCS for them.
Things that are in the compiler which you need the examples to see
are functions like 'jump_to_isr' which is needed for ISR relocation, and
how to handle the runtime version relocation.
Get the examples.
allenhuffman



Joined: 17 Jun 2019
Posts: 552
Location: Des Moines, Iowa, USA

View user's profile Send private message Visit poster's website

PostPosted: Mon Nov 04, 2019 3:32 pm     Reply with quote

Ttelmah wrote:
Seriously you should investigate what examples are mising.
You version does have those examples. If re-iinstalling does not add them,
ask CCS for them.
Things that are in the compiler which you need the examples to see
are functions like 'jump_to_isr' which is needed for ISR relocation, and
how to handle the runtime version relocation.
Get the examples.


Most certainly. I've already contacted them, but I check the forums first. I think one of the issues is folks that have been using it for awhile may not be aware of the state of a "fresh install" these days. Broken links in the help file (missing files) and such.

I'd found jump_to_isr() in other examples and posts here, which I hope to use to replace my inline assembly code.
_________________
Allen C. Huffman, Sub-Etha Software (est. 1990) http://www.subethasoftware.com
Embedded C, Arduino, MSP430, ESP8266/32, BASIC Stamp and PIC24 programmer.
http://www.whywouldyouwanttodothat.com ?
allenhuffman



Joined: 17 Jun 2019
Posts: 552
Location: Des Moines, Iowa, USA

View user's profile Send private message Visit poster's website

PostPosted: Mon Nov 04, 2019 4:06 pm     Reply with quote

They got me the missing files already. Nice. (The sent me four files.)

Very straight forward (not much in them) -- I'd already figured out #org and #build like they use, and had located jump_to_isr(int16 address). I was having compile issues and hoped their examples would shed some light, but it's the same...

For example...

Code:
#define LOADER_END 0x4ff
. . .
#int_global
void isr(void) {
   jump_to_isr(LOADER_END+5*(getenv("BITS_PER_INSTRUCTION")/8));
}


Trying to build for 24EP256GP202 (just an old board I have handy) does not like #INT_GLOBAL ("Invalid Pre-Processor Directive") and can't build the jump_to_isr() line ("A numeric expression must appear here").

Actually, even trying to just get...

jump_to_isr (0x2000);

...won't compile. Sometimes the compiler gets in a mood where things won't resolve (like earlier issues I had with pointers -- the code would build, unless I moved it down a few dozen lines then it gave compiler errors).

I'm guessing this is just another one of those. This is a fresh test project with pretty much everything removed beyond some defines (to calculate the ORG/BUILD/etc.) and a while(1) in main.

Whac-whac-whac ;-)
_________________
Allen C. Huffman, Sub-Etha Software (est. 1990) http://www.subethasoftware.com
Embedded C, Arduino, MSP430, ESP8266/32, BASIC Stamp and PIC24 programmer.
http://www.whywouldyouwanttodothat.com ?
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Mon Nov 04, 2019 4:19 pm     Reply with quote

What files are you looking at ? You should tell us. Never assume we know.

You should be looking at these files:
Quote:
EX_PCD_BOOTLOAD.C
EX_PCD_BOOTLOADER.C
allenhuffman



Joined: 17 Jun 2019
Posts: 552
Location: Des Moines, Iowa, USA

View user's profile Send private message Visit poster's website

PostPosted: Mon Nov 04, 2019 4:23 pm     Reply with quote

PCM programmer wrote:
What files are you looking at ? You should tell us. Never assume we know.

You should be looking at these files:
Quote:
EX_PCD_BOOTLOAD.C
EX_PCD_BOOTLOADER.C


Per the "Examples Program" entry in the Help file:

Quote:
EX_BOOTLOAD.C
A stand-alone application that needs to be loaded by a bootloader (see ex_bootloader.c for a bootloader).


EX_BOOTLOADER.C
A bootloader, loads an application onto the PIC (see ex_bootload.c for an application).


Support sent me those two files, including bootloader.h and loader.c

While my Examples folder contains 173 files, those seem to have been omitted from the installer.
_________________
Allen C. Huffman, Sub-Etha Software (est. 1990) http://www.subethasoftware.com
Embedded C, Arduino, MSP430, ESP8266/32, BASIC Stamp and PIC24 programmer.
http://www.whywouldyouwanttodothat.com ?
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Mon Nov 04, 2019 4:36 pm     Reply with quote

You need to ask CCS for the PCD files. Like I said, tell people what you
are doing. Tell CCS you are using a 24F PIC. Then they would have
sent you the correct files.
Ttelmah



Joined: 11 Mar 2010
Posts: 19504

View user's profile Send private message

PostPosted: Mon Nov 04, 2019 11:06 pm     Reply with quote

and, what is in my directory for every install, is what you get if you do
a 'fresh install', and all these files are included. How on earth your version
lacks them is weird, unless as PCM earlier suggested you actually
originally did a 'demo version' install.
allenhuffman



Joined: 17 Jun 2019
Posts: 552
Location: Des Moines, Iowa, USA

View user's profile Send private message Visit poster's website

PostPosted: Tue Nov 05, 2019 8:27 am     Reply with quote

PCM programmer wrote:
You need to ask CCS for the PCD files. Like I said, tell people what you
are doing. Tell CCS you are using a 24F PIC. Then they would have
sent you the correct files.


Yes, they sent me four files. I'm now waiting to see if they can figure out the compiler issue.
_________________
Allen C. Huffman, Sub-Etha Software (est. 1990) http://www.subethasoftware.com
Embedded C, Arduino, MSP430, ESP8266/32, BASIC Stamp and PIC24 programmer.
http://www.whywouldyouwanttodothat.com ?


Last edited by allenhuffman on Tue Nov 05, 2019 8:33 am; edited 1 time in total
allenhuffman



Joined: 17 Jun 2019
Posts: 552
Location: Des Moines, Iowa, USA

View user's profile Send private message Visit poster's website

PostPosted: Tue Nov 05, 2019 8:28 am     Reply with quote

Ttelmah wrote:
and, what is in my directory for every install, is what you get if you do
a 'fresh install', and all these files are included. How on earth your version
lacks them is weird, unless as PCM earlier suggested you actually
originally did a 'demo version' install.


I certainly had plenty of Examples there... just not the one I was looking for Smile
_________________
Allen C. Huffman, Sub-Etha Software (est. 1990) http://www.subethasoftware.com
Embedded C, Arduino, MSP430, ESP8266/32, BASIC Stamp and PIC24 programmer.
http://www.whywouldyouwanttodothat.com ?
Ttelmah



Joined: 11 Mar 2010
Posts: 19504

View user's profile Send private message

PostPosted: Tue Nov 05, 2019 8:56 am     Reply with quote

Did you actually try a re-install?.
This is the list of files that should be there:
Quote:

ex_14kad.c
ex_1920.c ex_23s17.c
ex_8pin.c ex_92lcd.c
ex_ad12.c ex_adc_epgs.c
ex_admm.c ex_admm10.c
ex_admm_sleep.c ex_admm_stats.c
ex_bootload.c ex_bootloader.c
ex_bootloader_to_i2c.c ex_can.c
ex_can_ccs_a.c ex_can_ccs_b.c
ex_capture.c ex_ccp1s.c
ex_ccpmp.c ex_center_aligned_pwm.c
ex_checksum.c ex_cni.c
ex_comp.c EX_CRC.C
EX_CRC_HW.C EX_CUST.C
ex_dbgmon.c ex_dma_adc.c
ex_dma_pingpong.c ex_dma_uart_rx.c
ex_dmx_controller.c ex_dmx_slave.c
ex_dnslookup.c ex_dpot.c
ex_dtmf.c ex_edge_aligned_pwm.c
ex_email.c ex_encod.c
ex_encry.c EX_EXPIO.C
ex_exsio.c ex_extdynmem.c
ex_extee.c ex_ezapp_backgrounds.c
ex_ezapp_buttons.c ex_ezapp_colorpicker.c
ex_ezapp_common.h ex_ezapp_dual.c
ex_ezapp_graphing.c ex_ezapp_gui.c
ex_ezapp_images.c ex_ezapp_joystick.c
ex_ezapp_pot.c ex_ezapp_security.c
ex_ezapp_strings.c ex_ezapp_style.c
ex_fat.c ex_fft.c
ex_fft_filter.c ex_fir.c
ex_fixed.c ex_float.c
ex_freqc.c ex_glcd.c
ex_glint.c ex_graph_siow.c
ex_hpint.c ex_hspwm.c
ex_humidity.c ex_i2c_ldr_application.c
ex_i2c_ldr_bootloader.c ex_i2c_master_hw_k42.c
ex_i2c_slave_k42.c ex_icd.c
ex_intee.c ex_intfl.c
ex_j1939.c ex_j1939b.c
EX_LCDKB.C ex_lcdth.c
EX_LED.C ex_linbus_master.c
ex_linbus_slave.c ex_load.c
ex_logger.c ex_lowpass_filter_adc2.c
ex_macro.c ex_malloc.c
ex_mcr.c ex_mmcsd.c
ex_modbus_master.c ex_modbus_slave.c
ex_motor_pwm.c ex_mouse.c
ex_mxram.c ex_patg.c
ex_pbusm.c ex_pbusr.c
ex_pbutt.c ex_pcd_aux_bootload.c
ex_pcd_aux_bootloader.c ex_pcd_bootload.c
ex_pcd_bootloader.c ex_pcd_checksum.c
ex_pcd_load.c ex_pcd_stwt1.c
ex_pgen.c ex_pid.c
ex_pinselect.c ex_pinselect2.c
ex_pll.c ex_power_pwm.c
ex_profile.c ex_psmc_complementary.c
ex_psmc_complex.c ex_psmc_simple.c
ex_psp.c EX_PULSE.C
EX_PWM.C ex_pwm_pcd.c
EX_PWM_USE.C EX_QSORT.C
ex_react.c ex_rfid.c
ex_rmsdb.c ex_rs232_485.c
ex_rs232_buffer.c ex_rs232_to_i2c.c
ex_rs485.c EX_RTC.C
ex_rtcc.c ex_rtclk.c
ex_rtctimer.c ex_rtos_demo_1_tasks.c
ex_rtos_demo_2_termination.c ex_rtos_demo_3_enable_disable.c
ex_rtos_demo_4_messages.c ex_rtos_demo_5_yield.c
ex_rtos_demo_6_semaphores.c ex_rtos_demo_7_await.c
ex_rtos_demo_8_statistics.c ex_rtos_demo_9_basic_kernal.c
ex_sim.c ex_sine.c
ex_sisr.c ex_sk_7seg_led.c
ex_sk_7seg_led_extracredit.c ex_sk_accelerometer.c
ex_sk_barometer.c ex_sk_gps.c
ex_sk_gps_extracredit.c ex_sk_hall_analog.c
ex_sk_hall_digital.c ex_sk_humidity.c
ex_sk_keypad.c ex_sk_keypad_extracredit.c
ex_sk_noise_detect.c ex_sk_photo_resistor.c
ex_sk_relay.c ex_sk_rgb_led.c
ex_sk_rotary_encoder.c ex_sk_rotary_encoder_isr.c
ex_sk_stepper.c ex_sk_stepper_extracredit.c
ex_sk_temp_digital.c ex_sk_temp_thermistor.c
ex_sk_touch.c ex_sk_ultrasonic.c
ex_sk_ultrasonic_ccp.c ex_sk_vibration.c
ex_slave.c ex_smt_period_duty.c
ex_smt_timer.c ex_speed.c
EX_SPI.C ex_spi_slave.c
EX_SQW.C ex_sram.c
ex_step.c ex_stisr.c
EX_STR.C ex_stwt.c
ex_stwt1.c ex_stwt2.c
ex_sync_master.c ex_sync_slave.c
EX_TANK.C EX_TEMP.C
ex_tgetc.c ex_tgetc2.c
ex_ticks.c ex_time.c
EX_TONES.C ex_touch.c
ex_usb_bootloader.c ex_usb_common.h
ex_usb_hid.c ex_usb_hid_and_cdc.c
ex_usb_kbmouse.c ex_usb_kbmouse2.c
ex_usb_keyboard.c ex_usb_keyboard_and_cdc.c
ex_usb_loadmouse.c ex_usb_multihid.c
ex_usb_multihid2.c ex_usb_scope.c
ex_usb_serial.c ex_usb_serial2.c
ex_usb_serial3.c ex_usb_to_serial.c
ex_use_capture.c ex_voice.c
EX_WAKUP.C ex_wdt.c
ex_wdt18.c ex_wdt_pcd.c
ex_websv.c ex_x10.c
ex_xtea.c ex_zmd.c

That directly pasted from the 5.078 install directory.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group