1. Trang chủ
  2. » Công Nghệ Thông Tin

Hệ thống nhúng - Chương 4 ppsx

34 411 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 34
Dung lượng 1,35 MB

Nội dung

1 Hệ thống nhúng Thạc sĩ Lê Mạnh Hải Embedded Systems 2 Lesson 3 : NUMBERS Flight plan: • In this lesson we will review all the numerical data types offered by the MPLAB® C30 compiler. • We will learn how much memory the compiler allocates for the numerical variables and we will investigate the relative efficiency of the routines used to perform arithmetic operations by using the MPLAB • SIM Stopwatch as a basic profiling tool. This experience will help you choose the “right” numbers for your embedded-control application, understanding when and how to balance performance and memory resources, real-time constraints and complexity. 3 Preflight checklist • MPLAB IDE, Integrated Development Environment • MPLAB SIM, software simulator • MPLAB C30 compiler (Student Version) 4 The flight 1.MPLAB C30 User Guide 5 The flight unsigned long i,j,k; main () { i = 0x1234; // assign an initial value to i j = 0x5678; // assign an initial value to j k = i * j; // perform the product and store the result in k } 6 Assembly code 7 On optimization (or lack thereof) • In fact, the compiler does not see things this clearly—its role is to create “safe” code, avoiding (at least initially) any assumption and using standard sequences of instructions. • Later on, if the proper optimization options are enabled, a second pass (or more) is performed to remove the redundant code. • During the development and debugging phases of a project, though, it is always good practice to disable all optimizations as they might modify the structure of the code being analyzed and render single-stepping and breakpoint placement problematic. 8 Testing • Set the cursor on the first line containing the initialization of the first variable, and perform a Run To Cursor command to let the program initialize and stop the execution just before the first instruction we want to observe. • Open the Watch window (“View→Watch”) and select WREG0 in the SFR selection box, then click on the “Add SFR” button. • Repeat the operation for WREG1. • Select “i” in the symbol selection box, and click on the “Add Symbol” button. • Repeat the operation for j and k. • Use the “Step Over” function to execute the next few program lines, observing the effects on the registers and variables in the Watch window. As we noted before, when the value of a variable in the Watch window changes, it is conveniently highlighted in red. 9 Post-flight briefing • In this lesson, we have learned not only what data types are available and how much memory is allocated to them, but also how they affect the resulting compiled program— code size and the execution speed. • We used the MPLAB SIM simulator Stopwatch function to measure the number of instruction cycles (and therefore time) required for the execution of a series of code segments. • Some of the information gathered will, hopefully, be useful to guide our actions in the future when balancing our needs for precision and performance in embedded-control applications. 10 Interrupts • What is Interrupts? • Why does ES need more and more Interrupts? • How does Interrupts work? • How can we control Interrupts? [...]... modules • 2 × Serial port interfaces (UARTs) • 4 × Synchronous serial interfaces (SPI and I2C™) • Parallel Master Port 18 internal sources • • • • • 5 × 16-bit Timers 1 × Analog-to-Digital Converter 1 × Analog Comparators module 1 × Real-time Clock and Calendar 1 × CRC generator 19 Exercises 1 2 3 4 Write a program that uses Timer2 as a stopwatch for real-time performance measurements If the width of... of the carry-over into seconds and minutes In 2, set the period register for Timer1 to a value that (assuming a 32-MHz clock) will give us a tenth of a second period between interrupts PR1 = 2500 0-1 ; // 25,000 * 64 * 1 cycle (62.5ns) = 0.1 s Set PORTA lsb as output: TRISA = 0xff00; In 2.1, set the Timer1 prescaler to 1: 64 to help achieve the desired period T1CON = 0x8020; 27 #include ... interrupt The secondary oscillator The real-time clock calendar (RTCC) Managing multiple interrupts • PIC24F family manuals Section 8 Interrupts • How to get them? http://www.microchip.com/stellent/idcplg? IdcService=SS_GET_PAGE&nodeId=2575 21 Nesting of interrupts • Interrupts can be nested, so that a lower-priority interrupt service routine can be interrupted by a higher-priority routine This behavior can... _ISR _T1Interrupt( void) { // insert your code here // // remember to clear the interrupt fl ag before exit _T1IF = 0; } //T1Interrupt 24 main() { // 2 initializations _T1IP = 4; // set Timer1 priority, (4 is the default value) TMR1 = 0; // clear the timer PR1 = period-1; // set the period register // 2.1 confi gure Timer1 module clock source and sync setting T1CON = 0x8000; // check T1CON register options... mechanisms offered by the PIC 24 microcontroller architecture • After a brief review of some of the C language extensions and some practical considerations, we will present a short example of how to use the secondary (low-frequency) oscillator to maintain a real-time clock 11 Preflight checklist • • • MPLAB IDE, MPLAB C30 compiler and the MPLAB SIM simulator Use the “New Project Set-up” checklist to create... instruction of the Interrupt Service Routine (ISR) • In the PIC 24 architecture, the latency is not only very short but it is also fixed for each given interrupt source—only three instruction cycles for internal events and four instruction cycles for external events 13 PIC24F Interrupt • Up to 8 processor exceptions and software traps • 7 user-selectable priority levels • Interrupt Vector Table (IVT) with... //T1Interrupt 28 main() { // 2 init Timer 1, T1ON, 1:1 prescaler, internal clock source _T1IP = 4; // this is the default value anyway TMR1 = 0; // clear the timer PR1 = 2500 0-1 ; // set the period register TRISA = 0xff00; // set PORTA lsb as output• // 2.1 configure Timer1 module T1CON = 0x8020; // enabled, prescaler 1: 64, internal clock // 2.2 init the Timer 1 Interrupt, clear the flag, enable the source _T1IF... cleared • Execute the StepOver command once and the minute counter will be incremented 31 32 The real-time clock calendar (RTCC) • Although it would be somewhat entertaining to develop such code, considering lapsed years and working out all the details, the PIC24FJ128GA010 already has a complete Real-time Clock and Calendar (RTCC) module built in and ready for use 33 RTCC interrupt service routine //... _RTCCInterrupt( void) { // 1.1 clear the interrupt flag _RTCIF = 0; // 1.2 your code here, will be executed only once a year // that is once every 365 x 24 x 60 x 60 x 16,000,000 MCU cycles // that is once every 5 04, 576,000,000,000 MCU cycles } // RTCCInterrupt 34 ... They cannot be called directly by other functions • Ideally, they should not call any other function 15 Interrupt service 1 2 3 4 void attribute (( interrupt)) _T1Interrupt ( void) { // interrupt service routine code here } // _InterruptVector 16 Interrupt service 1 2 3 4 void _ISR _T1Interrupt (void) { // interrupt service routine code here } // _InterruptVector 17 external sources • 5 × External . (UARTs) • 4 × Synchronous serial interfaces (SPI and I2C™) • Parallel Master Port 19 internal sources • 5 × 16-bit Timers • 1 × Analog-to-Digital Converter • 1 × Analog Comparators module • 1 × Real-time. secondary (low-frequency) oscillator to maintain a real-time clock. 12 Preflight checklist • MPLAB IDE, • MPLAB C30 compiler and the MPLAB SIM simulator. • Use the “New Project Set-up” checklist. events and four instruction cycles for external events. 14 PIC24F Interrupt • Up to 8 processor exceptions and software traps • 7 user-selectable priority levels • Interrupt Vector Table (IVT)

Ngày đăng: 01/08/2014, 21:20