Proposal for Implement a REPL interpreter for PRU
Student: Vedant Paranjape
Mentors: Kumar Abhishek, Jason Kridner
This project is currently just a proposal.
Completed all the requirements listed on the ideas page. the code for the cross-compilation task can be found here submitted through the pull request #138.
School: Veermata Jijabai Technological Institute (VJTI)
Primary language : English, Hindi, Marathi
Typical work hours : 10AM - 7PM Indian Standard Time
Previous GSoC participation: I find embedded pretty interesting, given I have experience with ESP32, I think I will be able to excel in this project. This is the first time i am participating in GSoC
About your project
Project name: Implement a REPL interpreter for PRU
- The PRU is a dual core micro-controller system present on the AM335x SoC which powers the BeagleBone. It is meant to be used for high speed jitter free IO control. Being independent from the linux scheduler and having direct access to the IO pins of the BeagleBone Bhilack, the PRU is ideal for offloading IO intensive tasks.
- Programming the PRU is a uphill task for a beginner, since it involves several steps, writing the firmware for the PRU, writing a loader program. This can be a easy task for a experienced developer, but it keeps many creative developers away. So, I propose to implement a REPL based control of the PRU, hiding all the low level things behind the REPL and providing a clean interface to uses PRU.
- This can be achieved by implementing a PRU firmware which only runs some specific user defined commands delivered by RPMSG, executes and then sends a appropriate response. This can be achieved by offloading major task like lexing, parsing to the linux core, and through RPMSG only certain set of commands will be run, the high level code will be converted to these set of commands, on the linux machine itself.
|May 4||Proposal accepted or rejected||
|June 1||Pre-work complete||Coding officially begins!|
|June 8||Milestone #1||
|June 15||Milestone #2||
|June 22||Milestone #3||
|June 29 - July 3 18:00 UTC||Milestone #4 (Phase 1 evaluations)||
|July 10||Milestone #5||
|July 17||Milestone #6||
|July 24||Milestone #7||
|July 27 - July 31 18:00 UTC||Milestone #8 (Phase 2 evaluations)||
|August 3||Milestone #9||
|August 10||Milestone #10||
|August 17||Milestone #11||Completion YouTube video|
|August 24 - August 31 18:00 UTC||Final week||Students submit their final work product and their final mentor evaluation|
|August 31 - September 7 18:00 UTC||End of Session||Mentors submit final student evaluations|
Experience and approach
I have decent experience in C++, C and Python. I have done several projects involving embedded systems like ESP32, I well-versed with freeRTOS. I recently did a project on ESP32, in which I used ESP to control and plot PID loop running on the embedded device, plotting the values on a python GUI. Other than that I have developed firmware for a 3 DOF arm based on a ESP32 custom board. I did a internship with a embedded deviced startup, where I built:
- Built TCP network stack for embedded IoT Devices
- Implemented Synchronous TCP server using Boost.Asio(C++) and Boost.Thread(C++)
- Implemented a tool to calculate round trip time(RTT) of tcp packets
I actively contribute to open source and do a lot of mini projects throughout the year, you can find my several more interesting projects at my github page
I believe that if I get stuck on my project and my mentor isn’t around, I will use the resources that are available to me. Some of those information portals are listed below.
- https://processors.wiki.ti.com/index.php/PRU_Training:_Hands-on_Labs PRU Guide
- https://markayoder.github.io/PRUCookbook/ Mark Yoder's cookbook is a excellent guide
- Derek Molly's beagle bone guide provides all the information needed for getting up and running with my beagle.
- The technical reference manuals provided by TI on am3358 and am5729 are the best source
- Processor SDK Linux Software Guide is a good reference material
- Currently interfacing with the PRU requires a lot of makefile manipulation, kernel drivers and stuff. There's no working around that for more advanced applications but if you can get something simple up and running quickly with a REPL, that'd be great.
- -Abhishek Kumar