Black Mamba

@AndyKuo

Joined on Mar 18, 2021

  • This Lab does the same as Lab 3, but it prints the serial number on UART0. As such, it can be used easily with qemu. GPIO.h #define MMIO_BASE 0x3F000000 #define GPFSEL0 ((volatile unsigned int*)(MMIO_BASE+0x00200000)) #define GPFSEL1 ((volatile unsigned int*)(MMIO_BASE+0x00200004)) #define GPFSEL2 ((volatile unsigned int*)(MMIO_BASE+0x00200008)) #define GPFSEL3 ((volatile unsigned int*)(MMIO_BASE+0x0020000C)) #define GPFSEL4 ((volatile unsigned int*)(MMIO_BASE+0x00200010))
     Like  Bookmark
  • Just test our toolchain. The resulting kernel8.img should boot on Raspberry Pi, and stop the CPU cores in an infinite loop. You can check that by running Assembly When the control is passed to kernel8.img, the environment is not ready for C. Therefore we must implement a small preambule in Assembly. CPU has 4 cores. All of them are running the same infinite loop for now. .section ".text.boot" .global _start
     Like  Bookmark
  • You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself. Example 1: Input: l1 = [2,4,3], l2 = [5,6,4] Output: [7,0,8] Explanation: 342 + 465 = 807. Example 2: Input: l1 = [0], l2 = [0]
     Like  Bookmark
  • Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target. You may assume that each input would have exactly one solution, and you may not use the same element twice. You can return the answer in any order. Example 1: Input: nums = [2,7,11,15], target = 9 Output: [0,1] Output: Because nums[0] + nums[1] == 9, we return [0, 1].
     Like  Bookmark
  • Given a string s, return the longest palindromic substring in s. Example 1: Input: s = "babad" Output: "bab" Note: "aba" is also a valid answer. Example 2:
     Like  Bookmark
  • Leetcode 1. Two Sum Date : 2021/09/22 2. Add Two Numbers Date : 2021/09/22 3. Longest Substring Without Repeating Characters Date : 2021/09/25 4. Median of Two Sorted Arrays Date : 2021/10/02
     Like  Bookmark
  • Raspberry Pi 3B+ CPU : BCM2837B0 64-bit quad-core ARM Cortex-A53 If you want to do this Lab. You need know how to design in BCM2837 Peripherals first. BCM2837-Broadcom Peripherals gpio.h #define MMIO_BASE 0x3F000000
     Like  Bookmark
  • Assembly Now we have to distinguish the cores. For that, we read the mpidr_el1 system register. If it's not zero, we'll do the former infinite loop. If it's zero, then we'll call a C function. But for that, we need a proper stack, and a zerod out bss segment in memory before the call instruction. I've added some more code to the Assembly to do all of that. In case the C code returns (shouldn't), we also jump to the same infinite loop the other CPU cores running. NOTE: depending on your firmware version, it is possible that application cores are stopped. If that's the case then our code only runs on Core 0, but there's no harm in checking the core number. To start the other cores, you have to write an address of a function to execute at 0xE0, 0xE8, 0xF0 (one address for each core, in order). .section ".text.boot" .global _start _start:
     Like  Bookmark