Library

Video Player is loading.
 
Current Time 6:22
Duration 24:16
Loaded: 0.00%
 
x1.00


Back

Games & Quizzes

Training Mode - Typing
Fill the gaps to the Lyric - Best method
Training Mode - Picking
Pick the correct word to fill in the gap
Fill In The Blank
Find the missing words in a sentence Requires 5 vocabulary annotations
Vocabulary Match
Match the words to the definitions Requires 10 vocabulary annotations

You may need to watch a part of the video to unlock quizzes

Don't forget to Sign In to save your points

Challenge Accomplished

PERFECT HITS +NaN
HITS +NaN
LONGEST STREAK +NaN
TOTAL +
- //

We couldn't find definitions for the word you were looking for.
Or maybe the current language is not supported

  • 00:03

    Welcome to the Modern Embedded Systems Programming course.

  • 00:06

    My name is Miro Samek and in this lesson I have decided to finally give in to the popular

  • 00:11

    demand and switch the development toolset from IAR to the free and unlimited GNU-ARM

  • 00:17

    compiler and the Eclipse-based Integrated Development Environment.

  • 00:24

    The switch of the toolset is actually a good opportunity to review the code and to see

  • 00:28

    what "code portability" means in practice.

  • 00:31

    As you will see, much of the code you've written so far will work with GNU-ARM without any

  • 00:35

    changes, mostly due to the compliance with the Cortex Microcontroller Software Interface

  • 00:40

    Standard (CMSIS).

  • 00:42

    However, a few IAR-specific extensions in the startup code as well as board-support

  • 00:47

    package will have to be replaced with the GNU compiler equivalents.

  • 00:51

    So, today let's start with downloading and installing a development toolset for GNU-ARM.

  • 00:57

    Actually, there are many choices of such toolsets, but you need to look for a toolset that supports

  • 01:02

    your board.

  • 01:04

    Here, the most important factor is the support for the specific debugger interface, which

  • 01:08

    in case of the TivaC LaunchPad board is the Stellaris-ICDI.

  • 01:16

    Since the board comes from Texas Instruments, the logical place to look is the TI.com website,

  • 01:22

    where indeed you can find the toolset called Code Composer Studio (CCS).

  • 01:27

    As usual these days, instead of giving you a specific fixed URL for downloading CCS,

  • 01:32

    which most likely won't work in a few weeks from now, I recommend using the search box.

  • 01:43

    So, when you search for CCS, you quickly find the right web-page.

  • 01:54

    In the download section, you can read that the CCS tool can be used for free with no

  • 01:59

    limits with the GNU-GCC toolset.

  • 02:06

    Click on the Windows download, which will lead you to the registration page and some

  • 02:10

    more forms to fill to comply with the export control regulations.

  • 02:15

    Eventually, however, you should be able to download the CCS setup program for windows.

  • 02:24

    You need to launch it and agree to the licensing terms.

  • 02:28

    In the next step you can choose the installation directory.

  • 02:30

    You can leave the default, or choose your own destination, but I would strongly recommend

  • 02:35

    against using directory names with spaces or any non-standard characters.

  • 02:42

    The following step allows you to choose the CCS components.

  • 02:46

    Here you need to expand the 32-bit ARM MCUs and select the Tiva-C Series support.

  • 02:52

    Also, you need to explicitly select the GCC ARM Compiler.

  • 03:02

    You don't need to make any more choices, so finally click Finish to start the installation,

  • 03:08

    which can take a couple of minutes.

  • 03:13

    When you launch Code Composer Studio, it will ask you for the location of the "workspace".

  • 03:18

    The concept of a "workspace" is common in all toolsets based on Eclipse and is intended

  • 03:23

    to group together related projects.

  • 03:27

    From what I see, most people tend to use one default workspace for everything they do,

  • 03:32

    but I recommend that you use separate workspaces for your different project groups.

  • 03:37

    Specifically, I recommend that you use a dedicated workspace for this Embedded Programming Course.

  • 03:45

    Since I keep all the projects for this course in the directory "embedded_programming", I

  • 03:50

    also create the CCS workspace there, in the "ccs" subdirectory.

  • 04:01

    So finally you are ready to create your first project.

  • 04:05

    This part is specific to this particular re-packaging of Eclipse as Code Composer Studio, but the

  • 04:11

    general process is similar in all Eclipse based Integrated Development Environments.

  • 04:18

    The first selection you make for a new project is the embedded target.

  • 04:22

    Here you need to choose the Tiva-C family and the specific TM4C MCU within the family

  • 04:28

    that is soldered on your TivaC LaunchPad board.

  • 04:32

    Next, you choose the connection to the target, which in case of your LanchPad is the Stellaris-ICDI.

  • 04:40

    Please note that the support for this particular debugger interface was the primary reason

  • 04:44

    you selected the CCS toolset in the first place.

  • 04:51

    In the next step, you need to name the project.

  • 04:54

    Here, I suggest a generic name "lesson" for projects belonging to this Embedded Programming

  • 04:59

    Course.

  • 05:00

    This name will be fitting for all upcoming lessons, because you will simply clone this

  • 05:04

    original project instead of creating a new project from scratch each time.

  • 05:10

    For the same reason, you also cannot create the project in the default location inside

  • 05:14

    the workspace directory.

  • 05:16

    Instead, you create the project in the directory where you keep all previous lessons.

  • 05:21

    On my machine this is "embedded_programming", but it can be different on your computer.

  • 05:29

    To finish with the project location, you need to add the lesson19 sub-directory for this

  • 05:34

    particular project

  • 05:36

    The next and final step is critical.

  • 05:38

    Here, you need to select the GNU toolset instead of the default TI compiler for ARM.

  • 05:49

    When you click Finish, CCS will create your "lesson" project in the workspace and in the

  • 05:54

    "lesson19" directory on disk.

  • 05:58

    You can build the project by clicking on the hammer button at the top.

  • 06:01

    As you can see, the build process succeeds with 0 problems.

  • 06:06

    So, let's take a quick look at the code that CCS has generated for this project.

  • 06:12

    First, you get the main.c file with the empty main() function.

  • 06:17

    Second, is the startup code, which is very typical for code supplied by silicon vendors.

  • 06:23

    Unfortunately, it has all the shortcomings that I've covered in lessons 13, 14, and 15.

  • 06:29

    For starters, this startup code uses proprietary exception names that are not compliant with

  • 06:34

    CMSIS.

  • 06:36

    Also, the vector table requires editing every time you start or stop using a given interrupt

  • 06:42

    handler.

  • 06:43

    For example, to use the SysTick_Handler interrupt, you would need to modify the appropriate entry

  • 06:48

    in the vector table, and you would also need to declare a prototype of the handler at the

  • 06:52

    top of the file.

  • 07:00

    And finally, the provided implementation of the exception handlers contains endless loops

  • 07:06

    that tie up the CPU.

  • 07:08

    In other words, if any of such exception handler is ever executed, the system will freeze,

  • 07:13

    which the user will perceive as denial of service.

  • 07:17

    This is not acceptable in any production-grade code.

  • 07:23

    The generated code also contains the file with the extension .lds, which is the linker

  • 07:28

    script.

  • 07:30

    The purpose of this file is to tell the linker where ROM and RAM are located in the address

  • 07:34

    space and where to place various program sections.

  • 07:38

    You saw an example of a linker script for the IAR toolset in lesson 14.

  • 07:43

    Here you have a linker script for the GNU toolset.

  • 07:46

    This is again a beaten-path linker script, which matches the startup code.

  • 07:50

    Among others, it allocates the stack as the last section in RAM.

  • 07:55

    In my opinion this is a mistake, because stack grows toward the lower addresses on ARM, and

  • 08:00

    so a stack overflow could damage the RAM sections above it.

  • 08:04

    In fact, this seems the likely cause of failure in the infamous Toyota unintended acceleration

  • 08:10

    cases, as I have described in the article "Are we shooting ourselves in the foot with

  • 08:14

    stack overflow?".

  • 08:16

    I provide a link to this article in the comment section for this video.

  • 08:21

    So, it seems that the code generated by CCS is not terribly usable, but the good news

  • 08:29

    is that you can fix all the issues in it by applying the lessons you've learned so far.

  • 08:34

    The first thing then is to copy all the relevant code from the previous lesson18 to the lesson19

  • 08:40

    folder.

  • 08:41

    The usable files are: bsp.h, bsp.c, main.c, startup_tm4c.c, and the master header file

  • 08:48

    for your TM4C MCU.

  • 08:54

    Interestingly, the files copied to the lesson19 folder immediately show up inside your project.

  • 09:02

    This is how all Eclipse projects behave.

  • 09:05

    All source files in the project directory are automatically included in the project

  • 09:09

    and you don't need to explicitly add them as it was the case in the IAR Embedded Workbench

  • 09:15

    IDE.

  • 09:16

    This Eclipse policy has its disadvantages too, however.

  • 09:20

    For example, now you have two startup files in the project, so you need to delete one

  • 09:25

    of them.

  • 09:32

    So let's try to build this project.

  • 09:37

    This time you get some errors.

  • 09:39

    The first error is that the compiler cannot find the include file "core_cm4.h".

  • 09:46

    This file is part of the CMSIS, which is not directly available in Code Composer Studio,

  • 09:51

    as it was in IAR Embedded Workbench.

  • 09:54

    This is not a big problem, as you can easily provide CMSIS yourself.

  • 09:59

    Here, I have prepared for you a directory CMSIS, which contains the core header files

  • 10:04

    in the sub-directory Include.

  • 10:10

    You should copy the CMIS directory into the folder where you keep the lessons of this

  • 10:14

    video course.

  • 10:15

    That way you can re-use CMSIS in all upcoming lessons.

  • 10:21

    Of course copying a directory is not enough, because you also need to tell the compiler

  • 10:26

    to look for include files in this new directory CMSIS/Include.

  • 10:31

    You accomplish this by means of the project Properties dialog box, which you open by right-clicking

  • 10:37

    on the project and selecting the Properties pop-up menu.

  • 10:42

    Specifically, you need to choose the Directories property in the GNU Compiler group, where

  • 10:48

    you find the "include paths" pane.

  • 10:52

    To add a new include directory, click on the plus button.

  • 10:58

    The first, easy way is to simply browse your file system for the CMSIS/Include directory.

  • 11:11

    But the big drawback of doing this is that you add an *absolute* include path, which

  • 11:16

    will only work on your computer with this specific C:\embedded_programming\CMSIS directory.

  • 11:21

    A much better approach is to create a *relative* include path, which will work on any computer.

  • 11:29

    The Eclipse IDE allows you to create relative paths by means of system variables.

  • 11:35

    Specifically, in the list of these variables, you can choose PROJECT_LOC, which will create

  • 11:42

    paths relative to the project location.

  • 11:48

    From the project location, you need to go one level up, and then you append CMSIS/Include.

  • 11:56

    Regarding the use of directory separators, on Windows you can use either back-slashes

  • 12:01

    or forward-slashes.

  • 12:02

    I use forward-slashes, because they seem more universal.

  • 12:12

    When you build again, you see that the previous include error is gone, but you got a bunch

  • 12:17

    of new errors.

  • 12:25

    As it turns out, most of these new errors come from the startup code.

  • 12:30

    This should not be actually that surprising, because this code was written with IAR-specific

  • 12:34

    extensions to the C language, which the GNU compiler does not recognize.

  • 12:39

    So, here I have prepared for you the startup code, which was re-written with the GNU-specific

  • 12:45

    extensions to the C language.

  • 12:48

    As you will see in a minute, the startup code must closely match the linker script, so I

  • 12:53

    included a matching linker script as well.

  • 12:56

    To include these files in the project is simply copy them over to the lesson19 directory.

  • 13:01

    I need to allow overwriting the previous linker script and I also need to remove the previous

  • 13:06

    startup code.

  • 13:11

    When you switch over to the Eclipse IDE, you can see that the project is immediately updated

  • 13:16

    with the new files.

  • 13:19

    Let's quickly review the code, so that you know how it works.

  • 13:22

    First, in contrast to the old file, the new GNU-specific startup code is compliant with

  • 13:27

    the latest CMSIS 4.3.0.

  • 13:31

    When you scroll down to the vector table, you can see that it has a special attribute

  • 13:37

    section(.isr_vector).

  • 13:40

    This is a GNU-specific extension, which tells the compiler to place the following symbol--the

  • 13:45

    vector table in this case--in the specified section.

  • 13:50

    To see where this section is, you can open the new GNU linker script, where you can see

  • 13:58

    that .isr_vector is the first section in ROM.

  • 14:04

    The ROM section, in turn, is located at address 0, so the vector table at the beginning of

  • 14:10

    ROM is also at zero, which is exactly what the ARM CPU needs.

  • 14:16

    As you hopefully remember from lesson-15, the first element of the ARM vector table

  • 14:20

    is the initial top of stack.

  • 14:22

    So, here you see an ampersand, meaning address of, __stack_end__ cast on an int.

  • 14:32

    The symbol __stack_end__ comes again from the linker script.

  • 14:36

    Indeed, when you scroll a bit down, you can see the .stack section as the first section

  • 14:42

    in RAM.

  • 14:47

    Contrary to the beaten-path approach of putting the stack at the last section in RAM, I recommend

  • 14:52

    placing it at the first section.

  • 14:55

    That way, a stack overflow won't be able to damage any other RAM sections.

  • 14:59

    As an additional bonus, a stack overflowing into the un-mapped memory below RAM will be

  • 15:06

    detected automatically by executing the HardFault exception, so you will know about it.

  • 15:12

    Speaking of the stack, you can change its size by adjusting the symbol STACK_SIZE at

  • 15:17

    the top of the linker script.

  • 15:22

    Going back to the startup code, the symbol __stack_end__ is provided by the linker, but

  • 15:28

    the compiler does not know about it.

  • 15:30

    To tell the compiler, you need to declare __stack_end__ as an external variable at the

  • 15:36

    top of the startup file.

  • 15:44

    The other elements of the vector table are addresses of handler functions for Cortex-M

  • 15:48

    exceptions and interrupts.

  • 15:51

    As you can see, the table already contains all the specific handlers, with names compliant

  • 15:56

    with CMSIS, so you don't need to edit the code at all to use any of these exceptions

  • 16:01

    or interrupts.

  • 16:03

    At the same time, if you don't use a given exception or interrupt, it will be automatically

  • 16:08

    replaced by the Default_Handler implementation.

  • 16:12

    This is accomplished by means of a pair of GNU-specific attributes weak and alias.

  • 16:21

    The weak attribute means that such a symbol definition can be overridden by another definition

  • 16:29

    and the linker will quietly discard the weak definition without reporting that the symbol

  • 16:34

    was defined twice.

  • 16:36

    The alias attribute means that if the symbol is not defined, the alias symbol should be

  • 16:41

    used instead.

  • 16:42

    So, for example, if you define the SysTick_Handler in your application, the linker will take

  • 16:48

    your non-weak definition.

  • 16:49

    If you don't define SysTick_Hanler, the linker will take the Default_Handler alias for it

  • 16:55

    and will not report any errors.

  • 16:59

    Notice though that not all handlers are aliased.

  • 17:02

    This is because the standard fault handlers are actually defined in this startup code

  • 17:06

    so that you don't need to define them in your application.

  • 17:17

    But these handlers are not the primitive endless loops with denial of service.

  • 17:22

    The provided implementations use inline assembly to carefully avoid any use of the stack, which

  • 17:27

    might be corrupted at this point.

  • 17:29

    The assembly code stores the information about the fault in r0 and r1 registers and then

  • 17:35

    branches to assert_handler, where you can perform your last damage control.

  • 17:41

    Here you encounter another GNU-specific attribute "naked", which instructs the compiler not

  • 17:47

    do any stack operations for this function.

  • 17:51

    When you try to build again, you still have an error, this time in bsp.c.

  • 17:57

    By now you should know what's the problem.

  • 17:59

    The extended keyword __stackless was an IAR extension for stackless functions.

  • 18:05

    In GNU, you need to replace it with attribute("naked").

  • 18:11

    Another build.

  • 18:12

    This time, the compiler complains about __enable_interrupts(), which was an IAR intrinsic function.

  • 18:19

    In GNU this operation needs to be replaced with __enable_irq().

  • 18:27

    Another build, and..., Hallelujah!

  • 18:33

    No errors at all.

  • 18:34

    Congratulations, you have just finished your first port of deeply embedded code from one

  • 18:39

    toolset to another.

  • 18:44

    Time to plug in your Tiva LaunchPad board and test the code.

  • 18:47

    To download the code to the flash memory of the board and start debugging, you press the

  • 18:52

    bug button at the top.

  • 18:54

    The debugger is setup to stop at the beginning of main and indeed it does.

  • 18:59

    Press the Go button to run the code and watch the LED change color once a second.

  • 19:05

    Click on the Pause button to break into the code and watch it stop in the background loop.

  • 19:10

    By the way, the different screen layout that you see now is called in Eclipse the "Debug

  • 19:15

    Perspective".

  • 19:16

    This is to differentiate this view from the "Edit Perspective" that you saw during editing

  • 19:20

    the code.

  • 19:23

    The Debug Perspective provides all the debugger views that you encountered in IAR, such as

  • 19:28

    the disassembly view.

  • 19:32

    You can also single-step through the code and watch the LED being turned on and off.

  • 19:41

    You can set breakpoints, like for example inside the SysTick_Handler to see how frequently

  • 19:45

    this interrupt is called.

  • 20:02

    To stop the debug session and return to the "Edit Perspective", press the Stop button

  • 20:06

    at the top.

  • 20:09

    As the final step of this lesson, let's modify the behavior of the code copied from your

  • 20:13

    previous IAR project to change the color of the toggled LED from red to blue, for example.

  • 20:22

    Build the project and start debugging as before...

  • 20:32

    Watch the LED blink in a new color.

  • 20:37

    This concludes this lesson about switching the toolset to GNU-ARM and Eclipse-based Code

  • 20:41

    Composer Studio (CCS).

  • 20:44

    The startup code and linker script from this lesson are much closer to production-quality

  • 20:49

    than the typical code distributed by silicon vendors.

  • 20:52

    The code is compliant with CMSIS and will work with any toolset based on GNU-ARM, not

  • 20:57

    just with CCS.

  • 20:59

    You can easily adapt it for any ARM Cortex-M microcontroller.

  • 21:06

    If you'd like to learn more about using the free GNU-ARM toolset, I would recommend my

  • 21:11

    10-part article "Building Bare Metal ARM Systems with GNU", which in 2007 was the most popular

  • 21:18

    article on Embedded.com.

  • 21:22

    This article talks about the classic ARM7/ARM9 cores, but much of the information still applies

  • 21:28

    to Cortex-M as well.

  • 21:30

    I provide a link to this article in the description of this video on YouTube.

  • 21:39

    The project download for this lesson will come in two parts: the usual lesson19.zip

  • 21:47

    archive with the CCS project and code for the lesson and the CMSIS.zip archive with

  • 21:53

    the CMSIS code.

  • 21:57

    In the next lesson I will finally talk about race conditions, which is a concept that you

  • 22:01

    absolutely need to understand to effectively work with interrupts.

  • 22:05

    If you like this channel, please subscribe to stay tuned.

  • 22:08

    You can also visit state-machine.com/quickstart for the class notes and project file downloads.

All

The example sentences of REGISTRATION in videos (15 in total of 129)

and coordinating conjunction finally adverb we personal pronoun enact verb, base form secure verb, base form , automatic proper noun, singular voter proper noun, singular registration proper noun, singular and coordinating conjunction vote noun, singular or mass from preposition or subordinating conjunction home noun, singular or mass ballots noun, plural proper noun, singular so adverb
click proper noun, singular on preposition or subordinating conjunction the determiner windows proper noun, singular download verb, non-3rd person singular present , which wh-determiner will modal lead verb, base form you personal pronoun to to the determiner registration noun, singular or mass page noun, singular or mass and coordinating conjunction some determiner
and coordinating conjunction he personal pronoun made verb, past tense sure adjective we personal pronoun never adverb missed verb, past tense a determiner registration noun, singular or mass deadline noun, singular or mass because preposition or subordinating conjunction his possessive pronoun check noun, singular or mass was verb, past tense late adjective .
project noun, singular or mass , and coordinating conjunction proper noun, singular perhaps adverb most adverb, superlative importantly adverb of preposition or subordinating conjunction all determiner proper noun, singular the determiner board proper noun, singular of preposition or subordinating conjunction registration proper noun, singular for preposition or subordinating conjunction civil proper noun, singular
works verb, 3rd person singular present the determiner method noun, singular or mass how wh-adverb to to join verb, base form the determiner price noun, singular or mass and coordinating conjunction when wh-adverb course noun, singular or mass registration noun, singular or mass opens verb, 3rd person singular present so preposition or subordinating conjunction i personal pronoun
in preposition or subordinating conjunction 2015 cardinal number , they personal pronoun were verb, past tense the determiner 10th adjective most adverb, superlative popular adjective breed verb, past tense in preposition or subordinating conjunction terms noun, plural of preposition or subordinating conjunction akc proper noun, singular registration noun, singular or mass numbers noun, plural .
of preposition or subordinating conjunction business noun, singular or mass for preposition or subordinating conjunction a determiner list noun, singular or mass of preposition or subordinating conjunction information noun, singular or mass you personal pronoun will modal need verb, base form to to begin verb, base form the determiner registration noun, singular or mass process noun, singular or mass .
registration proper noun, singular fee proper noun, singular which wh-determiner we personal pronoun mentioned verb, past tense before preposition or subordinating conjunction is verb, 3rd person singular present going verb, gerund or present participle to to be verb, base form due adjective before preposition or subordinating conjunction may modal 31st adjective 2016 cardinal number .
your possessive pronoun patients noun, plural happy adjective with preposition or subordinating conjunction the determiner outcome noun, singular or mass capture noun, singular or mass putty noun, singular or mass and coordinating conjunction vps proper noun, singular bite verb, non-3rd person singular present registration noun, singular or mass materials noun, plural are verb, non-3rd person singular present always adverb
this determiner will modal open verb, base form up preposition or subordinating conjunction registration noun, singular or mass options noun, plural where wh-adverb you personal pronoun can modal set verb, base form a determiner registration noun, singular or mass price noun, singular or mass and coordinating conjunction connect verb, base form
the determiner registration noun, singular or mass process noun, singular or mass if preposition or subordinating conjunction more adjective, comparative applications noun, plural are verb, non-3rd person singular present being verb, gerund or present participle submitted verb, past participle , the determiner uscis proper noun, singular will modal then adverb conduct verb, base form a determiner
every determiner form noun, singular or mass requires verb, 3rd person singular present the determiner first adjective and coordinating conjunction last adjective name noun, singular or mass and coordinating conjunction an determiner email noun, singular or mass for preposition or subordinating conjunction registration noun, singular or mass
it personal pronoun gives verb, 3rd person singular present eligibility noun, singular or mass requirements noun, plural and coordinating conjunction registration noun, singular or mass information noun, singular or mass so preposition or subordinating conjunction those determiner went verb, past tense live verb, base form today noun, singular or mass so adverb if preposition or subordinating conjunction you're proper noun, singular
illegal adjective that wh-determiner want verb, non-3rd person singular present registration noun, singular or mass around preposition or subordinating conjunction human adjective beings noun, plural which wh-determiner is verb, 3rd person singular present a determiner very adverb very adverb very adverb important adjective conversation noun, singular or mass
now adverb , it personal pronoun was verb, past tense time noun, singular or mass to to switch verb, base form over preposition or subordinating conjunction our possessive pronoun registration noun, singular or mass for preposition or subordinating conjunction our possessive pronoun truck noun, singular or mass and coordinating conjunction trailer noun, singular or mass .

Use "registration" in a sentence | "registration" example sentences

How to use "registration" in a sentence?

  • I oppose registration for the draft... because I believe the security of freedom can best be achieved by security through freedom.
    -Ronald Reagan-
  • The pastors and ministry leaders came away energized to have voter registration drives at their churches and motivated to encourage their congregations to "vote their values."
    -Paul Smith-
  • Please, my dear brothers, let your wives and sisters go to the voter registration process. Later, you can control who she votes for, but please, let her go.
    -Hamid Karzai-
  • All we ask for is registration, just like we do for cars.
    -Charles Schumer-
  • The Republicans need to work on registration and getting out their vote and their early voters and absentees. Grassroots stuff.
    -Rush Limbaugh-
  • The securities laws of the 1930s were so important because it forced companies to file registration statements and issue prospectuses, and it remedied the imbalance of information.
    -Ron Chernow-
  • I want to see the original long-form certificate of Donald Trump's Republican registration.
    -Rand Paul-
  • If you are demanding registration before checkout, you need to cease this practice immediately. It is costing you a fortune.
    -Bruce Tognazzini-

Definition and meaning of REGISTRATION

What does "registration mean?"

/ˌrejəˈstrāSH(ə)n/

noun
Total number, e.g. of students in a school.