#include <Arduino.h>
const int ARRAY_SIZE = 500; // Ukuran array yang aman di Wokwi/Uno
byte sourceArray[ARRAY_SIZE];
byte destArray[ARRAY_SIZE];
const int LED_PIN = 13;
void setup() {
Serial.begin(115200); // Gunakan kecepatan tinggi di Wokwi
pinMode(LED_PIN, OUTPUT);
// Isi array sumber
for (int i = 0; i < ARRAY_SIZE; i++) {
sourceArray[i] = i % 256;
}
Serial.println("--- PENGUJIAN PROGRAMMED I/O DIMULAI ---");
}
void loop() {
// Pekerjaan Sampingan CPU (LED Blink)
digitalWrite(LED_PIN, HIGH);
delay(1);
digitalWrite(LED_PIN, LOW);
delay(1);
// Hanya jalankan PI/O sekali per loop
static bool pio_done = false;
if (!pio_done) {
unsigned long startTime = micros();
// Transfer Data (CPU melakukan transfer - BLOCKING)
for (int i = 0; i < ARRAY_SIZE; i++) {
destArray[i] = sourceArray[i];
}
unsigned long endTime = micros();
unsigned long duration = endTime - startTime;
Serial.print("PI/O: Waktu transfer ");
Serial.print(ARRAY_SIZE);
Serial.print(" byte: ");
Serial.print(duration);
Serial.println(" us");
// Analisis:
Serial.println("PI/O: Estimasi Beban CPU selama transfer: 100% (Blocking).");
Serial.println("----------------------------------------------");
pio_done = true;
}
// Loop terus berjalan, LED terus berkedip (setelah transfer selesai)
}