Low Byte Productions
Low Byte Productions
  • 112
  • 2 325 572
Rendering 3D Graphics On An Oscilloscope
In this video, we're learning how to draw on an oscilloscope. By utilising the X-Y mode of the scope, combined with some clever firmware to generate the right signals, and a sprinkle of DIY digital-to-analog conversion, we can render animated 3D graphics on a scope in real time!
00:00:00 3D Animated Demo
00:01:36 Understanding X-Y Mode
00:05:00 Firmware Architecture Overview
00:09:52 PWM Digital-to-Analog Conversion
00:14:48 Manually creating images
00:21:57 Visualizing the signals
00:25:03 Writing the static image firmware
00:48:30 PWM signals on the scope
00:51:14 Building the low-pass filters
00:58:42 First 3D image
01:03:30 Reading the 3D renderer firmware code
01:17:15 Final demo
=[ 🔗 Links 🔗 ]=
⭐️ Become a patron and get bonus videos! www.patreon.com/lowleveljavascript
🗣 Discord: discord.gg/FPWaVgk
💻 Github Repo: github.com/lowbyteproductions/3d-oscilloscope-renderer
zhlédnutí: 5 088

Video

Using LEDs As Precise GPIOs
zhlédnutí 2,9KPřed 4 měsíci
In this video, we're looking at a technique for precisely analyzing signals from firmware when all you can do is blink a LED. By writing to an LED as if it were a typical GPIO, and building a surprisingly simple receiver, we can probe signals with an oscilloscope without even touching the board! =[ 🔗 Links 🔗 ]= 🗣 Discord: discord.gg/FPWaVgk ⭐️ Patreon: www.patreon.com/lowleveljavascript
Bare Metal Bit Banging: WS2812B Driver
zhlédnutí 8KPřed 5 měsíci
In this video, we examine the WS2812B RGB LED device, and write a bit-banged driver from scratch for an STM32 microcontroller. Chapters 00:00 What is a WS2812 / NeoPixel 02:33 Hardware overview 06:00 What is a "device driver"? 08:35 The signalling protocol 15:00 Reviewing the datasheet 22:00 Figuring out the GPIO timing 49:32 First LED test 53:36 Implementing the driver interface =[ 🔗 Links 🔗 ]...
Getting up in another processes memory
zhlédnutí 14KPřed 7 měsíci
In this video, we learn how we can read memory belonging to other processes by building a memory dumper from scratch. One of the key components is the /proc file system: an interface that the kernel provides for introspecting processes. Combined with ptrace, a system call that allows attaching to and taking control of another process, we write a program to automate extracting information that w...
The mechanics of VIRTUAL MEMORY //Source Dive// 005
zhlédnutí 24KPřed 7 měsíci
In this installment of //Source Dive//, we're back in xv6, learning how address translation works with the virtual memory subsystem. =[ 🔗 Links 🔗 ]= more in depth talk: czcams.com/video/dFIqNZ8VbRY/video.htmlsi=ZGKcZRex96AUtwlT 🐋 RISC-V Docker Image: github.com/francisrstokes/rv-toolchain-docker/pkgs/container/rv-toolchain-docker 🎥 Series Playlist: 🗣 Discord: discord.gg/FPWaVgk ⭐️ Patreon: www....
Turning Pixels Into Waves
zhlédnutí 8KPřed 7 měsíci
In this video, we're building an awesome graphical effect, where an image is processed into a series of animated waves. The math behind the technique is fascinating, and will lead us into to how sine waves work, the magic of linear interpolation, and signal processing techniques like amplitude modulation! =[ 🔗 Links 🔗 ]= 🗣 Discord: discord.gg/FPWaVgk ⭐️ Patreon: www.patreon.com/lowleveljavascri...
How does KERNEL memory allocation work? //Source Dive// 004
zhlédnutí 46KPřed 8 měsíci
In this installment of //Source Dive//, we're deep in the xv6 operating system, trying to understand how physical memory of the system is tracked, distributed, and returned to the kernel. It's a fascinatingly simple algorithm, which can be paradoxically kind of hard to understand! =[ 🔗 Links 🔗 ]= 🐋 RISC-V Docker Image: github.com/francisrstokes/rv-toolchain-docker/pkgs/container/rv-toolchain-do...
Virtual Console and printf() //Source Dive// 003
zhlédnutí 64KPřed 8 měsíci
In this installment of //Source Dive//, we're back in xv6, looking at how the operating system layers abstractions. The "console" is a great example, with a low-level driver rooted in the hardware, to an abstract console, to the printf function that eventually outputs characters to the screen. =[ 🔗 Links 🔗 ]= 🐋 RISC-V Docker Image: github.com/francisrstokes/rv-toolchain-docker/pkgs/container/rv...
Programmatic Painting: Flow Fields
zhlédnutí 5KPřed 8 měsíci
In this video, we're drawing generative art in the form of flow fields! Flow fields are mathematical structures where every point of a space is associated with an angle, and by carefully choosing those angles, we can trace out the path of particles moving across the field, creating some beautiful images. =[ 🔗 Links 🔗 ]= 🗣 Discord: discord.gg/FPWaVgk ⭐️ Patreon: www.patreon.com/lowleveljavascrip...
What is a spinlock? //Source Dive// 002
zhlédnutí 44KPřed 9 měsíci
In this installment of //Source Dive//, we're back in the xv6 OS codebase, exploring timers, the early boot process, and a very useful concurrency primitive: The Spinlock! =[ 🔗 Links 🔗 ]= 🐋 RISC-V Docker Image: github.com/francisrstokes/rv-toolchain-docker/pkgs/container/rv-toolchain-docker 🎥 Series Playlist: 🗣 Discord: discord.gg/FPWaVgk ⭐️ Patreon: www.patreon.com/lowleveljavascript 💻 Github ...
How does an OS boot? //Source Dive// 001
zhlédnutí 383KPřed 9 měsíci
In this installment of //Source Dive//, we're learning about the xv6 Operating System; Specifically the low-level boot code that gets the CPU in the correct state to run the OS! =[ 🔗 Links 🔗 ]= 🐋 RISC-V Docker Image: github.com/francisrstokes/rv-toolchain-docker/pkgs/container/rv-toolchain-docker 🎥 Series Playlist: 🗣 Discord: discord.gg/FPWaVgk ⭐️ Patreon: www.patreon.com/lowleveljavascript 💻 G...
Cryptographically Signed Firmware :: Bare Metal Programming Series 14
zhlédnutí 6KPřed 10 měsíci
In the final episode of the Bare Metal Programming Series, we're implementing signed firmware updates! Everything from using AES in the CBC-MAC configuration in the bootloader, to writing a signing application, to updating the firmware updater to work with the new images. And of course, where would we be without a false celebration before the ultimate solution 😉 =[ 🔗 Links 🔗 ]= AES Blog Post: g...
Understanding AES Encryption Mechanics: BMPS
zhlédnutí 6KPřed 10 měsíci
In this video we're taking some time to grok the mechanics of AES. We cover the core operations of the algorithm, the mathematics of finite fields, and the all-important modes of operation. =[ 🔗 Links 🔗 ]= AES Blog Post: github.com/francisrstokes/githublog/blob/main/2022/6/15/rolling-your-own-crypto-aes.md Spec: nvlpubs.nist.gov/nistpubs/fips/nist.fips.197.pdf Deeper justifications and analysis...
Maintaining Firmware Integrity :: Bare Metal Programming Series 12
zhlédnutí 2,6KPřed 11 měsíci
Maintaining Firmware Integrity :: Bare Metal Programming Series 12
First Successful Firmware Update! :: Bare Metal Programming Series 11
zhlédnutí 3,3KPřed 11 měsíci
First Successful Firmware Update! :: Bare Metal Programming Series 11
Bootloader Firmware Update Mechanism :: Bare Metal Programming Series 10
zhlédnutí 3,5KPřed 11 měsíci
Bootloader Firmware Update Mechanism :: Bare Metal Programming Series 10
Simple Timer API :: Bare Metal Programming Series 9
zhlédnutí 2,6KPřed rokem
Simple Timer API :: Bare Metal Programming Series 9
Programmatic Flash Control :: Bare Metal Programming Series 8
zhlédnutí 2,6KPřed rokem
Programmatic Flash Control :: Bare Metal Programming Series 8
Testing the Packet Protocol :: Bare Metal Programming Series 7.3
zhlédnutí 3,2KPřed rokem
Testing the Packet Protocol :: Bare Metal Programming Series 7.3
Bootloader Packet Protocol Implementation :: Bare Metal Programming Series 7.2
zhlédnutí 3,7KPřed rokem
Bootloader Packet Protocol Implementation :: Bare Metal Programming Series 7.2
Designing A Packet Protocol :: Bare Metal Programming Series 7.1
zhlédnutí 4,7KPřed rokem
Designing A Packet Protocol :: Bare Metal Programming Series 7.1
Interrupt Safe Ring Buffer :: Bare Metal Programming Series 6
zhlédnutí 7KPřed rokem
Interrupt Safe Ring Buffer :: Bare Metal Programming Series 6
UART Driver From Scratch :: Bare Metal Programming Series 5
zhlédnutí 15KPřed rokem
UART Driver From Scratch :: Bare Metal Programming Series 5
Understanding Assembly Generated From C :: Bare Metal Programming Series 4.1
zhlédnutí 5KPřed rokem
Understanding Assembly Generated From C :: Bare Metal Programming Series 4.1
Worlds Simplest Bootloader :: Bare Metal Programming Series 4
zhlédnutí 18KPřed rokem
Worlds Simplest Bootloader :: Bare Metal Programming Series 4
PWM and Timers :: Bare Metal Programming Series 3
zhlédnutí 9KPřed rokem
PWM and Timers :: Bare Metal Programming Series 3
Interrupts and Memory Mapped I/O :: Bare Metal Programming Series 2
zhlédnutí 15KPřed rokem
Interrupts and Memory Mapped I/O :: Bare Metal Programming Series 2
Hello World Blinky! Bare Metal Programming Series 1
zhlédnutí 26KPřed rokem
Hello World Blinky! Bare Metal Programming Series 1
Bare Metal Programming Series 0
zhlédnutí 42KPřed rokem
Bare Metal Programming Series 0
Hiding Data In Sound
zhlédnutí 8KPřed rokem
Hiding Data In Sound

Komentáře

  • @rolandzfolyfe8360
    @rolandzfolyfe8360 Před dnem

    5:56 Better late than never but multiplication actually does work the same for unsigned and two's complement signed integers, as long as you truncate the result to the same number of bits as the inputs. This is why, for example, the ARM mul instruction is used for both. This makes sense when you remember that multiplies basically dissolve into adds and left shifts in both software and hardware implementations, and neither of them care about signedness.

  • @harinayan7879
    @harinayan7879 Před dnem

    Is the index.ts file supposed to synchronise with the receiver first? When i run the code without any breakpoints, it builds packets after receiving a random number of packets. How can i fix this?

  • @TimTrostmann-zd4oj

    This is really informative... I am currently taking a course in operating systems engineering and feel completely lost, I finally feel like I can actually understand what is going on! Thank you

  • @oguzhankarahan1737

    How Does An Operating Boot? - 50 minutes... Thank you. I'll just ask this ChatGPT or Bard. Lol

    • @LowByteProductions
      @LowByteProductions Před dnem

      Man this is a cringe comment if I ever saw one

    • @oguzhankarahan1737
      @oguzhankarahan1737 Před dnem

      @@LowByteProductions Hey! Do not take this seriously. I was only teasing you. Sorry if it's offensive. Your video is so good and well-detailed. Keep up the good work!

  • @avinashverma3973
    @avinashverma3973 Před 2 dny

    awesome video

  • @Chabdi111
    @Chabdi111 Před 3 dny

    Awsome work, i hope u do more videos that i can learn fron :)

  • @harinayan7879
    @harinayan7879 Před 4 dny

    Putty and screen show no output My code compiles and runs the LED blinks as expected. But when i use putty, it says that unable to connect to the /dev/ttyUSB0 and then closes. when i use screen without sudo, it says screen is terminating. When i use screen with cudo, it simply opens the terminal and i get no response from the device. The USB adapter is connected and is being detected by the "dmesg | grep tty* ". The same problem persists even on windows, where the terminal is open on putty, but when i type something, no data gets displayed. I am using a f4 discovery board and have made all the necessary changes in the code, makefile and the linkerscript. did anyone else face the same issue? edit: found a work around for now: After some testing i figured out that the issue is with my USB to UART converter. I am using a CH340 module as shown in the video and it is being recognized by both Linux and Windows as ttyUSB0 or COM3, but when i try to access it using either putty or screen, i get no data. However, i have a F411 nucleo board lying around and it's integrated st-link works directly without any external module. I am able to send and receive data as expected. I tried the CH340 with both F411 Nucleo and F407 discovery, and in both cases, it deoesn't work. Later, I will use an oscilloscope to look into the TX and RX lines of the Discovery board and the CH340 module and try to findout if the module is broken. I think it might be a driver issue but i am not yet sure. But for now, the Integrated St-link of the F411 Nucleo works wothout any external module needed on Linux. If someone finds a solution to the problem, then please let me know.

  • @PeterBagel-ti5xw
    @PeterBagel-ti5xw Před 4 dny

    Oh my god, I just found out about this this channel it's absolutely AWESOME! I love it I'm watching all your videos now

  • @SeanHarding-nv9li
    @SeanHarding-nv9li Před 4 dny

    I found an easier way to get to `d`: using `undefined`. Attempting to access a part of an array or object that doesn't exist, will NOT throw an error, but rather, return undefined. The simplest way to do this is `[][[]+[]]` (the function `` of the Array object). Then casting to a string and returning the character with index 2; i.e. `([]+[][[]+[]])[+!![] + +!![]]`; yields the character `d`. Additionally, there is a better way to convert the numbers: using your ORIGINAL example of type coercion: The expression `+!![] + !![]` evaluates to `1 + true`, or 2. This can be written in the form `+!![] +!![]` (two copies of `+!![]` back-to-back), so it's easy to extrapolate; for example, 7 becomes `+!![] +!![] +!![] +!![] +!![] +!![] +!![]`. (NOTE: I like to write the number 1 as `+!+[]` instead of `+!![]`, which reads `+! 0` instead of `+! false`.)

  • @Unique-Concepts
    @Unique-Concepts Před 5 dny

    I love your videos. Thank you 😊👍👍

  • @PinkoLP
    @PinkoLP Před 12 dny

    malloc also uses this type of unstructured memory access like this kalloc function (so even for userspace we don't use more structure). We just have a chunk of memory and write an address to the next free chunk in the first few bytes. Also, these chunks can be of variable sizes, so you would even need to insert more implicit structure and markers into the memory locations. (Plus we have several lists, mechanisms to prevent and resolve fragmentation etc.). So if you find this kind of structuring interesting, definitely have a look at the common malloc implementation and other allocators in general.

  • @MrJegerjeg
    @MrJegerjeg Před 13 dny

    I can imagine that this method leads to memory fragmentation, but is that an issue? Does it affect the process performance at all?

  • @paritoshmishra0891
    @paritoshmishra0891 Před 14 dny

    Somehow the youtube algorithm landed me on this goldmine. great job!

  • @riccardocazzola-nc4oh

    I don't know how to thank you. I just applied for a software embedded developer job and your videos are worthy like water for me

  • @salilphadnis4147
    @salilphadnis4147 Před 14 dny

    Just wonderful. Thank you !

  • @harinayan7879
    @harinayan7879 Před 15 dny

    Core locked up: I am using a STM32 Discovery board with a F407 chip. I am able to flash the code onto the MCU but it is not being executed. Earlier it was working fine with systick but when i powered it on yesterday, the blue led (which i configured to blink) was not blinking. I was using st-flash on CLI for this. I installed STM32CubeProgrammer, which after flashing the code, tells me that the core is locked up. Can someone please guide me on what to do? Edit: i tried flashing the same code onto a nucleo board with f411re and the core immediately locked up as well.

    • @LowByteProductions
      @LowByteProductions Před 14 dny

      Did you change the makefile to reflect that you're using a different chip? You'll also need to change the linkerscripts to reflect the memory layout of these chips.

    • @harinayan7879
      @harinayan7879 Před 14 dny

      @@LowByteProductions no sir I didn't make any changes in the make file or the linker scripts. I am using a stm32f407 processor so I assumed I need not make any changes. This was working all right upto systick and was working as intended. Later for some reason it didn't work. Also, I am using stlink-tools to flash from the cli. I tried using the STMCubeIDE on windows and this works fine. However this has STM's implementation of HAL and it is on windows not Linux so I don't want to use the IDE. It was working earlier and all of a sudden stopped working. What changes do I have to make in the linker and the makefile sir?

    • @harinayan7879
      @harinayan7879 Před 14 dny

      @@LowByteProductions okay so I tried something. In Linux, I cloned the libopencm3 examples repo and built a blink project. I tried to flash this code onto the processor, flash was successful but didn't execute as core locked up. Then I tried uploading the code using stm cube progmmer, which also locked the core. Then, I mailed myself this file and then in windows, I used the cubeprogrammer to flash the same code onto the processor, which again resulted in a lockout. Then I wrote the same code using stm32 HAL in their official IDE, and it worked. So here are my assumptions and my guess as to what might be the issue: 1) libopemcm3 works for F4 processor 2) this problem is clearly not dependent on the OS as the issue persisits on Linux and windows. 3) It is independent of the flashing tools (stlink-tools) or the the official programmer. 4) HW works as there is no issue running the stm32's official HAL. 5) on Linux, the project is built and the .binary and .elf is made So my guess is that this is mostly a compiler on Linux issue. If I am wrong please correct me and let me know how to proceed sir.

    • @harinayan7879
      @harinayan7879 Před 13 dny

      @@LowByteProductions I fixed it sir. I had installed a software used for programming FPGAs. The software Targeted a ARM cortex processor on the FPGA board and used C as the programming language. When I installed it, it also installed a C compiler for ARM processor on this board that has the exact same name as the one I installed at the beginning of your series here (arm-none-eabi-gcc). Now the problem was that the path to this compiler was put ahead of the /usr/bin in the environment variables. Consequently, when the make file in my project built the project, it used the ARM compiler of the FPGA rather than the ARM complier I installed for the STM32. The executables generated now were for the ARM chip on the FPGA, and when I uploaded it onto the STM32, it incorrectly initialised the clock and other peripherals, causing the core lock up. To fix this I simply changed the path to the complier in the makefile so that it has the path to the correct compiler for the STM32 and everything works properly now.

    • @LowByteProductions
      @LowByteProductions Před 13 dny

      Awesome, glad you got it sorted!

  • @mikemorrow4949
    @mikemorrow4949 Před 16 dny

    What you say is great. It is easy to follow but the low energy growl in your voice really grates on my nerves and I can't listen to you for very long at a time. I hope you can deliver more energy while speaking and get over the growl. Thanks, either way.

  • @salilphadnis4147
    @salilphadnis4147 Před 17 dny

    Can't thank you enough for this series. This is incredibly useful.

  • @peterweston6588
    @peterweston6588 Před 21 dnem

    I found your channel yesterday when I searched for "write a regex parser". Even though I don't use JS myself, I found your back catalog very interesting. Thanks for the great work.

  • @adityagujaria2598
    @adityagujaria2598 Před 21 dnem

    Hey love the video!!! Quick question, how is the memory that is alloted to the stack0, in the entry.S ( 4096* NCPU) actually allotted? If the kernel is still not yet started, who manages and allots stack memory? I got into a chicken egg dilemma..

  • @vanellope9565
    @vanellope9565 Před 22 dny

    i ve been learning java script for 3 months now and i wanted to do a new project and thought a 16 bit computer will be interesting enough. upon trying to grasp the logic behind arrayByBuffer and DataView and misserably failing i ve come to the conclusion that i know way less about computers then i thought i do. Maybe someday i ll be ready for this.

    • @LowByteProductions
      @LowByteProductions Před 22 dny

      Push through! If it was all easy and made sense straight away, you wouldn't be learning, right. Try reading and watching different sources talking about the same ideas. The more you expose yourself to it, the more familiar it will seem, and the less alien. I promise. Things don't all have to make sense at once, but there'll come a point where different pieces will start clicking together. You're ready for it now. Just keep going.

    • @vanellope9565
      @vanellope9565 Před 22 dny

      @@LowByteProductions thank you :) i was doing that now my idea is to make a fetch decode execute loop that counts up that would be easier for the beginning

  • @rodrigoqteixeira
    @rodrigoqteixeira Před 22 dny

    "javascript is open source"

  • @rodrigoqteixeira
    @rodrigoqteixeira Před 22 dny

    Bro actually used backspashes to produce back slashes 💀

  • @rodrigoqteixeira
    @rodrigoqteixeira Před 22 dny

    Why didnt you just "map['\\'] = '\\';"?

    • @kacperkonieczny7333
      @kacperkonieczny7333 Před 22 dny

      I think he needed it as a string

    • @rodrigoqteixeira
      @rodrigoqteixeira Před 22 dny

      @@kacperkonieczny7333 to concatenate it with the rest of the stribg that is the code? Nope, bro just did something unecessary.

  • @harinayan7879
    @harinayan7879 Před 24 dny

    i am facing issue with running make on the firmware.c file. I get the error make: *** No rule to make target 'firmware.elf', needed by 'elf'. Stop. Someone please help.

    • @LowByteProductions
      @LowByteProductions Před 22 dny

      Did you clone the repository? Are you on the right commit for this episode?

    • @harinayan7879
      @harinayan7879 Před 22 dny

      @@LowByteProductions yes sir. I cloned it as is, didn't alter any of the makefiles and only removed the additional files and folders to replicate the folder structure that you had in the blinky video. Also the file is named firmware.c in my directory as well. and on the current commit.

    • @LowByteProductions
      @LowByteProductions Před 22 dny

      Well the makefiles changed a fair bit throughout the series, so it makes sense that it might not work outright. You'll find it easier I think to check out the commit associated with the first episode instead, and try to get that running. From there you'll be able to follow along with the seri3s making your own changes 🙂

    • @harinayan7879
      @harinayan7879 Před 22 dny

      @@LowByteProductions thank you sir i will try that.

    • @harinayan7879
      @harinayan7879 Před 15 dny

      @@LowByteProductions This solution worked sir. Thank you. But now i am facing a different issue in the PWM video related to a core lockup. How may i proceed from here?

  • @furkanonder-ut4mz
    @furkanonder-ut4mz Před 24 dny

    Good stuff mate!

  • @VaibhavBhandarigplus
    @VaibhavBhandarigplus Před 25 dny

    when are you doing #6? great content

  • @MrBogfrog
    @MrBogfrog Před 25 dny

    Excellent.

  • @dblitroot
    @dblitroot Před 27 dny

    When there are multiple timed operations I prefer to do it this way to avoid constant fetching of the ticks value and math inside every if statement: while(1){ uint64_t tick_now = get_ticks(); if(tick_now > start_tick){ start_tick += 1000; .... } .... }

  • @andyschneider6402
    @andyschneider6402 Před měsícem

    Is it possible that the fact the nop instructions don’t consume time consistently as you add them is because a NOP on ARM is not guaranteed to consume time, the processor is allowed to remove them from the pipeline?

  • @Knirin
    @Knirin Před měsícem

    I am a bit in the latter camp. You can write an assembler, compiler, or CPU in JavaScript. Please don’t run around screaming that it is the best tool for that job. I start getting upset when people go doable in language X means language X is the best possible tool for job Y. If you boil most tasks down enough they turn into finite state machines. That doesn’t mean an FSM is the most productive way of tackling a task. I am finding other videos pretty cool.

  • @nceban2136
    @nceban2136 Před měsícem

    Pdos? Clergy's favourite OS

  • @Somali-iv9pu
    @Somali-iv9pu Před měsícem

    hmmm i guess 5 dislikes were having a very bad day xd. thanks alot sir for sharing you knowledge with us, i cant wait to finish all of it 🙏🙏do you suggest books or certifications!

  • @yvesbaumes
    @yvesbaumes Před měsícem

    Great video! Thank you very much for such high quality content. One question though: The `start` function is written in C. Which means it has a functioning stack somewhere. I guess that is the purpose of `_entry` assembly function to prepare the stack for `start`. How does the c code (or the c compiler) know that the stack must begin at `stack0 + hartid * 4096` for the `start` function?

  • @dr3dr3-nb9mp
    @dr3dr3-nb9mp Před měsícem

    libopencm3 won't compile on window. Error with the nvic.h linker line 63: from the make file. Did anyone have a work around this since the include Header file is dynamic link

  • @retrojames4226
    @retrojames4226 Před měsícem

    No unit tests?

  • @rajsahu4644
    @rajsahu4644 Před měsícem

    ❤❤❤❤

  • @Klio_Ukranian
    @Klio_Ukranian Před měsícem

  • @TheodorMoroianu
    @TheodorMoroianu Před měsícem

    Best *nix series on youtube by far!! I really hope there will be a continuation!

  • @torcher5023
    @torcher5023 Před měsícem

    11:46 just use desmos to illustrate concept lol

  • @krishnababu5190
    @krishnababu5190 Před měsícem

    Generally kalloc(size_t sz) takes the size of memory to allocate, but in this os code why kallaoc(void) suppose if i want to allocate memory for a structure of 25 bytes, I get whole 4096 bytes, Is this inefficient Correct me if I am wrong

    • @LowByteProductions
      @LowByteProductions Před měsícem

      kalloc is a page allocator, so yes it always returns 4096 bytes. You can build a finer grained allocator on top of this mechanism.

    • @krishnababu5190
      @krishnababu5190 Před měsícem

      Ok Thanks. I am comparing this page allocator (kmalloc) API with linux kernel kmalloc API. Thanks for pointing out😊.

  • @RomanShchekin
    @RomanShchekin Před měsícem

    This is simply amazing! Best OS explaining video I've seen so far. Thank you so much and please keep it up!

  • @krishnababu5190
    @krishnababu5190 Před měsícem

    Too Interesting Please continue the series😊

  • @rayquazaboladao
    @rayquazaboladao Před měsícem

    Another way to define a expression is as: expr: term ("*" term)* term: factor (("+"|'-") factor)* factor: literal | variable | "(" expr ")"

  • @12rjig13gb
    @12rjig13gb Před měsícem

    in the uart_usr, shouldn't the if statement check for !overrun ?

  • @Georetic
    @Georetic Před měsícem

    nice video

  • @jamalal7357
    @jamalal7357 Před měsícem

    I guess how do you know what is needed to boot the kernel and all the steps required for the architecture? Is there a manual that describes all of that?

  • @w6wdh
    @w6wdh Před měsícem

    24:55 Question: initlock() is passed a pointer to a string (“cons” for example) with type (char *) to retain that information for debugging. But that points to a string in the caller’s data. Can you be sure that the string persists? If it is ephemeral, the pointer would no longer be valid. Do you have to do anything in the code calling initlock() to ensure that the string can always be accessed with the original pointer value? (And yes, this series of videos is amazing. Instant subscription. I’m retired so I no longer write code for embedded CPUs, but your explanations are a delight to follow.)

  • @SumitAdep
    @SumitAdep Před měsícem

    well explained

  • @dengdaley
    @dengdaley Před měsícem

    excellent tutors! could you share your vscode experience for another video?