Keil™, An ARM® Company

C166 User's Guide

On-Line Manuals

C166 User's Guide

C166 Introduction
Compiling Programs
Language Extensions
Preprocessor
Advanced Programming
Error Messages
Library Reference
Library Files
Source Code
Standard Types
jmp_buf
ptrdiff_t
size_t
va_list
wchar_t
Macros
HARRAY
HVAR
MARRAY
MVAR
XARRAY
XVAR
Routines By Category
Buffer Manipulation Routines
Character Routines
Data Conversion Routines
Intrinsic Routines
Math Routines
Memory Allocation Routines
Stream I/O Routines
String Routines
Variable Length Argument Routines
Miscellaneous Routines
Include Files
SFR Definitions
absacc.h
assert.h
ctype.h
float.h
intrins.h
limits.h
math.h
membox.h
setjmp.h
stdarg.h
stddef.h
stdio.h
stdlib.h
string.h
Reference
_alloc_boxf
_alloc_boxh
_alloc_boxn
_atomic_
_bfld_
_calloc_boxf
_calloc_boxh
_calloc_boxn
_chkdouble_
_chkfloat_
_crol_
_cror_
_diswdt_
_einit_
_endatomic_
_free_boxf
_free_boxh
_free_boxn
_getkey
_idle_
_init_boxf
_init_boxh
_init_boxn
_irol_
_iror_
_lrol_
_lror_
_nop_
_pop_
_prior_
_priord_
_push_
_pwrdn_
_sof_
_srvwdt_
_testclear_
_testset_
_tolower
_toupper
_trap_
abs
acos
asin
assert
atan
atan2
atof
atoi
atol
calloc
calloc_b
ceil
cos
cosh
exp
fabs
floor
fmemccpy
fmemchr
fmemcmp
fmemcpy
fmemmove
fmemset
fmod
free
free_b
fstrcat
fstrchr
fstrcmp
fstrcpy
fstrcspn
fstrlen
fstrncat
fstrncmp
fstrncpy
fstrpbrk
fstrpos
fstrrchr
fstrrpbrk
fstrrpos
fstrspn
getchar
gets
hmemcmp
hmemcpy
hstrcmp
hstrcpy
init_mempool
init_mempool_b
isalnum
isalpha
iscntrl
isdigit
isgraph
islower
isprint
ispunct
isspace
isupper
isxdigit
labs
log
log10
longjmp
malloc
malloc_b
memccpy
memchr
memcmp
memcpy
memmove
memset
modf
offsetof
pow
printf
putchar
puts
rand
realloc
realloc_b
scanf
setjmp
sin
sinh
sprintf
sqrt
srand
sscanf
strcat
strchr
strcmp
strcpy
strcspn
strlen
strncat
strncmp
strncpy
strpbrk
strpos
strrchr
strrpbrk
strrpos
strspn
strstr
strtod
strtol
strtoul
tan
tanh
toascii
toint
tolower
toupper
ungetchar
va_arg
va_end
va_start
vprintf
vsprintf
xcalloc
xfree
xinit_mempool
xmalloc
xmemccpy
xmemchr
xmemcmp
xmemcpy
xmemmove
xmemset
xrealloc
xstrcmp
xstrcpy
xstrlen
xstrncpy
Appendix

_sof_

Summary 
#include <intrins.h>

unsigned int _sof_ (
  void *ptr);          /* Tiny Model */

or

unsigned int _sof_ (
  void huge *ptr);     /* Other Models */
Description 

The _sof_ routine converts ptr to a segment offset for segment 0. The result of _sof_ is valid only if the pointer refers to segment 0 in the C16x address space (0000h-0FFFFh).

The _sof_ routine is typically used to initialize source and destination pointers for PEC transfers. The offset value is calculated inline without a call to a library function.

Return Value The _sof_ routine returns the offset of ptr in the 0 segment.
Example 
 1     #include <intrins.h>
 2     #include <reg166.h>
 3
 4     int idata buf [5];
 5
 6     void main (void)  {
 7       DSTP0 = _sof_ ((void huge *)buf);  /* dest pointer */
 8       SRCP0 = (unsigned int) &ADDAT;     /* source pointer */
 9       PECC0 = 0x0205;                    /* transfer 5 words */
10     }

ASSEMBLY LISTING OF GENERATED OBJECT CODE

             ; FUNCTION main (BEGIN  RMASK = @0x4010)
                                    ; SOURCE LINE # 6
                                    ; SOURCE LINE # 7
0000 E6F40000 R    MOV     R4,#SOF (buf)
0004 F6F4E2FD      MOV     0FDE2H,R4
                                    ; SOURCE LINE # 8
0008 E6F4A0FE      MOV     R4,#0FEA0H ; ADDAT
000C F6F4E0FD      MOV     0FDE0H,R4
                                    ; SOURCE LINE # 9
0010 E6600502      MOV     PECC0,#0205H
                                    ; SOURCE LINE # 10
0014 CB00          RET
             ; FUNCTION main (END    RMASK = @0x4010)