1 |
%$Header: /home/dashley/cvsrep/uculib01/uculib01/doc/manual/c_bmf0/c_bmf0.tex,v 1.10 2010/01/28 21:18:32 dashley Exp $ |
2 |
|
3 |
\chapter{Block Memory Functions} |
4 |
|
5 |
\label{cbmf0} |
6 |
|
7 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
8 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
9 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
10 |
\section{Introduction and Overview} |
11 |
%Section tag: iov0 |
12 |
\label{cbmf0:siov0} |
13 |
|
14 |
|
15 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
16 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
17 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
18 |
\section{Block Clear and Set Functions} |
19 |
%Section tag: bcs0 |
20 |
\label{cbmf0:sbcs0} |
21 |
|
22 |
|
23 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
24 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
25 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
26 |
%\subsection[\emph{UcuBmMemclrSmNu(\protect\mbox{\protect$\cdot$})}] |
27 |
% {\emph{UcuBmMemclrSmNu(\protect\mbox{\protect\boldmath $\cdot$})}} |
28 |
%%Subsection tag: mcl0 |
29 |
%\label{cbmf0:sbcs0:smcl0} |
30 |
% |
31 |
%\index{UcuBmMemclrSmNu()@\emph{UcuBmMemclrSmNu($\cdot$)}}% |
32 |
% |
33 |
%\noindent\textbf{PROTOTYPE} |
34 |
%\begin {list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
35 |
%\item |
36 |
%\begin{verbatim} |
37 |
%void UcuBmMemclrSmNu(void *block, UCU_UINT8 dim) |
38 |
%\end{verbatim} |
39 |
%\end{list} |
40 |
%\vspace{2.8ex} |
41 |
% |
42 |
%\noindent\textbf{SYNOPSIS} |
43 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
44 |
%\item |
45 |
%Sets each byte of the memory area \emph{block} to zero, |
46 |
%with \emph{block} consisting of \emph{dim} bytes. |
47 |
%\end{list} |
48 |
%\vspace{2.8ex} |
49 |
% |
50 |
%\noindent\textbf{INPUTS} |
51 |
%\begin{list}{}{\setlength{\leftmargin}{0.5in}\setlength{\itemindent}{-0.25in}\setlength{\topsep}{0.0in}\setlength{\partopsep}{0.0in}} |
52 |
%\item \emph{\textbf{block}}\\ |
53 |
% Pointer to the first byte of the memory block whose |
54 |
% bytes are to be set to zero. |
55 |
% No reserved values of this pointer are honored, |
56 |
% so the pointer may not be \emph{NULL} or otherwise invalid |
57 |
% if $dim > 0$. |
58 |
%\item \emph{\textbf{dim}}\\ |
59 |
% Number of contiguous bytes in the block, starting at |
60 |
% $array[0]$, to be set to zero. |
61 |
% Zero is a valid value for this parameter; and if this |
62 |
% parameter is zero, \emph{array} will not be dereferenced |
63 |
% (hence the provision above that \emph{array} may be \emph{NULL} |
64 |
% or otherwise invalid only if $dim = 0$). |
65 |
%\end{list} |
66 |
%\vspace{2.8ex} |
67 |
% |
68 |
%\noindent\textbf{OUTPUTS} |
69 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
70 |
%\item None. |
71 |
%\end{list} |
72 |
%\vspace{2.8ex} |
73 |
% |
74 |
%\noindent\textbf{INTERRUPT COMPATIBILITY} |
75 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
76 |
%\item The clearing of each individual byte is atomic |
77 |
% by design, so that an ISR cannot: |
78 |
% \begin{itemize} |
79 |
% \item Obtain an intermediate value of a byte (the byte will |
80 |
% either be its previous value or zero). |
81 |
% \end{itemize} |
82 |
%\item However, the clear operation applied to multiple bytes |
83 |
% is not atomic (an interrupt may occur between the operation on |
84 |
% one byte and the operation on its successor). |
85 |
%\end{list} |
86 |
% |
87 |
|
88 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
89 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
90 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
91 |
\section{Block Decrement Functions} |
92 |
%Section tag: bdf0 |
93 |
\label{cbmf0:sbdf0} |
94 |
|
95 |
|
96 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
97 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
98 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
99 |
%\subsection[\emph{UcuBmListDecZf8SmNc(\protect\mbox{\protect$\cdot$})}] |
100 |
% {\emph{UcuBmListDecZf8SmNc(\protect\mbox{\protect\boldmath $\cdot$})}} |
101 |
%%Subsection tag: dar0 |
102 |
%\label{cbmf0:sbdf0:sdar0} |
103 |
% |
104 |
%\index{UcuBmListDecZf8SmNc()@\emph{UcuBmListDecZf8SmNc($\cdot$)}}% |
105 |
% |
106 |
%\noindent\textbf{PROTOTYPE} |
107 |
%\begin {list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
108 |
%\item |
109 |
%\begin{verbatim} |
110 |
%void UcuBmListDecZf8SmNc(UCU_UINT8 *array, UCU_UINT8 dim) |
111 |
%\end{verbatim} |
112 |
%\end{list} |
113 |
%\vspace{2.8ex} |
114 |
% |
115 |
%\noindent\textbf{SYNOPSIS} |
116 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
117 |
%\item |
118 |
%Decrements each of an array \emph{array} of \emph{dim} bytes, but not below zero. |
119 |
%\end{list} |
120 |
%\vspace{2.8ex} |
121 |
% |
122 |
%\noindent\textbf{INPUTS} |
123 |
%\begin{list}{}{\setlength{\leftmargin}{0.5in}\setlength{\itemindent}{-0.25in}\setlength{\topsep}{0.0in}\setlength{\partopsep}{0.0in}} |
124 |
%\item \emph{\textbf{array}}\\ |
125 |
% Pointer to the first byte of the array whose elements are to be |
126 |
% decremented. No reserved values of this pointer are honored, |
127 |
% so the pointer may not be \emph{NULL} or otherwise invalid |
128 |
% if $dim > 0$. |
129 |
%\item \emph{\textbf{dim}}\\ |
130 |
% Number of contiguous bytes in the array, starting at |
131 |
% $array[0]$, to be decremented but not below zero. |
132 |
% Zero is a valid value for this parameter; and if this |
133 |
% parameter is zero, \emph{array} will not be dereferenced |
134 |
% (hence the provision above that \emph{array} may be \emph{NULL} |
135 |
% or otherwise invalid only if $dim = 0$). |
136 |
%\end{list} |
137 |
%\vspace{2.8ex} |
138 |
% |
139 |
%\noindent\textbf{OUTPUTS} |
140 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
141 |
%\item None. |
142 |
%\end{list} |
143 |
%\vspace{2.8ex} |
144 |
% |
145 |
%\noindent\textbf{INTERRUPT COMPATIBILITY} |
146 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
147 |
%\item The decrement of each individual byte is atomic |
148 |
% by design, so that an ISR cannot: |
149 |
% |
150 |
% \begin{itemize} |
151 |
% \item Obtain a faulty snapshot of an intermediate value of a byte. |
152 |
% \item Corrupt the modification of a byte by writing to the byte. |
153 |
% \end{itemize} |
154 |
% |
155 |
%\item However, the decrement operation applied to multiple bytes |
156 |
% is not atomic (an interrupt may occur between the operation on |
157 |
% one byte and the operation on its successor). |
158 |
% |
159 |
%\item Thus, an ISR may safely set and test the individual byte |
160 |
% values concurrently with nISR software (so long as the nISR |
161 |
% software employs appropriate critical section protocol), but |
162 |
% the ISR may not in general count on relationships between |
163 |
% different bytes in the \emph{array}. |
164 |
% |
165 |
%\item Classic DI/EI critical section protocol is employed because it is unlikely |
166 |
% that this function (because it is an array operation and could have a long |
167 |
% execution time) |
168 |
% will be used from within a larger critical section, and hence a restorative |
169 |
% protocol is perceived to have no advantages. |
170 |
% |
171 |
%\item The DI/EI critical section is just a few machine instructions long |
172 |
% (nearly negligible), |
173 |
% so critical section timing data is not provided. |
174 |
%\end{list} |
175 |
% |
176 |
|
177 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
178 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
179 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
180 |
%\subsection[\emph{UcuBmListDecZf16SmNc(\protect\mbox{\protect$\cdot$})}] |
181 |
% {\emph{UcuBmListDecZf16SmNc(\protect\mbox{\protect\boldmath $\cdot$})}} |
182 |
%%Subsection tag: dar1 |
183 |
%\label{cbmf0:sbdf0:sdar1} |
184 |
% |
185 |
%\index{UcuBmListDecZf16SmNc()@\emph{UcuBmListDecZf16SmNc($\cdot$)}}% |
186 |
% |
187 |
%\noindent\textbf{PROTOTYPE} |
188 |
%\begin {list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
189 |
%\item |
190 |
%\begin{verbatim} |
191 |
%void UcuBmListDecZf16SmNc(UCU_UINT16 *array, UCU_UINT16 dim) |
192 |
%\end{verbatim} |
193 |
%\end{list} |
194 |
%\vspace{2.8ex} |
195 |
% |
196 |
%\noindent\textbf{SYNOPSIS} |
197 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
198 |
%\item |
199 |
%Decrements each of an array \emph{array} of \emph{dim} 16-bit values, |
200 |
%but not below zero. (The storage order of the bytes |
201 |
%within each element of \emph{array} is machine-dependent.) |
202 |
%\end{list} |
203 |
%\vspace{2.8ex} |
204 |
% |
205 |
%\noindent\textbf{INPUTS} |
206 |
%\begin{list}{}{\setlength{\leftmargin}{0.5in}\setlength{\itemindent}{-0.25in}\setlength{\topsep}{0.0in}\setlength{\partopsep}{0.0in}} |
207 |
%\item \emph{\textbf{array}}\\ |
208 |
% Pointer to the first 16-bit integer of the array whose elements are to be |
209 |
% decremented. No reserved values of this pointer are honored, |
210 |
% so the pointer may not be \emph{NULL} or otherwise invalid |
211 |
% if $dim > 0$. |
212 |
%\item \emph{\textbf{dim}}\\ |
213 |
% Number of contiguous 16-bit values in the array, starting at |
214 |
% $array[0]$, to be decremented but not below zero. |
215 |
% Zero is a valid value for this parameter; and if this |
216 |
% parameter is zero, \emph{array} will not be dereferenced |
217 |
% (hence the provision above that \emph{array} may be \emph{NULL} |
218 |
% or otherwise invalid only if $dim = 0$). |
219 |
%\end{list} |
220 |
%\vspace{2.8ex} |
221 |
% |
222 |
%\noindent\textbf{OUTPUTS} |
223 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
224 |
%\item None. |
225 |
%\end{list} |
226 |
%\vspace{2.8ex} |
227 |
% |
228 |
%\noindent\textbf{INTERRUPT COMPATIBILITY} |
229 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
230 |
%\item The decrement of each individual 16-bit quantity is atomic |
231 |
% by design, so that an ISR cannot: |
232 |
% |
233 |
% \begin{itemize} |
234 |
% \item Obtain a faulty snapshot of an intermediate value of a 16-bit quantity. |
235 |
% \item Corrupt the modification of a 16-bit quantity by writing to it. |
236 |
% \end{itemize} |
237 |
% |
238 |
%\item However, the decrement operation applied to multiple 16-bit quantities |
239 |
% is not atomic (an interrupt may occur between the operation on |
240 |
% one 16-bit quantity and the operation on its successor). |
241 |
% |
242 |
%\item Thus, an ISR may safely set and test the individual 16-bit quantity |
243 |
% values concurrently with nISR software (so long as the nISR |
244 |
% software employs appropriate critical section protocol), but |
245 |
% the ISR may not in general count on relationships between |
246 |
% different 16-bit quantities in the \emph{array}. |
247 |
% |
248 |
%\item Classic DI/EI critical section protocol is employed because it is unlikely |
249 |
% that this function (because it is an array operation and could have a long |
250 |
% execution time) |
251 |
% will be used from within a larger critical section, and hence a restorative |
252 |
% protocol is perceived to have no advantages. |
253 |
% |
254 |
%\item The DI/EI critical section is just a few machine instructions long |
255 |
% (nearly negligible), |
256 |
% so critical section timing data is not provided. |
257 |
%\end{list} |
258 |
%\vspace{2.8ex} |
259 |
|
260 |
|
261 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
262 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
263 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
264 |
\section{Block Increment Functions} |
265 |
%Section tag: bif0 |
266 |
\label{cbmf0:sbif0} |
267 |
|
268 |
|
269 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
270 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
271 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
272 |
%\subsection[\emph{UcuBmListIncFf8SmNc(\protect\mbox{\protect$\cdot$})}] |
273 |
% {\emph{UcuBmListIncFf8SmNc(\protect\mbox{\protect\boldmath $\cdot$})}} |
274 |
%%Subsection tag: iar0 |
275 |
%\label{cbmf0:sibf0:siar0} |
276 |
% |
277 |
%\index{UcuBmListIncFf8SmNc()@\emph{UcuBmListIncFf8SmNc($\cdot$)}}% |
278 |
% |
279 |
%\noindent\textbf{PROTOTYPE} |
280 |
%\begin {list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
281 |
%\item |
282 |
%\begin{verbatim} |
283 |
%void UcuBmListIncFf8SmNc(UCU_UINT8 *array, UCU_UINT8 dim) |
284 |
%\end{verbatim} |
285 |
%\end{list} |
286 |
%\vspace{2.8ex} |
287 |
% |
288 |
%\noindent\textbf{SYNOPSIS} |
289 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
290 |
%\item |
291 |
%Increments each of an array \emph{array} of \emph{dim} bytes, but not above \$FF. |
292 |
%\end{list} |
293 |
%\vspace{2.8ex} |
294 |
% |
295 |
%\noindent\textbf{INPUTS} |
296 |
%\begin{list}{}{\setlength{\leftmargin}{0.5in}\setlength{\itemindent}{-0.25in}\setlength{\topsep}{0.0in}\setlength{\partopsep}{0.0in}} |
297 |
%\item \emph{\textbf{array}}\\ |
298 |
% Pointer to the first byte of the array whose elements are to be |
299 |
% incremented. No reserved values of this pointer are honored, |
300 |
% so the pointer may not be \emph{NULL} or otherwise invalid |
301 |
% if $dim > 0$. |
302 |
%\item \emph{\textbf{dim}}\\ |
303 |
% Number of contiguous bytes in the array, starting at |
304 |
% $array[0]$, to be incremented but not above \$FF. |
305 |
% Zero is a valid value for this parameter; and if this |
306 |
% parameter is zero, \emph{array} will not be dereferenced |
307 |
% (hence the provision above that \emph{array} may be \emph{NULL} |
308 |
% or otherwise invalid only if $dim = 0$). |
309 |
%\end{list} |
310 |
%\vspace{2.8ex} |
311 |
% |
312 |
%\noindent\textbf{OUTPUTS} |
313 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
314 |
%\item None. |
315 |
%\end{list} |
316 |
%\vspace{2.8ex} |
317 |
% |
318 |
%\noindent\textbf{INTERRUPT COMPATIBILITY} |
319 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
320 |
%\item The increment of each individual byte is atomic |
321 |
% by design, so that an ISR cannot: |
322 |
% |
323 |
% \begin{itemize} |
324 |
% \item Obtain a faulty snapshot of an intermediate value of a byte. |
325 |
% \item Corrupt the modification of a byte by writing to the byte. |
326 |
% \end{itemize} |
327 |
% |
328 |
%\item However, the increment operation applied to multiple bytes |
329 |
% is not atomic (an interrupt may occur between the operation on |
330 |
% one byte and the operation on its successor). |
331 |
% |
332 |
%\item Thus, an ISR may safely set and test the individual byte |
333 |
% values concurrently with nISR software (so long as the nISR |
334 |
% software employs appropriate critical section protocol), but |
335 |
% the ISR may not in general count on relationships between |
336 |
% different bytes in the \emph{array}. |
337 |
% |
338 |
%\item Classic DI/EI critical section protocol is employed because it is unlikely |
339 |
% that this function (because it is an array operation and could have a long |
340 |
% execution time) |
341 |
% will be used from within a larger critical section, and hence a restorative |
342 |
% protocol is perceived to have no advantages. |
343 |
% |
344 |
%\item The DI/EI critical section is just a few machine instructions long |
345 |
% (nearly negligible), |
346 |
% so critical section timing data is not provided. |
347 |
%\end{list} |
348 |
|
349 |
|
350 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
351 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
352 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
353 |
\section{Block Sum and Average Functions} |
354 |
%Section tag: bsa0 |
355 |
\label{cbmf0:sbsa0} |
356 |
|
357 |
|
358 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
359 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
360 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
361 |
\section{Block Shift Functions} |
362 |
%Section tag: bsh0 |
363 |
\label{cbmf0:sbsh0} |
364 |
|
365 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
366 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
367 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
368 |
%\subsection[\emph{UcuBmMemRshift8SmNc(\protect\mbox{\protect$\cdot$})}] |
369 |
% {\emph{UcuBmMemRshift8SmNc(\protect\mbox{\protect\boldmath $\cdot$})}} |
370 |
%%Subsection tag: mrs0 |
371 |
%\label{cbmf0:sibf0:smrs0} |
372 |
% |
373 |
%\index{UcuBmMemRshift8SmNc()@\emph{UcuBmMemRshift8SmNc($\cdot$)}}% |
374 |
% |
375 |
%\noindent\textbf{PROTOTYPE} |
376 |
%\begin {list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
377 |
%\item |
378 |
%\begin{verbatim} |
379 |
%void UcuBmMemRshift8SmNc(UCU_UINT8 *block, UCU_UINT8 num) |
380 |
%\end{verbatim} |
381 |
%\end{list} |
382 |
%\vspace{2.8ex} |
383 |
% |
384 |
%\noindent\textbf{SYNOPSIS} |
385 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
386 |
%\item |
387 |
%Shifts \emph{block} of size \emph{num} right by one byte. |
388 |
% |
389 |
%Logically, this function is equivalent to the following assignments: |
390 |
% |
391 |
%\begin{verbatim} |
392 |
%block[num] = block[num-1]; |
393 |
%block[num-1] = block[num-2]; |
394 |
%... |
395 |
%block[2] = block[1]; |
396 |
%block[1] = block[0]; |
397 |
%\end{verbatim} |
398 |
%\end{list} |
399 |
%\vspace{2.8ex} |
400 |
% |
401 |
%\noindent\textbf{INPUTS} |
402 |
%\begin{list}{}{\setlength{\leftmargin}{0.5in}\setlength{\itemindent}{-0.25in}\setlength{\topsep}{0.0in}\setlength{\partopsep}{0.0in}} |
403 |
%\item \emph{\textbf{block}}\\ |
404 |
% Pointer to the first byte of the block whose elements are to be |
405 |
% shifted right. No reserved values of this pointer are honored, |
406 |
% so the pointer may not be \emph{NULL} or otherwise invalid |
407 |
% if $num > 0$. |
408 |
%\item \emph{\textbf{num}}\\ |
409 |
% Number of bytes to be shifted. |
410 |
% Zero is a valid value for this parameter; and if this |
411 |
% parameter is zero, \emph{block} will not be dereferenced |
412 |
% (hence the provision above that \emph{block} may be \emph{NULL} |
413 |
% or otherwise invalid only if $num = 0$). |
414 |
% |
415 |
% As a point of caution, note that the rightmost byte specified |
416 |
% by \emph{block} and \emph{num} is shifted beyond the area |
417 |
% specified, hence it is a logical error to use the size of |
418 |
% an array as \emph{num} (use one less than the size of the |
419 |
% array instead). |
420 |
% |
421 |
%\begin{figure} |
422 |
%\begin{verbatim} |
423 |
%unsigned char buf[BUFSIZE]; |
424 |
% |
425 |
%UcuBmMemRshift8SmNc(buf, sizeof(buf)-1); |
426 |
%\end{verbatim} |
427 |
%\caption{Correct Usage of \emph{UcuBmMemRshift8SmNc($\cdot$)} to Shift an Array} |
428 |
%\label{fig:cbmf0:sibf0:smrs0:01} |
429 |
%\end{figure} |
430 |
% |
431 |
% An example of correct usage to shift a \emph{block} right so that |
432 |
% a new value can be placed in \emph{block[0]} is supplied as |
433 |
% Figure \ref{fig:cbmf0:sibf0:smrs0:01}.\\ |
434 |
%\end{list} |
435 |
%\vspace{2.8ex} |
436 |
% |
437 |
%\noindent\textbf{OUTPUTS} |
438 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
439 |
%\item None. |
440 |
%\end{list} |
441 |
%\vspace{2.8ex} |
442 |
% |
443 |
%\noindent\textbf{INTERRUPT COMPATIBILITY} |
444 |
%\begin{list}{}{\setlength{\leftmargin}{0.25in}\setlength{\topsep}{0.0in}} |
445 |
%\item Each assignment as specified in the synopsis is atomic (although in practice |
446 |
% this is likely to be of little value). |
447 |
% |
448 |
%\item Classic DI/EI critical section protocol is employed because it is unlikely |
449 |
% that this function (because it is an array operation and could have a long |
450 |
% execution time) |
451 |
% will be used from within a larger critical section, and hence a restorative |
452 |
% protocol is perceived to have no advantages. |
453 |
% |
454 |
%\item The DI/EI critical section is just a few machine instructions long |
455 |
% (nearly negligible), |
456 |
% so critical section timing data is not provided. |
457 |
%\end{list} |
458 |
% |
459 |
|
460 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
461 |
\noindent\begin{figure}[!b] |
462 |
\noindent\rule[-0.25in]{\textwidth}{1pt} |
463 |
\begin{tiny} |
464 |
\begin{verbatim} |
465 |
$RCSfile: c_bmf0.tex,v $ |
466 |
$Source: /home/dashley/cvsrep/uculib01/uculib01/doc/manual/c_bmf0/c_bmf0.tex,v $ |
467 |
$Revision: 1.10 $ |
468 |
$Author: dashley $ |
469 |
$Date: 2010/01/28 21:18:32 $ |
470 |
\end{verbatim} |
471 |
\end{tiny} |
472 |
\noindent\rule[0.25in]{\textwidth}{1pt} |
473 |
\end{figure} |
474 |
|
475 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
476 |
%$Log: c_bmf0.tex,v $ |
477 |
%Revision 1.10 2010/01/28 21:18:32 dashley |
478 |
%a)Chapter start quotes removed. |
479 |
%b)Aesthetic comment line added at the bottom of most files. |
480 |
% |
481 |
%Revision 1.9 2010/01/28 17:35:15 dashley |
482 |
%Unimplemented functions commented out for now. |
483 |
% |
484 |
%Revision 1.8 2010/01/27 16:04:16 dashley |
485 |
%Formatting difficulty corrections. |
486 |
% |
487 |
%Revision 1.7 2007/10/10 19:47:18 dtashley |
488 |
%Edits. |
489 |
% |
490 |
%Revision 1.6 2007/10/10 18:28:33 dtashley |
491 |
%Addition of UcuBmMemclrSmNu() function. |
492 |
% |
493 |
%Revision 1.5 2007/10/10 17:42:27 dtashley |
494 |
%Edits. |
495 |
% |
496 |
%Revision 1.4 2007/10/09 02:11:40 dtashley |
497 |
%Edits. |
498 |
% |
499 |
%Revision 1.3 2007/10/08 19:51:59 dtashley |
500 |
%Edits toward getting function documentation looking good. |
501 |
% |
502 |
%Revision 1.2 2007/10/08 18:16:33 dtashley |
503 |
%Edits. |
504 |
% |
505 |
%Revision 1.1 2007/10/06 16:49:32 dtashley |
506 |
%Initial checkin. |
507 |
% |
508 |
%End of $RCSfile: c_bmf0.tex,v $. |
509 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
510 |
|