Git Product home page Git Product logo

memfault / interrupt Goto Github PK

View Code? Open in Web Editor NEW
452.0 33.0 129.0 183.57 MB

A community for embedded software makers.

Home Page: https://interrupt.memfault.com

License: Other

HTML 9.93% CSS 0.02% JavaScript 0.30% Ruby 0.06% Python 0.57% C 79.45% Makefile 2.77% C++ 1.28% Assembly 0.73% Shell 0.09% RobotFramework 0.01% GDB 0.01% SCSS 0.43% Dockerfile 0.05% CMake 0.09% SWIG 0.01% Lua 0.39% ZAP 3.80% Rust 0.03%
firmware embedded developer-tools blog

interrupt's Introduction

Interrupt is a community for embedded software makers and professionals alike.

Contributing

Interrupt welcomes submissions on embedded software topics.

Prior to getting in touch, you should get yourself acquainted with our Code of Conduct.

To submit your content, either email us at [email protected], or open a pull request!

See Contributing for more information.

Running

Docker (Recommended)

Follow the instructions in the Install Docker Engine according to your operating system.

Clone the repo, run in docker:

$ git clone https://github.com/memfault/interrupt.git
$ cd interrupt
$ ./interrupt-server.sh

You can now access the server at http://0.0.0.0:4000

Locally

You'll need:

  • Python 3.8 or later
  • Ruby 2.7.7

Install Dependencies

Clone the repo and install Python dependencies:

$ git clone https://github.com/memfault/interrupt.git
$ cd interrupt
# Setup a virtual environment to avoid cluttering your system
$ python3 -m venv .venv
# Activate the environment
$ source .venv/bin/activate
$ pip install -r requirements.txt

The virtual environment can be deactivated with deactivate.

We highly recommend setting up a version manager for Ruby, such as rbenv. Follow the instructions here to set it up for your operating system and install the right version of Ruby.

Install Ruby dependencies:

# Check that your Ruby version is correct
$ ruby -v
$ bundle install

Launch

Serve with the following command, which will also open up the site in your browser:

$ bundle exec jekyll serve --drafts --livereload --open-url

Acknowledgements

Interrupt is based on the Emerald theme by Jacopo Rabolini. Emerald is available on Github.


Interrupt is sponsored and edited by Memfault.

interrupt's People

Contributors

antonilchuk avatar bahildebrand avatar bernardfitch avatar bkmxer avatar caliwritergirl avatar chrisc11 avatar collhar avatar dauc avatar dependabot[bot] avatar ejohnso49 avatar fouge avatar franc0is avatar geekigirlx avatar gminn avatar ivanvnucec avatar kingfelix avatar koisto avatar lmapii avatar miago avatar mihajlonesic avatar milesfrain avatar mnaberez avatar mrcljx avatar ncmiller avatar noahp avatar sarfata avatar sophiekovalevsky avatar tyhoff avatar victorbordo avatar zamuhrishka avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

interrupt's Issues

Typo in second paragraph of Tools for Firmware Code Size Optimization post

"series of posts" is repeated twice in these second paragraph - the second "series of posts" should be removed as it is not a hyperlink:

In this series of posts series of posts, weโ€™ll explore ways to save code space and ways not to do it. We will cover compiler options, coding style, logging, as well as desperate hacks when all you need is another 24 bytes.

https://interrupt.memfault.com/blog/best-firmware-size-tools

Wrong shared struct address get in a "How to write a bootloader from scratch"

Hello,

First of all thank you for the article about the bootloader! ๐Ÿ˜„

I would like to point out that pointer assignment.

If we consider GNU LD, then to get proper access of a shared_data variable, we should use &:

struct shared_data *sd = (struct shared_data *)&_shared_data_stat;

instead of accessing external variable by value like it is in the article:

struct shared_data *sd = (struct shared_data *)_shared_data_stat;

Pre-commit hook example failes due to python lib sort

I just stumbled across this post from 2021: https://interrupt.memfault.com/blog/pre-commit

Issue:
Upon trying to use this for a project that I am currently persuing - I found that the provided .pre-commit-config.yaml no longer works.

To re-create: (plain new python env)
Python: Python 3.10.14
pre-commit 3.6.2

What fixed it for me:
Bump isort version 5.10.1 to 5.12.0

Emulating a Raspberry Pi in QEMU: Host Platform?

Googling gave me your article ( https://interrupt.memfault.com/blog/emulating-raspberry-pi-in-qemu ) as the first result in asking about emulating a pi with qemu, so good for you, you're getting noticed by the algorithm! Thanks for the article, I learned (or re-learned) a lot by reading it. I especially appreciate the links at the end.

Since you asked people to open issues, here I am!

In the article you write about the host platform:

Since Iโ€™m on a Mac, and the purpose is to get a working Docker image, I set up an Ubuntu 20.04 Virtual Machine in Parallels. If you want to follow along, I recommend you to do the same and get onto a fresh Ubuntu 20.04 with QEMU...

Ok, you're running on a Mac, but what CPU architecture is in that Mac? Intel or ARM / Apple Silicon?

I think it ends up being relevant because I ran into the problem described here:

https://forums.raspberrypi.com/viewtopic.php?t=361643#p2169817

where a person replies with:

I have also seen this message, have no answer, but it works. Although very slow cause all is emulated, so not really interesting. KVM does anyhow not work on real ARM CPU with those RPi kernels, so it is more to show that it can be done, but not for normal use-cases. Use generic virt machine and default Debian distro kernel.

And I found that article because it did not work on an ARM64 CPU. In my case the description of the platform was so open-ended I said, let's try doing it on a Pi 4. I mean, emulating a Pi running Bookworm on a Pi running Bookworm should work? Apparently, not.

So, overall, I think the article would be better if it specified which kind of Mac you used, and if you expect it to work on platforms running ARM CPUs especially Apples or Pis.

And a minor nit, but sudo umount /mnt/image should happen somewhere once you're done with the mounted image, since that really forces all pending writes to hit the disk and it cleans up the namespace for next time.

And a super-nit: Maybe go more into why mount doesn't work inside Docker whereas mtools does? Or if reference states why, put a link to the reference in that section of the article.

Again, this is all small beer. Overall the article is very useful and very well written!

Regards,
Dave, N1AI

Initialisation patterns on embedded systems

Hi,

Thanks for creating a great community around embedded knowledge. I've learnt a lot reading the blogs ๐Ÿ‘

As a future topic idea, I wonder if we can explore initialisation patterns on embedded systems? A frequent cause of bugs in embedded projects that I've worked on is getting the initialisation order wrong which results in subtle and/or sometimes catastrophic bugs. Most initialisation glue logic I've seen have generally been gigantic messes that no one wants to touch.

What techniques/patterns has this community used in the past?

Thanks and look forward to a good discussion.

Renode example compiler warning

I've cloned repo and tried to build Renode example in /example/renode with make command and the following compiler warning occured:

renode-example.c:53:5: warning: no previous prototype for '_write' [-Wmissing-prototypes]
   53 | int _write(int file, char *ptr, int len)
      |     ^~~~~~

To fix the warning I've added function prototype

int _write(int file, char *ptr, int len);

to the top of the renode-example.c file.

I can add pull req to resolve this issue.

INFO:
Compiler version arm-none-eabi-gcc (15:9-2019-q4-0ubuntu1) 9.2.1 20191025 (release) [ARM/arm-9-branch revision 277599]

Topic tags

Consider adding 'topic tags' to the posts. This way, when the number of posts increases it will be easier to read/find all the posts related to a particular topic.

P.S. I really enjoy reading the blog. Good job and keep going. :)

example compile error about not defined symbol in libc

Hi, I find this blog by accident and learn a lot from here. When I try to compile the example demo of breakpoint and debugmon I get a error message at link stage.The error information is here:

Linking library
/usr/lib/gcc/arm-none-eabi/9.2.1/../../../arm-none-eabi/bin/ld: /usr/lib/gcc/arm-none-eabi/9.2.1/../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc.a(lib_a-abort.o): in function `abort':
/build/newlib-CVVEyx/newlib-3.3.0/build/arm-none-eabi/thumb/v7e-m+fp/hard/newlib/libc/stdlib/../../../../../../../../newlib/libc/stdlib/abort.c:59: undefined reference to `_exit'

My platform information:

kernel version: 5.8.0-28
gcc version: arm-none-eabi-gcc(15:9-2019-q4-0ubuntu1) 9.2.1 20191025(release)

After some search I found that is because these demo use some function from libc by include head file like stdio.h, and the lack symbol like _exit is system call which the function in libc invoke. But for these demo there are no need to use a operating system so there are no system call at all. I found the best way to fix it is add a --sepecs=nano.specs at the link flag and it work at my platform. I also make some change to Makefile to let them more useful.

memfault/interrupt docker image does not exist

I'm getting

Error response from daemon: pull access denied for memfault/interrupt, repository does not exist

and I can't see any image on dockerhub?

I have managed to build the Docker image locally with issue.

Emulating a Raspberry Pi in QEMU: How to increase disk space

Thanks for writing up your how you got the Raspberry Pi Os to run in Docker

Is there any way to increase the size of the root filesystem? It's got 600Mb free right now, and I need more space for the task I'm working on.

You already seem to be increasing it to 8Gb, but it's not translating to more space for the mounted filesystem. Any suggestions would be welcome.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.