CSSE3010 2025 Project CSSE3010 Project Remote Control Microscope (30% – 60 Marks) Git and BlackBoard: Monday, 12pm in week 13, 2024 Final Demo: Your session in week 13, 2024 Last Updated: April 29, 2025 ECP Hurdle: Not required to be submitted. (Closed Shoes MUST BE Worn in the labs) 1 Learning Aims • Apply your knowledge and skills developed in Stages 1–4 into a new combined design. • Establish a radio communication link using the NRF24l01plus module. • Control a physical system. • Use FreeRTOS to implement your system. 2 Resources • Nucleo-F429ZI platform • nrf24l01+ Radio Module • MFS Board • RGB LED • Logic Analyzer (AD2) 3 Academic Integrity All assessments are individual. You should feel free to discuss aspects of C programming and assessment specifications with fellow students and discuss the related APIs in general terms. You should not actively help (or seek help from) other students with the actual coding of your assessment. It is cheating to look at another student’s code, and it is cheating to allow your code to be seen or shared in printed or electronic form. You should note that all submitted code will be subject to automated checks for plagiarism and collusion. If we detect plagiarism or collusion (outside of the base code given to everyone), formal misconduct proceedings will be initiated against you. If you’re having trouble, seek help from a teaching staff member. Do not be tempted to copy another student’s code. You should read and understand the statements on student misconduct in the course profile and on the school website: https://eecs.uq.edu. au/current-students/guidelines-and-policies-students/student-conduct Do not post your code to a public place such as the course discussion forum or a public code repository. (Code in private posts to the discussion forum is permitted.) You must assume that Page 1 of 15 CSSE3010 2025 Project some students in the course may have very long extensions so do not post your code to any public repository. You must follow the following code usage and referencing rules for all code committed to your git repository (not just the version that you submit), in Tables 1 and 2. Table 1: Code Origin and Uses/References Code Origin Usage/Referencing Code provided by teaching staff this semester Permitted Code provided to you by CSSE3010 teaching staff (e.g., code hosted on www.github.com/uqembededsys/sourcelib, posted on the discussion forum by teaching staff. May be used freely without reference. (You must be able to point to the source if queried about it – so you may find it easier to reference the code.) Code you wrote this semester for this course Permitted Code you have personally written this semester for CSSE3010 (e.g. mylib). It may be used freely without reference, Pro- vided you have not shared or published it. Unpublished code you wrote earlier Conditons apply; requires references Code you have personally written in a previous en- rolment in this course or in another UQ course or for other reasons and where that code has not been shared with any other the person or published in any way or submitted for assessment. May be used provided you understand the code AND the source of the code is referenced in a comment adjacent to that code (in the required format – see the style guide). If such code is used without appropriate referencing then this will be considered misconduct. C Code from AI tools Prohibited Any code that you create using a Generative AI based tool. All assessment tasks evaluate students’ abilities, skills and knowledge without the aid of gen- erative Artificial Intelligence (AI) or Machine Translation (MT). Students are advised that the use of AI technologies to develop responses (e.g. code generation) is strictly prohibited and may constitute student misconduct under the Student Code of Conduct. Page 2 of 15 CSSE3010 2025 Project Table 2: Code Origin and Uses/References (Continue) Code Origin Usage/Referencing Code copied from sources not mentioned previously Prohibited • Code, in any programming language: • copied from any website or forum (including Stack-Overflow and CSDN); • copied from any public or private repositories; • copied from textbooks, publications, videos, apps; • copied from code provided by teaching staff only in a previous offering of this course (e.g. previous assignment one solution); • written by or partially written by someone else or written with the assistance of someone else (other than a teaching staff member); • written by an AI tool that you did not person- ally and solely interact with; • written by you and available to other students; or • from any other source besides those mentioned in earlier table rows above. May not be used. If the source of the code is referenced adjacent to the code then this will be considered code without academic merit (not misconduct) and will be removed from your assignment prior to marking (which may cause compilation to fail and zero marks to be awarded). Copied code without adjacent refer- encing will be considered misconduct and action will be taken. This prohibition includes code written in other programming languages that has been converted to C. Code that you have learned from Conditions Apply, references required Examples, websites, discussions, videos, code (in any programming language), etc. that you have learned from or that you have taken inspiration from or based any part of your code on but have not copied or just converted from another programming lan- guage. This includes learning about the existence of and behaviour of library functions. This does not include library functions that have been explicitly prohibited. May be used provided you do not directly copy code AND you understand the code AND the source of the code or inspiration or learning is referenced in a comment adjacent to that code (in the required format – see the style guide). If such code is used without appropriate refer- encing then this will be considered misconduct. Page 3 of 15 CSSE3010 2025 Project Contents 1 Learning Aims 1 2 Resources 1 3 Academic Integrity 1 4 Introduction 5 5 Project Overview 5 6 Design Tasks – 40 marks 6 6.1 Design Task 1: RCM System – 10 marks . . . . . . . . . . . . . . . . . . . . . . 6 System Status Indicators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Mylib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6.2 Design Task 2: RCM Radio Transmitter – 5 marks . . . . . . . . . . . . . . . . 6 Mylib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6.3 Design Task 3: RCM Radio Packet – 10 marks . . . . . . . . . . . . . . . . . . . 7 Protocol Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Hamming Packet Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 JOIN Packet Transmit with onBoard Pushbutton . . . . . . . . . . . . . . . . . 7 6.4 Design Task 4: RCM Command Input – 10 marks . . . . . . . . . . . . . . . . . 7 MyLib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 6.5 Design Task 5: RCM Output – 5 marks . . . . . . . . . . . . . . . . . . . . . . . 10 MyLib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 7 Challenge Tasks: Should only be attempted if DT1 to 5 have been completed – 10 marks 11 7.1 RCM Extra Commands – 5 marks . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Mylib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 7.2 RCM Display with Oscilloscope – 5 Marks . . . . . . . . . . . . . . . . . . . . . 11 7.3 Advanced System Monitor – 5 Marks . . . . . . . . . . . . . . . . . . . . . . . . 12 7.4 Efficient System – 5 Marks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 7.5 IR Remote Control – 5 marks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 7.6 Command line Interface (CLI) – 5 Marks . . . . . . . . . . . . . . . . . . . . . . 12 7.7 Direct Memory Access (DMA) – 5 Marks . . . . . . . . . . . . . . . . . . . . . . 12 8 Coding Practices – 10 marks 13 8.1 Code Quality – 2 marks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 8.2 Folders Code Structure – 8 marks . . . . . . . . . . . . . . . . . . . . . . . . . . 13 main.c Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 FreeRTOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Interrupt Service Routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 9 Demonstration & Marking 14 9.1 Deductions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 10 Edge Conditions and Assumptions 15 Page 4 of 15 CSSE3010 2025 Project 4 Introduction This project will build on your knowledge from stages 1-4. You will be working individually on all tasks. The project is designed to have you demonstrate your knowledge of the practical content and ability to integrate new functionality for the Remote Controlled Microscope (RCM). The RCM is a microscope that can view targets with great magnification. The RCM is a computer numerical controller machine that can move in 3 dimensions. The project has a microscope that can view, zoom, and rotate a target image. A target is a specimen that is viewed by the microscope. 5 Project Overview The Remote Control Microscope (RCM) consists of the following sections: 1. RCM System: Control the RCM with the pushbutton/switchbank inputs and the radio transmitter. 2. RCM Radio Transmitter: Control the RCM using the radio control link. 3. RCM Output: Display the X, Y, Z, zoom, and rotation parameters of the RCM. 4. RCM Command Input: Process the command input for control of the RCM. 5. Challenge Tasks Page 5 of 15 CSSE3010 2025 Project 6 Design Tasks – 40 marks 6.1 Design Task 1: RCM System – 10 marks The RCM system is used to manipulate the RCM’s location and control the zoom and rotation. The RCM system must process the command inputs and control the radio transmitter and display output. System Status Indicators You must implement the following System Status Indicators (Table 3) with the MFS LEDs. Note MFS LEDs are diagnostic outputs and should be driven directly. There should be no task mylib driver functions for MFS LEDs. Table 3: System Status Indicators MFS LED Function MFS D1 LED Toggle when a radio packet is sent MFS D2 LED Toggle value when any MFS pushbutton is pressed. LTA1000G LED BAR (segments 3 to 0) Display CMD OPCODE Mylib The RCM system mylib files (sxxxxxx rcmsys.c, sxxxxxx rcmsys.h) must be placed in the mylib folder. 6.2 Design Task 2: RCM Radio Transmitter – 5 marks Implement the RCM radio transmitter using the NRF24l01plus radio module (See datasheet on BlackBoard). The RCM radio transmitter is used to broadcast packets to the RCM. These packets are used to control the RCM. The RCM radio transmitter must be implemented as an FSM. The following are radio transmitter configuration parameters that you must use. These parameters must be present in a myconfig.h in your mylib folder. Table 4: Parameters in myconfig.h Parameter value Description #define MYRADIOCHAN radio channel byte radio channel used for transmitting to a RCM. See BlackBoard for a RCM’s address to use. uint myradiotxaddr[]
bytes> Address used for transmitting - e.g. 0x12, 0x34, 0x56, 0x78, 0x90. See Black- Board for a RCM’s address to use. Mylib The radio transmitter mylib files (sxxxxxx txradio.c, sxxxxxx txradio.h, myconfig.h) must be placed in the mylib folder. The radio mylib file must only control the radio and not do any RCM operations. A radio TX queue should transmit packets via the radio interface. Page 6 of 15 CSSE3010 2025 Project 6.3 Design Task 3: RCM Radio Packet – 10 marks Four RCM control radio packets are used: JOIN, XYZ, ROT, and ZOOM. Each packet uses the same format shown in Table 5. The Sender Address must be your student ID, where each digit represents a 4-bit hex digit - e.g. 45678910 becomes address: 0x45678910 or 0x45, 0x67, 0x89, 0x10 Table 5: Packet Format - Little Endian (LSB first) Type Sender Address Payload String Index (bytes) 0 1 5 Size (bytes) 1 4 11 bytes (must be zero padded) The payload string for each packet is shown in Table 6. An example XYZ packet payload: XYZ10000000 This will move the RCM to the following coordinates: X=100mm, Y=0mm and Z=0mm. (Assume the origin is in the bottom left corner). Protocol Operation The JOIN packet must be sent before any packet can be sent. The JOIN packet allows the sender to use the RCM. If the JOIN packet is not sent first, then the RCM will reject all packets from the sender. The JOIN packet ensures that only one user can exclusively use the RCM, at one time. If another user sends a JOIN packet, then the RCM control is passed to that user. Hamming Packet Encoding The packet must be hamming encoded, using the details from the examples/getting started/hamming example. Each packet half-byte must be hamming encoded. The unencoded packet size must be 16 bytes. Zero padding (i.e. adding zeros) must be used to ensure that the unencoded packet size is 16 bytes long. The Hamming encoded packet size must be 32 bytes. JOIN Packet Transmit with onBoard Pushbutton The onboard pushbutton must be used to transmit a JOIN packet when pressed. No other conditions (automatic or on-powerup) should be used to send the JOIN packet. 6.4 Design Task 4: RCM Command Input – 10 marks The command input provided by the MFS pushbuttons, trimpot and switchbank is used to move the RCM, an absolute distance and in a particular direction, lower/raise the RCM’s Z coordinate, zoom in/out and increase/decrease the brightness. Assume all distance measure- ments are in mm. The switchbank input must be used to move the RCM’s head by the specified distance. An X/Y/Z value moves the RCM in the right/left (X), forward/backward (Y) direc- tions, and raise/lower (Z) directions. Note, the RCM will automatically stop if it detects that it will move out of bounds of the operating area. The origin command should set the RCM’s Page 7 of 15 CSSE3010 2025 Project Table 6: RCM Radio Type and Payload Packet Format Packet Type Payload String Description 0x20 JOIN Must be sent before XYZ Packet 0x22 XYZ<3 digit X><3 digit Y><2 digit Z> Moves RCM head to X,Y,Z coordi- nates, in mm. Co- ordinates are speci- fied as 3 digits for X/Y and 2 digits for Z. 0x26 ZOOM<3 digit zoom factor> Set the zoom of the RCM image. The minimum value is 0, and the maxi- mum value is 200. NOTE This limit may vary on each RCM. 0x27 BRIGHT<3 digit brightness factor> Set the brightness of the RCM im- age. The minimum value is -100, and the maximum value is 100. The default brightness level is 0. Note that all X, Y, and Z coordinates are absolute. All numbers are in decimal format for the payload string must be represented as ASCII characters. X, Y and Z coordinates to [0,0,0]. The zoom and brightness commands use a relative value and should initially start at the default value. Table 7 shows the function of Pushbuttons, Trimpot, and Switches used. The command input must be implemented as a state machine. Each state will set a command to be executed. Commands can be viewed in Table 8. Use the CMD and EXE pushbutton signals to toggle and execute the commands. An example FSM that only does X/Y/Z movement can be seen in Figure 1. You should expand this FSM to include all actions. Note: CMD SIGNAL refers to an appropriate form of FreeRTOS synchronisation that is used (e.g. semaphore, queue, eventbit, direct task notification, etc). Page 8 of 15 CSSE3010 2025 Project Table 7: MFS Pushbutton, Trimpot and SwitchBank assignment Input Acronym Description SwitchBank SW15 to SW8 VALUE 8-bit value used in command MFS S1 CMD Toggle the command MFS S3 EXE Execute the command MFS Trimpot clockwise turn A complete clockwise turn should in- crease the value used for either the Zoom or Brightness commands. MFS Trimpot anti- clockwise turn A complete anti-clockwise turn should increase the value used for either the Zoom or Brightness com- mands. S_IDLE !CMD_SIGNAL S_X CMD_SIGNAL !CMD_SIGNAL S_Y CMD_SIGNAL !CMD_SIGNAL S_Z CMD_SIGNAL CMD_SIGNAL !CMD_SIGNAL Figure 1: Example Command Input Finite State Machine. NOTE: CMD SIGNAL is a form of FreeRTOS synchronisation that you can decide to use. MyLib You must create the RCM command input (e.g. cmdin) mylib driver files, which should use the switchbank, LTA1000G and MFS mylib driver (from previous stages) with added task func- Page 9 of 15 CSSE3010 2025 Project Table 8: CMD Function Command OpCode Description (Note VALUE is defined in Table 7) IDLE 0x01 No movement or any manipulation of the RCM X 0x02 Move RCM to an absolute VALUE X distance Y 0x03 Move RCM to an absolute VALUE Y distance Z 0x04 Move RCM to an absolute VALUE Z distance ZOOM 0x05 Increase or decrease zoom of RCM image by 10% BRIGHT 0x06 Increase or decrease brightness of RCM image by 10% new 0x07 see Section 7. del 0x08 see Section 7. sys 0x09 see Section 7. ORG 0x0F Move RCM to origin [0,0,0] and reset Zoom and Bright- ness to default values. tionality. Note you can use alternative pins for the switchbank and LTA1000G. Previous pin assignments used for the switchbank and LTA1000G are optional to use. When any MFS pushbutton is pressed, the MFS D2 LED must be toggled. Note: the RCM command input mylib must control/interact with the RCM’s mylib driver and not directly control the RCM by transmitting radio packets. You must use an appropriate form of FreeRTOS synchro- nisation or parameter sharing (e.g. semaphore, queue, eventbit, direct task notification, etc). Zoom Calibration You will have to consider the calibration of the Zoom value using experimentation. 6.5 Design Task 5: RCM Output – 5 marks You must output the current position (X or Y or Z), Zoom and Brightness parameters using the MFS Seven Segment Display whenever any of the CMD X, Y, Z, ZOOM and BRIGHT commands are executed. The coordinates should be displayed in mm. For example, if the X CMD is executed, then the X position is displayed on the MFS Seven Segment Display. LTA1000 LED Bar Output Display the current command opcode (Table 8) on the LTA1000G LED Bar. RGB LED Output The RGB LED is used to indicate if the Zoom or Brightness is increasing or decreasing. Table 9: RGB LED Indicator Colour Indicator Red Increasing Zoom or Brightness Green Default value for Zoom or Brightness (power up). Blue Decreasing Zoom or Brightness Page 10 of 15 CSSE3010 2025 Project MyLib Create an RCM output mylib driver. You must control the display output using FreeRTOS ele- ments (e.g. queues, semaphores, etc). The RCM output mylib file must be placed in the mylib folder. Previous mylib drivers like the RGB driver should also be used. 7 Challenge Tasks: Should only be attempted if DT1 to 5 have been completed – 10 marks The challenges are intended to be extensions of design task functionalities. You must make a reasonable attempt at each design task before attempting a challenge. A reasonable attempt involves having the related flowcharts/state diagrams/schematics and compilable mylib C code that implements and demonstrates partial functionality of the design task. If you have not made any reasonable attempt at each design task, your challenge attempt will not be assessed, as it is not considered an extension of the design task features. Full function- ality of each design task is not required to attempt a challenge. Each challenge is worth 5 marks. Choose a maximum of two challenges to do. 7.1 RCM Extra Commands – 5 marks Extend the RCM commands (Table 8) to allow the viewing of the task’s memory usage and status. Add create and delete task commands. You must also show where you have used at least one of the following: event bits, direct task notifications, co-routines or software timers in your code. Table 10: Extra Control Commands Key Description new Create a new radio transmitter mylib task del Delete the radio transmitter mylib task sys Display the current tasks with task name, task ID, task state, task priority and current memory stack usage, in the console. Mylib The RCM extended command Mylib Task files (sxxxxxx rcmext.c, sxxxxxx rcmext.h) must be placed in the mylib folder. A controlling task and Event bits should be used. 7.2 RCM Display with Oscilloscope – 5 Marks Display the RCM head position and position trace (previous positions) on an oscilloscope. Use the STM32F429ZI DAC module to control the X and Y inputs to the oscilloscope (in x-y mode). Page 11 of 15 CSSE3010 2025 Project Add a CMD command that can clear the display. You will have to use a suitable pin for the DAC output. You must create a suitable mylib file. 7.3 Advanced System Monitor – 5 Marks Implement a system monitor using the FreeRTOS Trace feature. You should be able to show at least 5 of the trace hook features listed on the RTOS define table – www.freertos.org/ rtos-trace-macros.html. You must create a suitable mylib file. 7.4 Efficient System – 5 Marks Reduce the amount of memory used to improve your system’s efficiency. This should be done by using co-routines, direct task notifications, queuesets, and other methods listed on the FreeRTOS website. You must also show that you can ’garbage collect’ by deleting task or queues or other FreeRTOS elements that are not used. You must demonstrate where you have used co-routines, direct notifications, queuesets, and other FreeRTOS methods. Your system should have at least 10 co-routines active. 7.5 IR Remote Control – 5 marks Use an IR remote control to control the RCM. The remote control keys to select the command and input the VALUE. The IR remote control and receiver can be provided upon request. A suitable mylib driver using FreeRTOS elements should be created. 7.6 Command line Interface (CLI) – 5 Marks Create a command line interface (CLI) that implements each command, using the FreeR- TOS CLI library. The CLI must not duplicate any functionality implemented in DT1 to 5 (e.g. directly send radio packet, etc). The CLI must interact with the rest of your RCM system using FreeRTOS synchronisation or message-passing elements (e.g. semaphores or queues). It must be demonstrated that DT1 to 5 can still function if the CLI source files are not in- cluded in the compile/build. You must follow the mylib guidelines, regarding the CLI. See the examples/os/os cli example 7.7 Direct Memory Access (DMA) – 5 Marks Use direct memory access (DMA) to access any type of peripheral. Any DMA functionality should be added to existing or created mylib files. Page 12 of 15 CSSE3010 2025 Project 8 Coding Practices – 10 marks 8.1 Code Quality – 2 marks It is imperative that the code you write can be easily understood and modified/expanded by your peers and colleagues. As such, your code will be reviewed by a tutor. Aspects of high code quality include (but are not limited to): • descriptive, readable naming of variables, functions, parameters, constants, macros, types • constants and defines used instead of numerical values • modularity and functional decomposition instead of repeated code • consistent white space (horizontal and vertical) • conformation with the CSSE3010 Style Guide (on Blackboard) • debugging and testing code neatly excluded from release compile for submission • design justifications where appropriate • documentation for functions • comments for global variables, constants, macros, etc where appropriate Note that you are encouraged to have debug/test code and extra functionality where appropri- ate. #define and build configurations should be used to enable or disable the debug/test code. Commented out code is not permitted. 8.2 Folders Code Structure – 8 marks Your project code must be in your git repository repo/pf folder (with makefile and filelist.mk) and your mylib library files must be in your repo/mylib git repository folder. You are required to reuse and expand upon your mylib library in this project. You should include additional files to your library. You must follow the mylib task and register guidelines. Peripherals used should have corresponding task and register files. Register files are to be used by the task files. If you do not use your mylib library in this project, you may be penalised across various project criteria resulting in a substantial loss of marks. main.c Functions Functions that do not relate to the initialisation e.g. moving functions, must not be included in main.c. Functions called in main.c must only be used to initialise the system, not to control the system. Design task implementations should be done with tasks, using task mylib files. FreeRTOS You must demonstrate in your code, that you have used the features provided by FreeRTOS. Tasks MUST be used to implement various features of the system. Interrupt Service Routine Interrupt Service Routines (ISR) must not be used to directly implement the design tasks. ISRs should control a task with queues, semaphores, events, direct task notifications, etc. Page 13 of 15 CSSE3010 2025 Project 9 Demonstration & Marking Marking will occur in YOUR ALLOCATED SESSION in week 13. Students attending wrong sessions without an official extension request through the school will be marked as 0 during their allocated session. If you are unsure, talk to the course staff. NOTE: Version Control – You MUST use version control as part of your develop- ment process. This means that because the project is a bigger task than the stages, you should have a NUMBER of commits including the FINAL version which is the one being assessed. If that is not the case, you will not be assessed. You must show that you have git commits in weeks 11 and 12, or you will not be assessed. You must be marked off for git commits in week 12, in your lab session. Each task is allocated a number of marks. Full marks will be awarded to seamless, well inte- grated tasks with no errors. Part marks may be awarded for partially working solutions. You must be able to demonstrate functionality to achieve marks. 9.1 Deductions There are a set of basic expectations for your demonstration. Where demonstrations are par- ticularly poor and do not meet these expectations, marks will be deducted. This is to ensure students who have made the effort to meet the expectations are rewarded, and prevent cumber- some marking demonstrations. Prepare to have your work demonstrated, as might be done in a performance review or client demonstration. A course staff member will lead the demonstration and direct you as needed. They will be marking you during and after the demonstration, so it is wise to ensure that your work is clearly evident to them. The following situations will result in the allocated deduction. Deductions can only be deducted a single time. If you have questions, talk to course staff. Deduction Reason 8 Not building on the work done in stages e.g. not using mylib structure specified in stages. 4 Excessively unreadable code (no conformity to mylib or general style guide) 4 Significant disregard or no conformity to the mylib or general style guide 4 Reprogramming the Nucleo at any point throughout the demo 4 Interrupt handling function is long-running. 4 Not being ready to demo when asked, or taking a long time to demo function- ality when asked. 2 Excessive switching of modes, poor usability, disjoint demonstration 2 Excessive resetting of the Nucleo 2 Commented out code 10 if HAL library functions are directly called in mylib .c/.h files or main.c, other than code that was specified in the provided examples (e.g. examples/adc) Page 14 of 15 CSSE3010 2025 Project 10 Edge Conditions and Assumptions This specification only covers the general operation of the RCM. It does not cover all edge conditions. You may seek clarification for an edge condition via the forum or in lab sessions. You can also make an assumption on an undocumented edge condition as long as you note it in your workbook. If an edge condition has been officially addressed in official announcements on Blackboard and/or the forum, then you are required to follow it, regardless of prior assumptions that you have made. Page 15 of 15 学霸联盟