C Programming language

You must be a competent programmer to take CS7NS2. The module will use the C programming language extensively so you should be familiar with either C or C++ before starting the module.

If your programming experience has been with other languages, you should familairise yourself with C before starting CS7NS2. There are many websites, textbooks, videos and online courses designed for experienced programmers to learn C. For example, C Programming on Wikibooks provides a very concise C tutorial, structed around short examples of the syntax.

Another online tutorial is available on tutorialspoint.com. Learn C Programming provides a comprehensive introduction to C that is particularly suited programmers with experience of other languages.

The Hamilton Library has a number of copies of C programming : absolute beginner's guide (Perry and Miller), although this book is aimed at novice programmers rather than experienced programmers who are learning C as a new language. Similarly, C How to Program (Deitel and Deitel) provides a comprehensive introduction to C proramming, again aimed at novice programmers, although it may still be a useful starting point.

There are a number of C features and concepts that will be particularly relevant in CS7NS2 and you should familiarise yourself with these in particular:

  • pointers, referencing and dereferencing (*, &)
  • scope (local, global)
  • storage classes (static, extern)
  • preprocessor directives
    • conditional compilation (#ifdef, #ifndef, #endif)
    • macros (\texttt{#define MS_PER_MINUTE 60000})
    • macros with parameters (\texttt{#define square(x) ((x) * (x))})
  • structures (struct)
  • typedef
  • pointers as function operands
  • unions and bitfields
  • bitwise operators (<<, >>, &, |, ^, ~)

Telecommunications and the Internet

Familairity with some networking and telecommunication concepts will be required. In the context of the OSI model, the Network and Transport Layers (OSI layers 3 and 4) are most relevant. A good textbook such as Computer Networking: A Top-Down Approach (Kurose and Ross) is a good place to start.

Fundamentals of Computer architecture

A knowledge of the fundamentals of computer architecture would be beneficial to students intending to take CS7NS2. In particular, a knowledge of basic processor architecture and operation (registers, ALU, program counter), memory read and write operations (loads and stores), memory-mapped devices, exceptions and interrupts would be useful.

The second half of Digital Design and Computer Architecture: ARM Edition (Harris and Harris) covers most of the above topics in the context of the ARM architecture.