Embedded Systems Realtime Operating Systems For Arm Cortex M Microcontrollers 4th Edition Valvano Download
Embedded Systems Realtime Operating Systems For Arm Cortex M Microcontrollers 4th Edition Valvano Download
https://ebookbell.com/product/embedded-systems-realtime-
operating-systems-for-arm-cortex-m-microcontrollers-4th-edition-
valvano-55388368
https://ebookbell.com/product/embedded-systems-realtime-operating-
systems-for-arm-cortexm-microcontrollers-valvano-36189604
https://ebookbell.com/product/embedded-systems-realtime-operating-
systems-for-arm-cortexm-microcontrollers-valvano-36906170
https://ebookbell.com/product/embedded-systems-vol-3-realtime-
operating-systems-for-arm-cortexm-microcontrollers-4th-edition-
jonathan-valvano-35043488
https://ebookbell.com/product/realtime-operating-systems-book-1-the-
theory-the-engineering-of-realtime-embedded-systems-jim-cooling-
cooling-11031606
Realtime Operating Systems Book 2 The Practice The Engineering Of
Realtime Embedded Systems Jim Cooling Cooling
https://ebookbell.com/product/realtime-operating-systems-book-2-the-
practice-the-engineering-of-realtime-embedded-systems-jim-cooling-
cooling-11031644
https://ebookbell.com/product/embedded-and-realtime-operating-
systems-2nd-edition-2nd-kc-wang-52327742
https://ebookbell.com/product/embedded-and-realtime-operating-systems-
kc-wang-5865534
https://ebookbell.com/product/embedded-and-realtime-operating-
systems-2nd-2nd-edition-k-c-wang-52329226
https://ebookbell.com/product/embedded-and-realtime-operating-systems-
kc-wang-35454664
EM BED D ED SY STEM S:
REAL-TIME OPERATING SYSTEMS FOR
ARM CORTEX-M MICROCONTROLLERS
Volume 3
Fourth Edition,
January 2017
Jonathan W. Valvano
Fourth edition
January 2017
ARM and uVision are registered trademarks of ARM Limited.
Cortex and Keil are trademarks of ARM Limited.
Stellaris and Tiva are registered trademarks Texas Instruments.
Code Composer Studio is a trademark of Texas Instruments.
All other product or service names mentioned herein are the trademarks of their respective
owners.
In order to reduce costs, this college textbook has been self-published. For more
information about my classes, my research, and my books, see
http://users.ece.utexas.edu/~valvano/
The overall objective of this book is to teach the design of real-time operating
systems for embedded systems. We define a system as real time if there is a
small and bounded delay between the time when a task should be completed
and when it is actually completed. We will present both fundamental principles
and practical solutions. Interfacing to the microcontroller was presented in
detail in Volume 2 and reviewed in the first two chapters of this book. The
overlap allows this book to stand alone as a text to teach embedded real time
operating systems. This first chapter will review the architecture of the Texas
Instruments MSP432/TM4C family of microcontrollers. When designing
operating systems, we need to understand the details of the architecture. In
particular, we must perform many functions in assembly language. Furthermore,
managing memory will require an intimate understanding of how the processor
accesses memory at the most basic level.
1.1. Introduction to Real-Time Operating Systems
The RTOS must manage resources like memory, processor and I/O. The RTOS will
guarantee strict timing constraints and provide reliable operation. The RTOS will
support synchronization and communication between tasks. As complex systems are
built the RTOS manages the integration of components. Evolution is the notion of a
system changing to improve performance, features and reliability. The RTOS must
manage change. When designing a new system, it is good design practice to build a
new system by changing an existing system. The notion of portability is the ease at
which one system can be changed or adapted to create another system.
The response time or latency is the delay from a request to the beginning of the
service of that request. There are many definitions of bandwidth. In this book we
define bandwidth as the number of information bytes/sec that can be transferred or
processed. We can compare and contrast regular operating systems with real-time
operating systems.
Regular OS Real-time OS
Complex Simple
Best effort Guaranteed response
Fairness Strict timing constraints
Average bandwidth Minimum and maximum
limits
Unknown components Known components
Unpredictable behavior Predictable behavior
Plug and play Upgradable
Table 1.1. Comparison of regular and real-time operating systems.
From Table 1.1 we see that real-time operating systems have to be simple so they may be
predictable. While traditional operating systems gauge their performance in terms of
response time and fairness, real-time operating systems target strict timing constraints and
upper, lower bounds on bandwidth. One can expect to know all the components of the
system at design time and component changes happen much more infrequently.
Checkpoint 1.1: What does real time mean?
1.2.2. Memory
One kibibyte (KiB) equals 1024 bytes of memory. The TM4C123 has 256 kibibytes
(218 bytes) of flash ROM and 32 kibibytes (215 bytes) of RAM. The MSP432 also has
256 kibibytes (218 bytes) of flash ROM but has 64 kibibytes (216 bytes) of RAM. We
view the memory as continuous virtual address space with the RAM beginning at
0x2000.0000, and the flash ROM beginning at 0x0000.0000.
The microcontrollers in the Cortex-M family differ by the amount of memory and by
the types of I/O modules. There are hundreds of members in this family; some of them
are listed in Table 1.2. The memory maps of TM4C123 and MSP432 are shown in
Figure 1.7. Although this course focuses on two microcontrollers from Texas
Instruments, all ARM Cortex-M microcontrollers have similar memory maps. In
general, Flash ROM begins at address 0x0000.0000, RAM begins at 0x2000.0000,
the peripheral I/O space is from 0x4000.0000 to 0x5FFF.FFFF, and I/O modules on
the private peripheral bus exist from 0xE000.0000 to 0xE00F.FFFF. In particular, the
only differences in the memory map for the various members of the Cortex-M family
are the ending addresses of the flash and RAM.
Part number RAM Flash I/O I/O modules
MSP432P401RIPZ 64 256 84 floating point, DMA
TM4C123GH6PM 32 256 43 floating point, CAN, DMA,
USB, PWM
TM4C1294NCPDT 256 1024 90 floating point, CAN, DMA,
USB, PWM, Ethernet
STM32F051R8T6 8 64 55 DAC, Touch sensor, DMA,
I2S, HDMI, PWM
MKE02Z64VQH2 4 64 53 PWM
KiB KiB pins
Table 1.2. Memory and I/O modules (all have SysTick, RTC, timers, UART, I2C, SSI, and
ADC).
Having multiple buses means the processor can perform multiple tasks in parallel.
On the TM4C123, general purpose input/output (GPIO) ports can be accessed using
either the PPB or AHPB. The following is some of the tasks that can occur in parallel
ICode bus Fetch opcode from ROM
DCode bus Read constant data from ROM
System bus Read/write data from RAM or I/O, fetch opcode from RAM
PPB Read/write data from internal peripherals like the NVIC
AHPB Read/write data from internal peripherals like the USB
Instructions and data are accessed using a common bus on a von Neumann machine.
The Cortex-M processor is a Harvard architecture because instructions are fetched
on the ICode bus and data accessed on the system bus. The address signals on the
ARM Cortex-M processor include 32 lines, which together specify the memory
address (0x0000.0000 to 0xFFFF.FFFF) that is currently being accessed. The
address specifies both which module (input, output, RAM, or ROM) as well as
which cell within the module will communicate with the processor. The data signals
contain the information that is being transferred and also include 32 bits. However,
on the system bus it can also transfer 8-bit or 16-bit data. The control signals specify
the timing, the size, and the direction of the transfer.
Figure 1.7. Memory map of the TM4C123 with 256k ROM and 32k RAM and
the MSP432 with 256k ROM and 64k RAM.
Checkpoint 1.6: What do we put in RAM and what do we put in ROM?
Checkpoint 1.7: Can software write into the ROM of our microcontroller?
The ARM Cortex-M processor uses bit-banding to allow read/write access to
individual bits in RAM and some bits in the I/O space. There are two parameters that
define bit-banding: the address and the bit you wish to access. Assume you wish to
access bit b of RAM address 0x2000.0000+n, where b is a number 0 to 7. The
aliased address for this bit will be
0x2200.0000 + 32*n + 4*b
Reading this address will return a 0 or a 1. Writing a 0 or 1 to this address will
perform an atomic read-modify-write modification to the bit.
If we consider 32-bit word-aligned data in RAM, the same bit-banding formula still
applies. Let the word address be 0x2000.0000+n. n starts at 0 and increments by 4.
In this case, we define b as the bit from 0 to 31. In little-endian format, bit 1 of the
byte at 0x2000.0001 is the same as bit 9 of the word at 0x2000.0000.The aliased
address for this bit will still be
0x2200.0000 + 32*n + 4*b
Examples of bit-banded addressing are listed in Table 1.3. Writing a 1 to location
0x2200.0018 will set bit 6 of RAM location 0x2000.0000. Reading location
0x2200.0024 will return a 0 or 1 depending on the value of bit 1 of RAM location
0x2000.0001.
RAM Offset Bit b Bit-banded
address n alias
0x2000.0000 0 0 0x2200.0000
0x2000.0000 0 1 0x2200.0004
0x2000.0000 0 2 0x2200.0008
0x2000.0000 0 3 0x2200.000C
0x2000.0000 0 4 0x2200.0010
0x2000.0000 0 5 0x2200.0014
0x2000.0000 0 6 0x2200.0018
0x2000.0000 0 7 0x2200.001C
0x2000.0001 1 0 0x2200.0020
0x2000.0001 1 1 0x2200.0024
Table 1.3. Examples of bit-banded addressing.
Checkpoint 1.8: What address do you use to access bit 3 of the byte at
0x2000.1010?
Checkpoint 1.9: What address do you use to access bit 22 of the word at
0x2001.0000?
The other bit-banding region is the I/O space from 0x4000.0000 through
0x400F.FFFF. In this region, let the I/O address be 0x4000.0000+n, and let b
represent the bit 0 to 7. The aliased address for this bit will be 0x4200.0000 + 32*n
+ 4*b
Checkpoint 1.10: What address do you use to access bit 7 of the byte at
0x4000.0030?
1.3. Cortex-M Processor Architecture
1.3.1. Registers
The registers on an ARM Cortex-M processor are depicted in Figure 1.8. R0 to R12
are general purpose registers and contain either data or addresses. Register R13
(also called the stack pointer, SP) points to the top element of the stack. Actually,
there are two stack pointers: the main stack pointer (MSP) and the process stack
pointer (PSP). Only one stack pointer is active at a time. In a high-reliability
operating system, we could activate the PSP for user software and the MSP for
operating system software. This way the user program could crash without disturbing
the operating system. Most of the commercially available real-time operating systems
available on the Cortex M will use the PSP for user code and MSP for OS code.
Register R14 (also called the link register, LR) is used to store the return location for
functions. The LR is also used in a special way during exceptions, such as interrupts.
Register R15 (also called the program counter, PC) points to the next instruction to
be fetched from memory. The processor fetches an instruction using the PC and then
increments the PC by the length (in bytes) of the instruction fetched.
Checkpoint 1.11: How are registers R13 R14 and R15 special?
Figure 1.9. The program status register of the ARM Cortex-M processor.
The N, Z, V, C, and Q bits signify the status of the previous ALU operation. Many
instructions set these bits to signify the result of the operation. In general, the N bit is
set after an arithmetical or logical operation signifying whether or not the result is
negative. Similarly, the Z bit is set if the result is zero. The C bit means carry and is
set on an unsigned overflow, and the V bit signifies signed overflow. The Q bit is the
sticky saturation flag, indicating that “saturation” has occurred, and is set by
the SSAT and USAT instructions.
The T bit will always be 1, indicating the ARM Cortex-M processor is executing
Thumb instructions. The ICI/IT bits are used by interrupts and by IF-THEN
instructions. The ISR_NUMBER indicates which interrupt if any the processor is
handling. Bit 0 of the special register PRIMASK is the interrupt mask bit, or I bit. If
this bit is 1 most interrupts and exceptions are not allowed. If the bit is 0, then
interrupts are allowed. Bit 0 of the special register FAULTMASK is the fault mask
bit. If this bit is 1 all interrupts and faults are disallowed. If the bit is 0, then
interrupts and faults are allowed. The nonmaskable interrupt (NMI) is not affected by
these mask bits. The BASEPRI register defines the priority of the executing
software. It prevents interrupts with lower or equal priority from interrupting the
current execution but allows higher priority interrupts. For example if BASEPRI
equals 3, then requests with level 0, 1, and 2 can interrupt, while requests at levels 3
and higher will be postponed. The details of interrupt processing will be presented in
detail, later in the book.
Checkpoint 1.12: Where is the I bit and what does it mean?
1.3.2. Stack
The stack is a last-in-first-out temporary storage. Managing the stack is an important
function for the operating system. To create a stack, a block of RAM is allocated for
this temporary storage. On the ARM Cortex-M processor, the stack always operates
on 32-bit data. The stack pointer (SP) points to the 32-bit data on the top of the stack.
The stack grows downwards in memory as we push data on to it so, although we
refer to the most recent item as the “top of the stack” it is actually the item stored at
the lowest address! To push data on the stack, the stack pointer is first decremented
by 4, and then the 32-bit information is stored at the address specified by SP. To pop
data from the stack, the 32-bit information pointed to by SP is first retrieved, and then
the stack pointer is incremented by 4. SP points to the last item pushed, which will
also be the next item to be popped. The processor allows for two stacks, the main
stack and the process stack, with independent copies of the stack pointer. The boxes
in Figure 1.10 represent 32-bit storage elements in RAM. The grey boxes in the
figure refer to actual data stored on the stack, and the white boxes refer to locations
in memory that do not contain stack data. This figure illustrates how the stack is used
to push the contents of Registers R0, R1, and R2 in that order. Assume Register R0
initially contains the value 1, R1 contains 2 and R2 contains 3. The drawing on the
left shows the initial stack. The software executes these six
PUSH {R0}
PUSH {R1}
PUSH {R2}
POP {R3}
POP {R4}
POP {R5}
Figure 1.10. Stack picture showing three numbers first being pushed, then
three numbers being popped.
We can push and pop multiple registers; these six instructions could be replaced with
PUSH {R0-R2}
POP {R3-R5}
The instruction PUSH {R0} saves the value of R0 on the stack. It first decrements SP
by 4, and then it stores the contents of R0 into the memory location pointed to by SP.
The right-most drawing shows the stack after the push occurs three times. The stack
contains the numbers 1 2 and 3, with 3 on top. The instruction POP{R3} retrieves
data from the stack. It first moves the value from memory pointed to by SP into R3,
and then it increments SP by 4. After the pop occurs three times the stack reverts to
its original state and registers R3, R4 and R5 contain 3 2 1 respectively. We define
the 32-bit word pointed to by SP as the top entry of the stack. If it exists, we define
the 32-bit data immediately below the top, at SP+4, as next to top. Proper use of the
stack requires following these important rules
1. Functions should have an equal number of pushes and pops
2. Stack accesses (push or pop) should not be performed outside the
allocated area
3. Stack reads and writes should not be performed within the free
area
4. Stack push should first decrement SP, then store the data
5. Stack pop should first read the data, and then increment SP
Functions that violate rule number 1 will probably crash when incorrect data are
popped off at a later time. Violations of rule number 2 can be caused by a stack
underflow or overflow. Overflow occurs when the number of elements became larger
than the allocated space. Stack underflow is caused when there are more pops than
pushes, and is always the result of a software bug. A stack overflow can be caused
by two reasons. If the software mistakenly pushes more than it pops, then the stack
pointer will eventually overflow its bounds. Even when there is exactly one pop for
each push, a stack overflow can occur if the stack is not allocated large enough. The
processor will generate a bus fault when the software tries read from or write to an
address that doesn’t exist. If valid RAM exists below the stack then further stack
operations will corrupt data in this memory.
First, we will consider the situation where the allocated stack area is placed at the
beginning of RAM. For example, assume we allocate 4096 bytes for the stack from
0x2000.0000 to 0x2000.0FFF; see the left side of Figure 1.11. The SP is initialized
to 0x2000.1000, and the stack is considered empty. If the SP becomes less than
0x2000.0000 a stack overflow has occurred. The stack overflow will cause a bus
fault because there is nothing at address 0x1FFF.FFFC. If the software tries to read
from or write to any location greater than or equal to 0x2000.1000 then a stack
underflow has occurred. At this point the stack and global variables exist at
overlapping addresses. Stack underflow is a very difficult bug to recognize, because
the first consequence will be unexplained changes to data stored in global variables.
Figure 1.11. Drawings showing two possible ways to allocate the stack area
in RAM.
Next, we will consider the situation where the allocated stack area is placed at the
end of RAM. The TM4C123 has 32 KiB of RAM from 0x2000.0000 to
0x2000.7FFF. So in this case we allocate the 4096 bytes for the stack from
0x2000.7000 to 0x2000.7FFF, shown on the right side of Figure 1.11. The SP is
initialized to 0x2000.8000, and the stack is considered empty. If the SP becomes less
than 0x2000.7000 a stack overflow has occurred. The stack overflow will not cause
a bus fault because there is memory at address 0x2000.6FFC. Stack overflow in this
case is a very difficult bug to recognize, because the first consequence will be
unexplained changes to data stored below the stack region. If the software tries to
read from or write to any location greater than or equal to 0x2000.8000 then a stack
underflow has occurred. In this case, stack underflow will cause a bus fault.
Executing an interrupt service routine will automatically push eight 32-bit words
ontothe stack. Since interrupts are triggered by hardware events, exactly when they
occur is not under software control. Therefore, violations of rules 3, 4, and 5 will
cause erratic behavior when operating with interrupts. Rules 4 and 5 are followed
automatically by the PUSH and POP instructions.
1.3.4. Reset
A reset occurs immediately after power is applied and can also occur by pushing the
reset button available on most boards. After a reset, the processor is in thread mode,
running at a privileged level, and using the MSP stack pointer. The 32-bit value at
flash ROM location 0 is loaded into the SP. All stack accesses are word aligned.
Thus, the least significant two bits of SP must be 0. A reset also loads the 32-bit
value at location 4 into the PC. This value is called the reset vector. All instructions
are halfword aligned. Thus, the least significant bit of PC must be 0. However, the
assembler will set the least significant bit in the reset vector, so the processor will
properly initialize the Thumb bit (T) in the PSR. On the Cortex-M processor, the T
bit should always be set to 1. On reset, the processor initializes the LR to
0xFFFFFFFF.
In a system with memory-mapped I/O, as shown in Figure 1.13, the I/O ports are
connected to the processor in a manner similar to memory. I/O ports are assigned
addresses, and the software accesses I/O using reads and writes to the specific I/O
addresses. These addresses appear like regular memory addresses, except accessing
them results in manipulation of a functionality of the mapped I/O port, hence the term
memory-mapped I/O. As a result, the software inputs from an input port using the
same instructions as it would if it were reading from memory. Similarly, the software
outputs from an output port using the same instructions as it would if it were writing
to memory.
The LaunchPad board can also be used as a JTAG debugger for another target by
removing the VDD jumper and connecting the target to PC0=TCK, PC1=TMS,
PC2=TDI, and PC3=TDO
IO Ain 0 1 2 3 4 5 6 7 8 9 14
PA0 Port U0Rx CAN1Rx
PA1 Port U0Tx CAN1Tx
PA2 Port SSI0Clk
PA3 Port SSI0Fss
PA4 Port SSI0Rx
PA5 Port SSI0Tx
PA6 Port I2C1SCL M1PWM2
PA7 Port I2C1SDA M1PWM3
PB0 USB0ID Port U1Rx T2CCP0
PB1 USB0VBUS Port U1Tx T2CCP1
PB2 Port I2C0SCL T3CCP0
PB3 Port I2C0SDA T3CCP1
PB4 Ain10 Port SSI2Clk M0PWM2 T1CCP0 CAN0Rx
PB5 Ain11 Port SSI2Fss M0PWM3 T1CCP1 CAN0Tx
PB6 Port SSI2Rx M0PWM0 T0CCP0
PB7 Port SSI2Tx M0PWM1 T0CCP1
PC4 C1- Port U4Rx U1Rx M0PWM6 IDX1 WT0CCP0 U1RTS
PC5 C1+ Port U4Tx U1Tx M0PWM7 PhA1 WT0CCP1 U1CTS
PC6 C0+ Port U3Rx PhB1 WT1CCP0 USB0epen
PC7 C0- Port U3Tx WT1CCP1 USB0pflt
PD0 Ain7 Port SSI3Clk SSI1Clk I2C3SCL M0PWM6 M1PWM0 WT2CCP0
PD1 Ain6 Port SSI3Fss SSI1Fss I2C3SDA M0PWM7 M1PWM1 WT2CCP1
PD2 Ain5 Port SSI3Rx SSI1Rx M0Fault0 WT3CCP0 USB0epen
PD3 Ain4 Port SSI3Tx SSI1Tx IDX0 WT3CCP1 USB0pflt
PD4 USB0DM Port U6Rx WT4CCP0
PD5 USB0DP Port U6Tx WT4CCP1
PD6 Port U2Rx M0Fault0 PhA0 WT5CCP0
PD7 Port U2Tx PhB0 WT5CCP1 NMI
PE0 Ain3 Port U7Rx
PE1 Ain2 Port U7Tx
PE2 Ain1 Port
PE3 Ain0 Port
PE4 Ain9 Port U5Rx I2C2SCL M0PWM4 M1PWM2 CAN0Rx
PE5 Ain8 Port U5Tx I2C2SDA M0PWM5 M1PWM3 CAN0Tx
PF0 Port U1RTS SSI1Rx CAN0Rx M1PWM4 PhA0 T0CCP0 NMI C0o
PF1 Port U1CTS SSI1Tx M1PWM5 PhB0 T0CCP1 C1o TRD1
PF2 Port SSI1Clk M0Fault0 M1PWM6 T1CCP0 TRD0
PF3 Port SSI1Fss CAN0Tx M1PWM7 T1CCP1 TRCLK
PF4 Port M1Fault0 IDX0 T2CCP0 USB0epen
Table 1.4. PMCx bits in the GPIOPCTL register on the LM4F/TM4C specify alternate
functions. PB1, PB0, PD4 and PD5 are hardwired to the USB device. PA0 and PA1 are
hardwired to the serial port. PWM is not available on LM4F120.
Figure 1.16. Switch and LED interfaces on the Texas Instruments TM4C123
LaunchPad Evaluation Board. The zero ohm resistors can be removed so the
corresponding pin can be used for its regular purpose.
Figure 1.22. I/O port pins for the MSP432P401R microcontroller. (Six pins
on Port J not shown).
The MSP432 LaunchPad evaluation board (Figure 1.23) is a low-cost development
board available as part number MSP-EXP432P401R from www.ti.com and from
regular electronic distributors like Digikey, Mouser, element14, and Avnet. The
board includes XDS110-ET, an open-source onboard debugger, which allows
programming and debugging of the MSP432 microcontroller. The USB interface is
used by the debugger and includes a serial channel.
Fig. 25.
The pressing iron can now be used, the curls—be they many or few
—arranged, a pair of side-combs placed in position if desired, and the
front is finished, as above shown.
There are other fronts with ringlet curls beside those just
described. For instance, there is a mounted front of a diamond
shape, which is made to slide, technically called a “diamond” front. It
is made as follows: cut off two pieces of galloon about eight or nine
inches in length each. Sew the ends (through and through, not over
and over) neat and firm; these are for the two sides. Place one of
them upon a block, in the position it is intended to be worn. The ends
of the galloon (where it has been sewn) must be uppermost at any
place except a corner. Open the ends and hammer slightly, so as to
make them lie as flat as possible. Take four points, and spread out
the galloon in a diamond shape, so that it will be about two inches
deep, and perhaps four inches long. Now take your needle and
cotton, points, &c., and baste out in the required form; the upper and
lower bastings (where the springs go) to be somewhat pointed; the
ends are to be square, equal to the width of the galloon forming the
strings. Make another mounting on the corresponding side of the
block, and both must be alike in every particular. Upon the block
(between the right and left sides of the mountings) a space of two
inches or more should be left, because the wearer’s own hair must be
seen when the curls are worn. Bear in mind this is to be a sliding
front, and the lady will be able to adjust the curls to her own wishes
or taste. Now, the two sides being in their proper positions, and
firmly secured by means of the basting stitches, sew a piece of
galloon on one side only from one end to the other; the reason for
doing so will presently be given. Cut off sufficient galloon for the
strings, and this must be long enough to encircle the head, leaving
plenty to tie in a double bow as well. Find the centre of the galloon,
and temporarily fasten it with a point between the mounts. One of
these strings is to be continued along the mount, corresponding with
that upon which a piece of galloon has been sewn, the remainder
being fastened by means of a point in the neck. The other half is to be
abruptly turned back over the crown, and temporarily secured to
keep it out of the way. Measure off two springs, grind the ends, cover
with narrow galloon as previously instructed, and fix in their
respective places. Put on the net; sew it to the inner edges of the
mount only, and to both sides of the centre galloons and springs. The
mountings are now ready for the hair.
Take sufficient hair, say one ounce of twelve-inch ringlet, and
divide it equally. Weave a top row first, and ordinary front weft with
the remainder. Do the same with the second lot of hair. Remember
what I have said before—“All curls should turn to the face.” Sew on
the weft, beginning at the bottom of the lower galloon, turn the
corners neatly; let the weft appear in regular rows, and, lastly, sew on
the top row. Comb out the hair and curl it over the fingers in proper
form before doing the other side, which, when done, is to be treated
in a similar manner. Warm your pressing iron, divide the weft in
conveniently small portions, and press carefully. Take the mountings
off the block, and now I will give my reason for sewing on the first
piece of galloon, namely, because this is the mounting intended to
slide. Cut off another piece of galloon an inch longer than appears to
be necessary. Turn in about half an inch at one end, and sew the
corners securely to one of the ends of the mount. Neatly stitch the
edge of this piece of galloon to the edge of that which is attached to
the mount, but before fastening off, turn in the free end as you did at
the beginning. Sew along the other edge of the galloon as before, and
secure the stitches. Now there is a hollow space for the string to
travel through, and a bodkin is the necessary instrument for leading
it in the first instance. Replace the front upon the block, dress and
arrange the curls as required.
Wing Fronts are made in a similar way, but instead of being of a
diamond form they are shaped like birds’ wings; the narrow end, of
course, towards the upper part of the head, and the broad part near
the ears. Mounts of this shape are very pretty, the curls lie nicely
together, and, furthermore, they are easy to wear.
Bandeaux, or as they are more generally termed, “bands,” embrace
a variety of designs to suit different requirements. Some are made
plain with a patent parting of silk or skin; others have net, gauze, or
human hair foundations, and latterly a material called “Yak-hair” has
been used, which answers the same purpose, and is less expensive.
Then, again, there are bandeaux with waved hair or waved hair and
“fringes,” while others have long hair attached for combing in with
the natural hair at the back. Indeed, this branch of the business
offers a wide field for the display of taste, judgment, and ability. The
hair used to be “banded” and then secured at or near the end of the
mount, and dressing “bands” and “fronts” in the days of my
apprenticeship was a continual source of employment and profit. The
hair, at the time I speak of, was generally worn smooth, oils and
pomades were in request, and rough hairdressing, it was thought,
showed want of skill on the part of the hairdresser. But styles are
ever-changing, and what is approved to-day will, perhaps, be
condemned to-morrow. From smooth hairdressing we come to that
which is dry, wavy, frizzy and crisp, and I am disposed to think that
ladies sometimes imagine a coiffure should present a rough
appearance to obtain approval. This loose method of arranging the
hair is to the advantage of bandeaux, and coverings for bald places,
because the false piece can be more easily arranged by the wearer.
Fig. 26.
Having well secured the mount which, let me say, should always be
tight and firm upon the block, take a piece of ribbon, exactly the
width of the centre between the springs, and sew thereon, the object
of this being to give a neat appearance to the band when off the
block, and, also, to conceal the work in the parting which otherwise
could be seen. The net should next be attached, as directed in
previous instructions, and then the mount will be completed.
Fig. 27.
In addition to the parting, take an ounce of the best hair (say)
sixteen inches long (the hair in the parting being of the same length),
and weave a top row. Weave the remainder of the hair in rather fine
front weft, and then divide, marking the division, however, by merely
tying a piece of string in the place. The parting should next be dealt
with; turn in the edges as previously directed, “tacking” as you
proceed, and finishing with the lower portion. Sew the parting in its
proper position, beginning with the two corners in front; it will then
be as well to sew it at the top, and afterwards the sides. The parting
should be straight, and exactly in the centre; perfectly smooth, and
not stretched or puckered in any direction. The weft must be sewn on
next, but should there be a rather wide space between the parting
and the top edge of the galloon, put in two or three rows of weft first.
Sew the weft along the bottom and top edge of the galloon and then
at regular intervals until one side is completed. Do the same with the
other side, and, finally, put on the top row.
The number of rows will, of course, depend upon the quantity of
weft, of which you must be the judge, and calculate accordingly.
Press, tie the hair of each side together or loosely plait in three,
leaving the wearer to arrange it when upon the head.
What I have already said is sufficient to show the learner how to
make a “band” with a parting of either silk or skin, or any other
similar substance. Indeed, when a “band” has to be produced for a
very low price, it can be made without a patent parting at all, as the
parting can be made to consist of weft only. To do this, the springs
need not be so wide apart, and the intervening space is to be filled up
with weft, sewn close, one row after the other, beginning at the
bottom. If the weft is well done and fine, it will lie flat, then, with the
comb, a parting should be made, and pressed into shape. True, the
wearer cannot show the parting, but such work is designed for
elderly ladies, and the cap border, or other head-gear hides it
completely. Partings are generally used, however, and I merely
allude to this very plain way of making a “band” to suit humble and,
necessarily, economical customers.
For making a Waved Bandeau, with fringe, turn to the
instructions for mounting already given, and notice the mount upon
the block. A mount of a similar description is to be made, but
without the arched piece of galloon in the centre, for the parting
being of a transparent material, the skin of the head should be seen
through it. Besides, a dark line of galloon just in the most
conspicuous spot would be sadly out of order.
Proceed as follows: Take a clean block, and mark with a pencil the
exact dimensions of the mount, in its proper place. Be very particular
about this, because the pencilled lines you should strictly adhere to.
These lines, then, having been made, commence by driving a point
through the end of the galloon near the crown, and on your right side
as the tracing faces you. Continue the galloon down to the angle upon
the forehead where the spring goes, and fix with a point. Keep the
galloon flat, and turn it towards the ear where it is also to be secured.
Pass the galloon along the top, and when in the centre of the block
(being mindful of the depth of the parting) drive in another point.
For the other side continue the galloon as before, and end on the top
of the block in a corresponding position to that where it begins. The
mount should then resemble the illustration to which your attention
is directed (Fig. 26), but with this difference—the centre arched
portion of the galloon is absent.
The galloon is now to be “basted,” and preceding instructions
observed. The mount being tight and firm, the strings are to be
neatly sewn on, fixed in the neck, and the long ends put out of the
way as before. It is now seen that there is a gap in the centre, and
unless some kind of stay is put at the lower part, the parting will, in
all probability, soon get torn. To obviate this, it is usual to employ a
material called “silk-worm gut,” which is securely fastened across the
bottom, or nearly at the bottom, for the parting should be so
arranged as to lie flat on the forehead—the closer it lies the better.
Sometimes a white horse hair is used for the purpose, and
occasionally white silk, but whatever the material, it should be strong
and durable. It is usual, also, to put additional “stays” about an inch
apart, right along the parting, for they are not seen upon the head,
and much greater strength is given to the article. Indeed, when the
parting is more than three inches deep it is absolutely necessary to
do so.
Put on the springs as before, let them be narrow, and in this
instance they may be covered with black tape, as the galloon upon
which they will be sewn conceals them from view when off the block.
Now attach the net, and the mounting is completed.
A mount, let me observe, should be accurately designed, and
measurements taken from any convenient place upon the block must
correspond, one side with the other. Indeed, where much board-
work is done, it is a strong recommendation to be a good “mounter,”
and a correct eye is not among the least of such a man’s
qualifications. It matters not how well done the knotting, weaving, or
sewing may be; should the mount be inexact, the work is faulty from
the very commencement, and might result in the article being
returned. This is best avoided. Therefore, make it a rule to “start fair”
with your work, and, if slow, be sure, remembering at all times that
“practice makes perfect,” and how important it is that strict attention
should be paid to minute details.
The mount having been finished, the next thing is to put in a
transparent parting, with a “fringe.” This “fringe” should be of short,
curled hair, which can be arranged when the job is finished. In
transparent partings generally there are no edges to turn up, like
those made of silk or skin, and alluded to before. Commence by
sewing the parting to the corner of the mount on your right hand
first, finish off, and then attach it to the corresponding corner on the
left side, keeping the line of parting exactly in the middle. It will then
be proper to sew the top; see that it is firm, straight, and smooth, and
conclude by stitching the sides. About the same length and quantity
of hair will be required for this as was used in the previous one;
therefore, weave a top row, divide the weft, and proceed according to
the instructions already given. Sew the weft on in rows, beginning at
the bottom; neatly and securely turn the corners; and, lastly, affix the
top row. Press, and dress as required; take it off the block, draw out
the basting stitches, and the work is done, unless you wish to give a
waviness to the hair.
Fig. 28.
Of course the hair can be left straight if desired, but if waved (it
need not be very strong), the effect is much more natural. Put the
band on the block again, and the hair can be waved in either of the
following ways:—(1) By plaiting. Slightly damp the hair, and make
two or more three-plaits upon each side. Plait rather tight, and pinch
with moderately warm irons, but only sufficient to remove the
moisture, if any, and to fix the wave. This, perhaps, is the most
simple and natural way of doing it. (2) With hair-pins. Divide the
side-hair in two or three equal portions, so as to make the wave
regular and uniform. Take a long hair-pin, and with the left hand
hold it close to the roots of one of the pieces, keeping the prongs
rather wide apart. Then, with the right hand, entwine the piece of
hair in and out, as though forming with it any number of figures 8.
Having come to the ends (or done as much as you consider
necessary), push up close to the head of the pin, turning back one of
the points to keep the hair well in place. Do the same with all; pinch
with warm irons, and allow it to be quite cold before drawing out the
pins. (3) Curling-irons are used also for waving the hair, but,
although permissible when dressing a lady’s hair, I do not advise
their use for work of this description. There are other methods of
waving hair, as with string, card, wire, etc., but what I have
described, if carefully done, will answer nearly all requirements.
Fig. 29.
Fig. 30.
Fig. 31.
Take some straight hair about six inches long;[18] put it between the
drawing brushes, and place a weight thereon as though you were
going to do weaving. Draw out a weft and double it over at the roots,
leaving them (the roots) rather long. You have now made a loop,
which is to be held firmly between the thumb and finger of the left
hand. Take the knotting needle and hold it with the thumb and finger
of the right hand; insert the hook in one opening of the net and allow
it to pass out at the next. By this movement you have taken up a
thread (or line) upon which you are going to knot the hair. Now bring
the looped portion of the hair forward and hook it with the needle;
Fig. 31 clearly indicates the position. Turn the open part of the hook
downwards, but keeping firm hold of the hair (by a little dexterity
you may avoid catching hold of the net) and draw the needle back
again. Let the open part of the hook now face the weft, and by a slight
movement of the needle the loop will slip back a little towards the
handle while you catch hold of or hook the weft again. This is well
shown in the following illustration.
Fig. 32.
ebookbell.com