亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? avrxfifo_documentation.txt

?? 一個基于AVR 單片機的操作系統,有組于了解操作系統在單片機上運行的內幕.
?? TXT
字號:
Sept, 14, 2005

AvrXFifo requires AvrX 2.6f or newer.

AvrX 2.6f contains some significant changes to support AvrXFifos.  The changes
should be 100% backward compatible to previous 2.6 versions.  The change
primarily allows interrupt handler to directly call AvrXSetSemaphore().  Older
versions of AvrX probably will work, but an extra context will be temporarily
pushed onto the kernel stack during the Set Semaphore processing.

Files:
	AvrXFifo.h
	AvrXFifo.c

Notes on declaration & usage of AvrXFifo's:

	Maximum fifo size is 256 bytes.  Most practical systems only need a few
	bytes to buffer interrupt handlers or protocols (e.g. large enough for
	the biggest outgoing packet, for example).   If this limit is too small,
	see "Future Expansion" below.

	The user can declare and initialize Fifo's explicitly, in code, or use
	some handy #define MACROs to do the job.  To do this manually follow
	this template:

	Outside of your code (e.g. global data memory)

		uint8_t SomeBuffer[sizeof(AvrXFifo) + DesiredBufferSize];
		static const pAvrXFifo FifoName = (pAvrXFifo)SomeBuffer;

	Or use the macro

		AVRX_DECL_FIFO(FifoName, FifoSize);

	or if external

		extern uint8_t SomeBuffer[];
		static const pAvrXFifo FifoName = (pAvrXFifo)SomeBuffer;

	Or use the macro

		AVRX_EXT_FIFO(FifoName);

	In your code, initialize the fifo:

		FifoName->size = DesiredBufferSize;
		AvrXFlushFifo(FifoName);

	Or use the macro

		AVRX_INIT_FIFO(FifoName);

	To use the fifo:

	int retc = AvrXPutFifo(FifoName, data);	// Place data in fifo
	int foo = AvrXPullFifo(FifoName);	// Get data from fifo
	AvrXWaitPutFifo(FifoName, data);	// Place data in fifo, blocks if full
	int foo = AvrXWaitPullFifo(FifoName);	// Get data from fifo, blocks if empty
	int size = AvrXPeekFifo(FifoName);	// Check size of fifo
	AvrXFlushFifo(FifoName);		// Flush fifo & release producer.
	int foo = AvrXDelFifo(FifoName);	// Remove last item placed in fifo

	Return Values:
		FIFO_ERR (-1)	fifo full or empty and operation can't be completed
		FIFO_OK  (0)	operation successful
		unsigned int	Char data, zero extended for successful removal

	GCC produces poor code when comparing to literal 0 (there are reasons
	why this is correct).  GCC generates good AVR code when testing results
	for < 0. e.g.

	if ((c = AvrXPullFifo(FifoName)) < FIFO_OK)	// rather than ==
	    // empty...
	else
	    // Do something with c which is unsigned char data.

	Because the pointer to the Fifo is declared as a static const value, no
	actual storage is used.  The compiler is smart enough to just use the
	address of the byte buffer when referencing the fifo.  Optimal code is
	generated.


Macros:

	Macros hide the need to record the size for initialization, otherwise
	are identical to the explicit C code.  The only caveat is that the init
	macro needs to be in the same file as the declaration macro.  This is
	also good programming practice to keep declarations and initialization
	in one file.

Synchronization:

	AvrXFifo's have built in synchronization between producers (put) and
	consumers (pull).  Producers and consumers can be either tasks or
	interrupt handlers.  Interrupt handlers, of course, cannot use the
	blocking Fifo API.

	When blocked, the producer/consumer will be come unblocked when the
	opposite side either removes or adds a data item (respectively).  There
	is no mechanism to notify an interrupt handler that something has been
	added or removed from a fifo.  See the example of the buffered serial
	I/O to see how that is handled.	In short, it is up to the task end of
	the fifo to manage coordination with the interrupt handler.

Future expansion possibilities:

	By using the fifo code as a starting point some interesting things could
	be added:

	1. Fifos could be defined as word or even arbitrary data size buffers.
	The size could be declared as multiples of the data and new get/put
	routines defined that remove the data item.  This could be made generic
	by adding the element size to the fifo data structure, at the expense of
	more code for the simple case.

	2. Routine addresses could be added to the fifo structure as call-backs
	for interrupt handlers when the fifo fills or empties.  This would allow
	a fifo to be put between two interrupt handlers.  Say a serial to serial
	buffer.  Simple tasks between handlers could be written as entirely
	kernel context code avoiding the overhead of task switching.

	3. Fifo size could be expanded beyond 254 by changing the internal size,
	in and out from uint8_t to uint16_t and modifying the fifo code
	appropriately (internal temporary values).  Also, race conditions in
	loading pointers must be taken into account.  With byte pointers CPU
	reads are atomic and no critical sections are needed.

	The current byte size data was chosen as a compromise between small
	system code and decent sized buffers.

CAVEATS:
	The fifo code has not been tested with a buffer size of 256.  It should work.

	AvrXPeekFifo() has not been tested.

	There might be race conditions

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀久久99精品久久久久宅男| 国产精品免费视频一区| 精品国产精品一区二区夜夜嗨| 欧美亚洲精品一区| 日韩欧美一级二级三级| 亚洲免费观看高清完整版在线观看熊| 久久久久国产精品厨房| 一二三区精品视频| 成人激情av网| 精品国产亚洲在线| 欧美电视剧在线看免费| 欧美电影免费观看完整版| 中文字幕一区二区三区精华液| 中文字幕欧美日韩一区| 蜜臀av一区二区在线观看| 日本精品视频一区二区三区| 久久精子c满五个校花| 日本欧美肥老太交大片| 美女脱光内衣内裤视频久久网站 | 天堂精品中文字幕在线| 日av在线不卡| 欧美网站一区二区| 亚洲黄色av一区| 94色蜜桃网一区二区三区| 久久精品日产第一区二区三区高清版 | 666欧美在线视频| 精品欧美乱码久久久久久| 亚洲成精国产精品女| 色综合久久中文综合久久97 | 成人一道本在线| 欧美mv日韩mv国产网站app| 日韩一区精品视频| 欧美精品一卡二卡| 热久久免费视频| 日韩视频一区二区三区| 国产精品乱码一区二区三区软件 | 欧美日韩视频第一区| 在线成人午夜影院| 亚洲精品中文字幕乱码三区| 一区二区三区国产精品| 国产99一区视频免费| 26uuu精品一区二区在线观看| 亚洲国产精品成人综合| 久久精品国产一区二区三区免费看| 日韩高清中文字幕一区| 懂色av一区二区在线播放| 精品乱码亚洲一区二区不卡| 视频一区国产视频| 国产精品一区一区| 久久婷婷国产综合精品青草 | 7777女厕盗摄久久久| 亚洲美女在线国产| 91麻豆国产福利在线观看| 中文字幕成人在线观看| 国产成人精品亚洲日本在线桃色 | 国产精品一区三区| 欧美国产日韩在线观看| 丰满岳乱妇一区二区三区| 亚洲国产精品ⅴa在线观看| 国产suv精品一区二区三区| xfplay精品久久| 国产一区三区三区| 国产精品污污网站在线观看| 成人做爰69片免费看网站| 国产精品白丝在线| 美女视频黄频大全不卡视频在线播放| 国产成人自拍在线| 中文字幕一区二区三区视频 | 色综合激情久久| 亚洲一区免费观看| 欧美二区乱c少妇| 日韩精品电影在线观看| 精品国产一区二区三区久久影院 | 成人av在线资源| 亚洲精品日韩综合观看成人91| 美女国产一区二区三区| 精品国产乱子伦一区| 国产成人午夜99999| 久久精品视频网| 日本高清不卡aⅴ免费网站| 日本不卡一区二区三区高清视频| 91麻豆免费在线观看| 亚洲高清久久久| 91小视频免费观看| 亚洲国产日韩一级| 欧美精品一区二区在线观看| 成人黄色片在线观看| 久久久久久夜精品精品免费| a亚洲天堂av| 日本视频中文字幕一区二区三区| 91福利社在线观看| 蜜臀99久久精品久久久久久软件| 欧美日韩国产综合久久| 麻豆国产精品视频| 国产精品国产三级国产三级人妇| 国产成人免费高清| 国产午夜精品一区二区三区嫩草| 久久精品国产亚洲aⅴ| 国产精品热久久久久夜色精品三区| 韩国女主播一区| 午夜精品久久久久久久久| 欧美性猛片aaaaaaa做受| 国产一区二区三区美女| 亚洲一区在线免费观看| 国产精品网站在线观看| 91精品综合久久久久久| 99天天综合性| 亚洲午夜私人影院| 中文字幕一区二区三区不卡| 久久久精品欧美丰满| 欧美卡1卡2卡| 91国内精品野花午夜精品| 国产一区 二区 三区一级| 亚洲va在线va天堂| 亚洲免费伊人电影| 在线精品视频一区二区| 亚洲高清免费观看 | 最新日韩av在线| 精品欧美一区二区久久 | 久久亚洲二区三区| 日韩一区二区三区电影在线观看| 秋霞午夜av一区二区三区| 亚洲精品乱码久久久久| 欧美精彩视频一区二区三区| 日韩欧美国产电影| 国产成人欧美日韩在线电影| 麻豆一区二区三区| 免费在线一区观看| 日韩高清欧美激情| 日韩影院免费视频| 日韩精品电影一区亚洲| 午夜精品久久久久久久久久久| 精品女同一区二区| 日韩一区二区三区视频| 99热99精品| 99综合影院在线| 97精品久久久午夜一区二区三区| 国产情人综合久久777777| 99久久伊人精品| 99re8在线精品视频免费播放| 亚洲国产精品视频| 亚洲精品一区二区三区在线观看| av亚洲精华国产精华精| 日韩国产欧美三级| 人妖欧美一区二区| 精品一区二区影视| 亚洲精品ww久久久久久p站| 国产精品久久久久9999吃药| 国产精品区一区二区三| 亚洲欧美一区二区久久| 337p亚洲精品色噜噜| 处破女av一区二区| 91在线视频播放地址| 一本色道**综合亚洲精品蜜桃冫| 日韩不卡一二三区| 免费成人在线观看| 麻豆91在线播放| 亚洲图片欧美视频| 国产精品影音先锋| 91浏览器在线视频| 7777精品伊人久久久大香线蕉经典版下载 | 国产精品一区专区| 日本视频在线一区| 成人综合日日夜夜| 色综合天天综合狠狠| 国产99久久久久| 在线观看一区日韩| 欧美性一二三区| 精品一区二区三区免费毛片爱 | 日韩av一区二区三区四区| 一区二区三区美女| 成人免费高清在线观看| 欧美久久久久久久久久| 一区二区三区四区五区视频在线观看| 亚洲国产精品麻豆| 久久99热国产| 日韩欧美一区中文| 三级不卡在线观看| 7799精品视频| 午夜精品一区二区三区三上悠亚| 麻豆精品一区二区av白丝在线| 粉嫩aⅴ一区二区三区四区| 日本精品裸体写真集在线观看| 欧美高清视频不卡网| 久久久久久一二三区| 一区二区三区美女| 日本韩国欧美国产| 一二三区精品福利视频| 欧美色综合久久| 亚洲福中文字幕伊人影院| 国产精品一二三四区| 欧美精品一区二区高清在线观看| 亚洲女人****多毛耸耸8| av毛片久久久久**hd| 国产精品白丝在线| 欧美影院一区二区| 亚洲成av人片在线| 91精品一区二区三区久久久久久| 国产三级欧美三级日产三级99| 中文字幕佐山爱一区二区免费|