⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opex.h

📁 学完单片机就要使用实时系统在单片机上运行
💻 H
字号:
// OPEX.h
// (C) 2004 Steve Childress stevech@san.rr.com

#ifndef __AVR_ATmega32__
#define __AVR_ATmega32__
#endif

#define USEMYMALLOC 1	// malloc's source code tweaked

#ifndef _OPEX_H_
#define _OPEX_H_

#include <inttypes.h>
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <wdt.h>
#include <sleep.h>
#include <Interrupt.h>
#include <sig-avr.h>
#include <pgmspace.h>
#include <string.h>

#include <setjmp.h>
#include <delay.h>
#include <eeprom.h>




////////////////////////////////////////////////////////////
// Types
typedef unsigned char BYTE;

typedef struct time_date_node {  // must be ordered highest to lowest
	unsigned char	year;	
	unsigned char	month;
	unsigned char	day;
	unsigned char	hour;
	unsigned char 	minute;
	unsigned char	second;
	unsigned char	tick;
	unsigned char	weekday;	// 0..6 this is not used in time comparisons
} DATE_TIME ;

// SCHEDULER TASK STATE
typedef struct func_state_node {
	struct func_state_node *next;					// linked list
	DATE_TIME when;									// DATE AND TIME when this task is to run
	BYTE state;
	void *pinfo;									// any 16 bits of user data
	size_t *malloc_list;								// list of malloc'd memory
	char *name;										// string name (RAM data)
	void (*funcp) ( struct func_state_node *me);	// address of C function to run
	BYTE *flags;									// pointer to 8 flag bits
	BYTE flagmask;									// flag mask
}  OPEX_TCB ;





//////////////////////////////////////////////////////////////////
// scheduler globals

#define OPEX_sched_FLAGBIT_SERIAL_RECEIVED_ANY 0	// bit number in sched flags
#define OPEX_sched_FLAGBIT_SERIAL_RECEIVED_CR 1		// bit number in sched flags

extern  DATE_TIME time;				// see Timerv1.c
extern	BYTE TicksPerSecond;		// see AVR_Dependent
extern	int8_t GMT_offset_standard;	// see daylightSaving.c
extern	int8_t GMT_offset_now;		// see daylightSaving.c

extern  jmp_buf OPEX_sched_jmp;			// state save for OPEX_sched_quit()
extern	unsigned int _stack_watch;		// see Timerv1.c
extern	int num_com_blocks;			// see OPEXserial.c
extern  BYTE OPEX_sched_flags;			// see OPEX.c


//////////////////////////////////////////////////////////////////
// functions  in OPEX.c

// OPEX_sched_new, below, says:
	//   is a function returning a pointer to a OPEX_TCB structure
	//   is passed a pointer to a function who's argument is a pointer to a OPEX_TCB
OPEX_TCB	*	OPEX_sched_new( void (*funcp)(OPEX_TCB *), char *);
	
void		OPEX_sched_start(void);
void		OPEX_sched_kill(OPEX_TCB *);
void		OPEX_sched_quit(void);
void 		OPEX_sched_add(OPEX_TCB *);
void		OPEX_sched_make_pending(OPEX_TCB *);
void		OPEX_sched_setIdleFunc( void(*funcp) );
void		OPEX_sched_resched(OPEX_TCB *, BYTE, BYTE, BYTE, BYTE, BYTE);
void		OPEX_sched_schedAt(OPEX_TCB *, BYTE, BYTE, BYTE, BYTE, BYTE, BYTE, BYTE);
void		OPEX_sched_now(OPEX_TCB *);
void 		OPEX_sched_on_flag(BYTE *, BYTE);
void 		OPEX_sched_change_flag(BYTE *, BYTE, BYTE);			
OPEX_TCB *	OPEX_sched_get_named(char *);
OPEX_TCB *	OPEX_sched_queue_remove(OPEX_TCB **, OPEX_TCB *);
void 		OPEX_sched_queue_append(OPEX_TCB **, OPEX_TCB *);
void 		OPEX_sched_queue_insert_head(OPEX_TCB **, OPEX_TCB *);
void 		OPEX_sched_time_changed(void);
char *		OPEX_malloc(OPEX_TCB *, int);
void		OPEX_free(OPEX_TCB *, char *);

//////////////////////////////////////////////////
// Functions in OPEXutils.c
void OPEX_sched_showQitem(OPEX_TCB *, char *, char);
void OPEX_sched_showQ(char *, BYTE); 
void OPEX_sched_show_mem(char *, unsigned int);
void OPEX_sched_showQitem(OPEX_TCB *, char *, char);
	
//////////////////////////////////////////////////
// functions in dateTime.c
void OPEX_init_dateTime(void);
void OPEX_format_date_time(char *,  DATE_TIME *);
void OPEX_format_date(char *,   DATE_TIME *);
void OPEX_format_time(char *,   DATE_TIME *);
 
int  OPEX_compare_dt(DATE_TIME *, DATE_TIME *);
void OPEX_date_add(DATE_TIME *, BYTE, BYTE, BYTE, BYTE, BYTE);
void OPEX_now(DATE_TIME *);
void OPEX_date_stuff(DATE_TIME *, BYTE,BYTE,BYTE,BYTE,BYTE,BYTE,BYTE);
int  OPEX_DayOfWeek( int nYear, int nMonth, int nDay);
 
//////////////////////////////////////////////////
// functions in OPEX serial I/O support
void OPEX_com_init(void);
void OPEX_putc(BYTE);
void OPEX_puts(char *);
void OPEX_puts_P(char *);
void OPEX_putline(char *);
void OPEX_putline_P(char *);
void OPEX_nl(void);

int  OPEX_getc(unsigned char *);
int  OPEX_gets(char *, int, BYTE);
int  OPEX_peek(char *, BYTE);
int	 OPEX_txbuf_unused(void);
int  OPEX_txbuf_used(void);
	
/////////////////////////////////////////////
void OPEX_timer_ISR(void);	// user program's ISR calls this
void OPEX_com_rx_ISR(BYTE);		// user program's ISR calls this
void OPEX_com_tx_ISR(void);		// user program's ISR calls this

/////////////////////////////////////////////////////
// functions in daylightSaving.c
void OPEX_daylight_saving_changes_at(BYTE, DATE_TIME *);
int  OPEX_is_daylight_saving(void);
int  OPEX_daylight_saving_adjust(void);
	
/////////////////////////////////////////////////////
// functions in OPEX_AVR_dependent
void avr_setjmp(void);
void serial_init(void);
void serial_stop(void);			// user program supplied function
void serial_change_txIE(BYTE);	// user program supplied function
int  serial_get_txIE(void);		// user program supplied function
void serial_tx_put(BYTE);		// user program supplied function
void change_IE(BYTE state);

void save_date(void);	// EEPROM access
int  restore_date(void);
	
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -