Jump to content
Sign in to follow this  

Problem With Delays

Recommended Posts

Hi im new to the board and Ive got a question that im sure is just a simple mistake made by me. Ive only been programing in boostc for a few days and its my first go at using pic's. So far im happy with my progress and I think boostc is excellent.


My problem is that the compiler is giving me a warning regarding delays and im not sure whats its getting at about the gets function.


Here is the warning.


Caution: argument of 'delay_us' calls must have a value of 1 or more

Caution: Delay inaccurrate: 'delay_us', Delay overhead:0.01ms, Unit delay:0.001ms, Delay resolution:4 units

Warning unreferenced functions removed:

gets in: D:\Program Files\SourceBoost\include\rs232_driver.h

SignedIntOut in: D:\Documents and Settings\Admin\Desktop\Viv controler\12f675\12f675serial.c



// Device: PIC12F675 //
// Osc: 4MHz			 //
// Test serial and adc //

#include <system.h>

// Set the device configuration bits

// Tell the compiler the device clock frequency to get the correct delays generated
#pragma CLOCK_FREQ	4000000

// RAM used by the software USART driver to emulate the equivalent serial hardware registers
// Note this section is really just reserving the space. The defines in the subsequent section
// overlay these RAM locations					
unsigned short sw_SPBRG@0x47;	// define location for the emulated SSPCON1
unsigned short sw_RCREG@0x48;	// define location for the emulated SSPCON2
unsigned short sw_TXREG@0x49;	// define location for the emulated SSPSTAT
unsigned short sw_TXSTA@0x4A;	// define location for the emulated SSPBUF
unsigned short sw_RCSTA@0x4B;	// define location for the emulated SSPADD
unsigned short sw_TXIF_PIR@0x4C;// define location for the emulated TXIF_PIR1
unsigned short sw_RCIF_PIR@0x4C;// define location for the emulated RCIF_PIR1

// Sample PIC16F675 defaults for software emulated USART support
#define TX_PORT		0x05 // set to gpio reg address   <
#define TX_TRIS		0x85 // set to trisio reg address | TX set to pin3
#define TX_BIT		4	// set to gp4 -> pin3		<
#define RX_PORT		0x05 // set to gpio reg address   <
#define RX_TRIS		0x85 // set to trisio reg		 | RX set to pin4
#define RX_BIT		3	// set to gp3 -> pin4		<
#define e_SPBRG		0x99
#define e_RCREG		0x1a
#define e_TXREG		0x019
#define e_TXSTA		0x98
#define e_RCSTA		0x18
#define e_TXIF_PIR	0x0c
#define e_RCIF_PIR	0x0c
#define e_TXIF_BIT	4
#define e_RCIF_BIT	5
#define MODE		(USART_reset_wdt)

#define bit_time 104
// Include rs232 driver after setting defaults
#include "rs232_driver.h"

// Output signed integer to terminal						//
//														  //
void Int_Out(int out)
char c;

if (out < 0)
  out = -out;
if (out > 10000)
  c = out / 10000;
  out -= c * 10000;
if (out > 1000)
  c = out / 1000;
  out -= c * 1000;
if (out > 100)
  c = out / 100;
  out -= c * 100;
if (out > 10)
  c = out / 10;
  out -= c * 10;
c = out;

// start main
void main()

// Comparator module off	

// ADC module on
ansel=00010001b; // AN1 pin7 as analog input and fosc/8
adcon0=01000001b;// turn a/d on ADON

trisio=00001000b;// all outputs except gp3->pin4

// set outputs to 0
gpio = 0x00;

// Initialize serial uart

// Test serial  
puts("serial  test");

// endless loop

	// var to store ADC result
	int adc = 0;			
	// Set adcon0 bit1(GO) as 1 to start a/d reading
	adcon0.1 = 1;   
	// adcon0 bit1 will be 1 until reading is complete
	while(adcon0.1 == 1)
	// store result in adc
	adc = adresh;

	// print out adc result to terminal

	if(adc <= 150)

} // End main()


any help much appreciated

Share this post

Link to post
Share on other sites

I've seen that delay warning too, but it's never resulted in a build fail or the app being broken. So it's just a warning... and I ignore it.


The other warning is just saying that since you aren't calling all of the functions from rs232_driver.h, it removes the unused ones. And that's a Good Thing. ;)

Share this post

Link to post
Share on other sites

Hi thanks for the reply.


I eventually worked out that it was not including the fuction that was not used to save space.


Also the delay warning can be removed by comenting out the delay_us(1) in the rs232 driver. I think this is because a delay routine is not generated for a delay so small when using a 4mhz clock. Maybe is could be sorted by just adding a nop.


Anyway it seems to function fine.


Thanks again

Share this post

Link to post
Share on other sites

Since a PICmicro uses four clock cycles per instruction, 4MHz is 1MIPS (million instructions per second). This means that a nop is exactly 1us.


So, yeah, a nop should work perfectly.


- Bill

Share this post

Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Create New...