Sunday, November 17, 2024
Cooperative, polling operating system
I have been thinking about a tiny cooperative and polling real-time operating system that works with static, single instance tasks. ESP-IDF is based on FreeTROS, a real-time operating system for embedded devives. Although FreeTROS is called real-time, it has some dynamic behaviour due to dynamic memory allocation and interrupts. Nowadays, many peripherals are connected through serial communication busses, such as SPI, I2C, and I2S, where there are often multiple slave peripherals are connected on a bus. These peripherals often have complex operating modes that can be adjusted through control registers, and possibly also complex behaviour patterns. This has an impact on the real-time behaviour of microcontrollers that communicate with these peripherals. If you do not want to use interrupts, it means you have to use polling to see if an interaction with a peripheral has completed. If you develop an application that interacts with several peripherals, it is logical to have some kind of layering in more device oriented tasks, coordinating tasks, and more high-level tasks. If you do not use operating system like functions like queues, this results in tasks polling the completing of lower-level tasks. To avoid excessive polling, which takes a lot of resources, I have been thinking about a number of queue based approaches to avoid polling. Tasks often make use of finite-state machines, which are usually implemented with case-statements. If these are not compiled to branch tables they performance is lineair to the number of cases. To work around this, one could use functions for each of the states and cause the right function to be called for each state. This does match with the idea of tasks. I have started writing some code as an experiment: TinyCoPoOS.c. I also have been thinking about program generating the code for all the functions given a tasks declaration.Planting fruit trees
In the afternoon, I helped a bit with the planting of fruit trees at Herenboeren Usseler Es. When I arrived the others just were taking a break, because some of them already started at nine in the morning. I mostly dug holes at the places where a tree had to be planted. Twice we had some rain. The first time with some hail and at 14:30, there was a rainbow. I am looking forwards how the trees are going to grow in the coming years.Saturday, November 16, 2024
Harvest
Below a picture of the harvest (except for the 2 kilogram potatoes) that we received this morning from Herenboeren Usseler Es. (What you receive depends on how many 'mouths' you are paying for and personsl choices you make.)The picture shows:
- A bag with 2Kg of rye flour
- Two red chicories
- A savoy cabbage
- A cauliflower
- Two delicata squash
- Some lacinato kale
In the evening, I made some stamppot with the lacinato kale, two small red unions, a yellow bell pepper and some sauerkraut bacon. Conny made a salad with the outer leaves of the two red chicories.
Friday, November 15, 2024
Book
At 17:05:15, I bought the book HETHE BESTE VAN OF WIM T. SCHIPPERS written by Harry Ruhé in Dutch and English, and published by Centraal Museum in 1997, ISBN:9789073285446, from bookshop Broekhuis for € 45.00. This is a bilingual edition where the Dutch text is printed in red and the English text in green on top of each other. To read the text a transparent green and red sheet is provided in the front of the book that you have to put over the text. This book is the catalogue of an exhibition of the same name.Thursday, November 14, 2024
Exhibitions
After work, I went into the city where I visited the exhibitions at Concordia. I saw the following exhibitions:- Joystick by Madison Bycroft. I played a bit with the game but I got into the water and had some trouble getting out of it. I did not know how to exit the game. This exhibition is part of the Overkill Festival.
- Doublet #6: Kira Fröse and Marthe Zink. I felt that they really succeeded into make cohesive exhibtion when combining their art works.
- The Artist's Way with works by various mothers following the book The Artist's Way by Julia Cameron. There were some series of works that really stood out.
- It Gets Better by Tim Vischer.
- Ik kom er nu nog gewoon even echt niet uit by Björn Zielman.
Monday, November 11, 2024
Links
- On Typesetting Engines: A Programmer's Perspective
- Audio Decomposition
- Texture-less Text Rendering
- Mergiraf
Sunday, November 10, 2024
Wijlre
On the way Wijlre Conny and I stopped at the Netherlands American Cemetery and Memorial located in the village of Margraten and waled around the cemetery. We thought about the many soldiers that died during the liberation of Europe from the German occupation and how this relates to the current war in the east of Europe. We did like the design of the chapel with the window on the side.Close to noon, we arrived at Kasteel Wijlre Estate for the exhibition Maintaining Its Spirit: Collection Marlies & Jo Eyck. I found the following works noteworthy:
- Color space generator Eyck, Peter Struycken, 1999.
- 1.5 kwadraat, reliëf met anderhalf vierkant, Ad Dekkers, 1969.
- Untitled, herman de vries, 1977.
- TAP2 TAPW5, Peter Struycken, 19880-12-02.
- Claie obscure, Carel Blotkamp, 2002.
- From Cube to Cylinder, Ad Dekkers, 1968.
- Untitled, Leo Vroegindeweij, 1993.
- Kleuren van Tuinhuisje naar Goudreinet appel, Peter Struycken, 1993.
- Salami, Carel Visser, 1964.
- Broken Circle, Ad Dekkers, 1971.
- Pathway Tree and Bronze Tree, Giuseppe Penome, 1197.
- Piet 5, Peter Struycken, 1984.
- Afstemming IV, Peter Struycken, 2020.
- Dots 81 mimosa, Peter Struycken, 1981.
- Untitled, Richard Paul Lohse.
- Jacquard geweven wanddecoratie, Peter Struycken, 2008-09.
- Plant-Based, Carel Visser, 1989.
We also saw the exhibition Growing Poetics by Thierry Oussou. We in particular liked the La Poessie in one of the rooms in the attic that he had filled with branches he found on the estate.
On the way home we stopt at the McDonalds in Drosten were we ordered two McPlant meals consisting of a plant based burger with french fries and a cola. This is at least the third time I visited this McDonalds. I visited it on Saturday, September 22, 2018 with Andy and on Friday, July 29, 2010 with Li-Xia.
Saturday, November 9, 2024
Bonnefanten Museum
Conny and I visited the Bonnefanten Museum in Maastricht. We first went to see the exhibition Maintaining Its Spirit: Collection Marlies & Jo Eyck at Bonnefanten. I found the following works noteworthy to mention:- Untitled, Rob van Koningsbruggen, 1977.
- Cluster no. 16, Peter Struycken, 1971.
- Cluster no. 2, Peter Struycken, 1971.
- KTV1T.852, Peter Struycken, 1983.
- POS 18F, Peter Struycken, 1985.
- KTV kleur, Peter Struycken, 1978.
- Lnarc, Peter Struycken, 1973.
- Structuur XXXIII, Peter Struycken, 1967.
- Kleurstructuur voor bedrijfspand J. EYCK 1e Roermond, Peter Struycken, 1977.
- KTV kleur, Peter Struycken.
- 090373-1B (Plons), Peter Struycken, 1973.
- Field 47, Peter Struycken, 1979.
- Shft 25, Peter Struycken, 1983.
- SIM, Peter Struycken, 1987.
- Shft 34, Peter Struycken, 1986.
- Boulez/45k/20nov04/06-maa/28.bmp, Peter Struycken, 2005.
- Some Natural Aspects of Sculpture, Ger van Elk, 1972-2002.
- She loved her madly, Jarostaw Fliciński, 2005.
- 71-36, Jan Schoonhoven, 1971.
- Untitled, Ben Akkerman, 1983-1984.
- Wand II, Amédés Cotrrer, 1970.
- 2T, Donald Judd, 1971.
- Dubbelschilderij, Bob Bonies, 1968.
- Computerstructuur 69-II, Peter Struycken, 1969.
- Houtgrafiek nr VIII, Ad Dekkers, 1970.
- Stad, Ad Dekkers, 1960.
- Zeshoek en ruit overgang, Ad Dekkers, 1967.
- Cirkel op de middellijn omgezet, Ad Dekkers, 1968.
- Untitled, Ewerdt Hilgemannn, 1973.
- Untitled, Bart van der Leck, circa 1928.
- Serie A,B,C,D,E,F, Right Hand Left Hand, Kenneth Martin.
- square grid - complexities, herman de vries, 1975.
- Gitter, François Morellet, 1962.
- Untitled, Chris Beekman, circa 1945.
- Zwart Wit, Amédé Cortier, 1972.
- nKM V, Carel Blotkamp, 2006.
- The space between you and me, Keith Edmier, 2000.
- Tschlin, Curdin Tones, 2005.
- Far from the madding around , Dan Asher, 1996.
- On a night like this II, Mathilde ter Heije, 1998.
- Kleine Pneuma, object no. 14, Robert Lambermont, 2001.
- Regen, Carel Visser, 1985.
From the exhibition Stanley Donwood and Thom Yorke: Maps of the New World I liked:
- Unchecked, 2022.
- A Map of the New World, 2024.
From the exhibition Małgorzata Mirga-Tas: This is not the end of the road, a solo exhibition with works by Małgorzata Mirga-Tas, I found the following works to be noteworthy:
- Phenia - Sister, 2024.
- Basiawiben predale baba - Music for grandmothers, 2024.
- Roziena kiereta babakie sinkar hajtań - Roziena brushes her grandmother's beautiful hair, 2024.
- Portrait of Lalla Weiss, 2024.
- Re-Enchanting The World, a series of twelve works, which we both
found the most impressive of what we saw on this day:
- January 2022
- February 2022
- March 2022
- April 2022
- May 2022
- June 2022
- July 2022
- August 2022
- September 2022
- October 2022
- November 2022
- December 2022
- Out of Egypt, 2024.
- Out of Egypt, 2024.
From the exhbition Dream On, I found the following works noteworthy:
- A Map of Days, Grayson Perry, 2013.
- Untitled (Master of the Universe, Lee 'Scratch' Perry, 2018.
- Mommy, Sofiia Dubyna, 2023.
- Dianaland, Sofiia Dubyna, 2023.
- Diana's Monkey, Sofia Dubyna, 2023.
- Pee on Presidents, Melanie Bonajo, .
- Eight drawings, Sandra Vásquez de la Horra, 2007.
From the exhibition Collection Neutelings, I found the following painting noteworthy:
- Still Life, Henri de Fromantiou, circa 1670.
- Portrait of a Couple or a Mother and Son, Cornelis de Vos, 1600-1650.
- Family Portrait, Pieter Isaacsz, 1609.
- Census at Bethlehem, Pieter Brueghel Jonge, ca. 1605-1610.
From the exhibition Truly Wicked: The Seven Deadly Sins visualised, I found the following works noteworthy (I was getting a bit tired and filled with images):
- Herbergscène, Helen Verhoeven, 2017.
- Church I, Helen Verhoeven, 2017-2018.
- Tavern Scene, Monogrammist van Bruuswijk, circa 1535-1540.
- The World in Good Standing, Anonymouse, circa 1570.
- Allegory of Lust / Lascivia, Abraham Jansens van Nuyssen, circa 1618.
Furthermore, we walked through Studio Rossi with design of the museum building and walked around The Shooting at Watou by Folkert de Jong.
Maastricht
After we visited the museum, we walked through Maastricht taking some pictures. We brought a short visit to the bookshop Boekhandel Dominicanen, which I visited before on Sunday, July 21, 2019. It was already dark, but we took some pictures from the Sint Servaasbrug (a bridge over the Meuse river) before went to the Indonesian restaurant KapuláGa were we had the Kakanda rice table, which existsed of yellow yice, daging balado, rendang, smoor, ayam pedas, ayam opor, sate ayam, sambal goreng udang, tempe, poached egg, sayur lodeh, seasonal vegetables, gado gado, atjar, seroendeng, roedjak. We had some strawberry ice as an desert. We were very satisfied with the dinner.Thursday, November 7, 2024
Cubes from Sheet: 11 by 11
I have this feeling that there are solutions for all cubes from a sheet problems, where at least one piece can be placed into, exists where at most twelve squares are unused for cubes. In the past weeke, I have been searching for counter examples. The program that I used, took a long time to find a solution with less than thirtheen unused squares for a square of eleven by eleven squares. Yesterday, I modified my Exact Cover program to also support positions with multiple vectors. This is a generalization of the Exact Cover problem. The multiple positions are needed to restrict the number of unused squares to an exact number. When I tried this program on the elven by elven square with seven unused squares, it found some solutions within half an hour. The first solution it found was represented as (on a single line):S0_1_2_13_14_15|S3_4_5_16_17_18|S6_7_8_19_20_21|e9|e10|E11_12_23_24_25_36|E22_33_34_35_46_47|W44_45_56_57_68_69|W55_66_67_78_79_90|E77_88_89_100_111_112|e99|e110|D31_32_40_41_42_52|e30|W43_53_54_63_64_74|W65_75_76_85_86_96|E87_97_98_108_118_119|e109|e120|A28_29_38_39_50_61|Z26_27_37_48_58_59|S51_62_72_73_83_94|S49_60_70_71_81_92|K80_91_101_102_103_113|A82_93_104_105_114_115|A84_95_106_107_116_117|
This evening, I checked this solution and made the following drawing of it:
+--+--+--+--+--+--+--+--+--+--+--+ | | | |##|##| +--+--+ +--+--+ +--+--+ +--+--+ | | | | | +--+ +--+--+--+--+--+--+--+--+--+ | | | | |##| | + +--+--+ + +--+ +--+--+ +--+ | | | | | | | +--+--+ +--+ +--+ +--+ +--+ + | | | | | | | | | +--+ +--+--+ + + + +--+ +--+ | | | | | | | | | + +--+ +--+--+ +--+ + +--+ + | | | | | | | +--+ +--+--+ +--+ +--+--+ +--+ | | | | | | | | | | + +--+ + + + + + + +--+ + | | | | | | | | | | +--+ +--+ +--+ +--+ +--+ +--+ |##| | | | | |##| +--+ +--+ +--+ +--+ +--+ +--+ |##| | | | | |##| +--+--+--+--+--+--+--+--+--+--+--+
I plan to refactor the code of my Exact Cover program such that it can be more easily be called from the program finding solutions for the Cubes from Sheet problems.
Tuesday, November 5, 2024
Book
At 18:40, I bought the book Prospects 2021: Mondriaan Fonds toont talent edited by Mirjam Beerman, written in Dutch, and published by Het Mondriaan Fonds in June 2021 from thrift store Het Goed for € 1.00. Before I there, I went to thrift store Rataplan. Although it seems they have more books there, I get the impression that they sell less books. These trift stores are for profit shops.Link
Sunday, November 3, 2024
Links
Saturday, November 2, 2024
Colourful harvest
We got a rather colourful harvest from Herenboeren Usselere Es and I took a picture of a part of the harvest.In this picture there are: a small puprple cauliflower, a romanesco broccoli, a fennel, two red cabbages, a green and a orange pumpkin, and a leaf of curly kale.
Link
Friday, November 1, 2024
63 years
I was born on Wednesday, November 1, 1961 at 9:45 in the morning (CET). That means that today, I will be 63 years according to the calendar and 23011 days old. But how old am I really? The tropical year, the time that it takes for the seasons to return, is said to be 365 days, 5 hours, 48 minutes, and 45.19 seconds. Yesterday, around 15:56:26 in the afternoon, it was 63 tropical years since I was born. But the tropical year is shorter than the sidereal year, the time taken by the Earth to orbit the Sun once with respect to the fixed stars, namely 365 days, 6 hours, 9 minutes, and 9.76 seconds. That means that, today at 13:22:14 it will be 63 sidereal years after I was born. The average anomalistic year, the time taken for the Earth to complete one revolution with respect to its apsides, is 365 days, 6 hours, 13 minutes, and 52.6 seconds. That means that, today around 18:19:13 it will be 63 average anomalistic years since I was born.Double declaration?
I have been using the C progamming language (and later C++) for more than 34 years, but today I wrote something, I cannot remember having written before and it looks like a 'double' declaration of a variable:extern int counter; int counter = 0;I am big fan of encapsulation and I like clean include files that hide implementation details that are not necessary for the users of the functions given in the header file. The implementation for a certain header file depended on a global counter that I did not want to include in the header file itself, but it needed to be incremented somewhere else and initialized to zero. So, I wrote in that other location, the main file (containing the main function):
extern int counter = 0;And this resulted in a compile error, because you are not allowed to initialize a variable that is declared extern. Next, I changed the line into:
int counter = 0;Now, I got a linking error saying that the other external definition (in the C file implementing the header file that relied on the counter variable) was not defined anywhere. This is because although it is defined in the main file, it was not defined as extern and thus not visible on the outside and thus becoming invisible for the linker that combines all the separately compiled C programs into one executable. It dawned on me that if I would have placed the extern declaration in the header file, it would have worked because then during the compilation of both C programs it would have been defined as extern and in the main program I still would have been able to initialize it. Although it is not common to see a 'double' declaration in a C file, like the above, and even looks a bit confusing, it is actually somthing that is done all the time, because the C preprocessor put both declarations into the intermediate file that is compiled by the actual compiler.
Links
- Crux is a tool for improving the assurance of software using symbolic testing.
- C Intermediate Language (CIL)
Thursday, October 31, 2024
Book
At 17:25, I received the book jurrian van den berg: verzamelaar van dingen written and illustrated by Linda Rusconi in Dutch and published by Lecturis in November 2024, ISBN:9789462265271, from the Lecturis webshop for € 40.00.Sunday, October 27, 2024
ESP32 I²C without interupts
In some bare metal embedded solutions you do not want to make use of interupts, because they potentially could introduce unpredictable behaviour. If you want to do this for the ESP32 it usually means that you cannot the high-level parts of the ESP-IDF because they are based on FreeRTOS that uses interupts. The implementation of the I²C driver makes use of interupts. The interupt handler is the function i2c_master_isr_handler_default in the file i2c_master.c. In this function i2c_ll_get_intr_mask is used to get the information about the interupt being raised and the function i2c_ll_clear_intr_mask is called to clear the bits. Before, in the function s_i2c_transaction_start, the function i2c_ll_enable_intr_mask is called with I2C_LL_MASTER_EVENT_INTR, which enables the interupts for:- The ACK value received by the master is not as expected (I2C_NACK_INT_ENA_M).
- The SCL stays high or low for more than 2I2C_T IM E_OUT_VALUE (default 16) clock cycles during data transfer (I2C_TIME_OUT_INT_ENA_M).
- The detection of a STOP bit, signaling that the transaction is complete (I2C_TRANS_COMPLETE_INT_ENA_M).
- The SDA's output value does not match its input value while the master's SCL is high (I2C_ARBITRATION_LOST_INT_ENA_M), meaning that some other device is generating signals on the bus or there is an electrical interferance.
- The op_code of the master indicates an END command and a END condition is detected (I2C_END_DETECT_INT_ENA_M).
Link
Saturday, October 26, 2024
Chasing The Dot
Conny and I went to Rijksmuseum Twenthe to see the exhibition Chasing The Dot with installations by Philip Vermeulen. We saw the following installations:- Flying, 2024.
- Fanfanfan, 2021-now.
- You are here, 2024.
- Chasing The Dot, 2021-now.
- Ocular Drift, 2022
- Pules, 2021
We also watched a short documentary about Philip Vermeulen and there also was a room with books and some (related) works. The works are:
- Untitled, Jacob Bill, 1967.
- Trames (2×), François Morellet, 1965.
- Reliëf R 74-14, Jan Schoonhoven, 1974.
- Vega-Tuz, Victor Vasarely, 1981.
- Homage to the square, Josef Albers, 1972.
- Thee Psychick Bible, by Genesis P-Orridge
- Sound Art: Sound as a Medium of Art edited by Peter Weibel.
- Splendid Voids: The immersive works of Kurt Hentschläger by Isabelle Meiffert.
- Quantum, de oerknal en God by Maarten van Buuren.
Next we saw the exhibition Gogbot x RMT (also called: The Tec Divide), which I already saw on Friday, September 13. We watched the works in the following order:
- You are Light an Cabbage, Diana Gheorghiu, 2023.
- Calculating Empires: A Genealogogy of Technology and Power, 1500 - 2025, Kate Crawford & Vladan Joler. (Very large and detailed inforgraphic.)
- Retraining Laziness, T(n)C / Tina Kult and Agnes Varnai, in collaboration with Madeline Hall, 2023.
- Forest filled with pines and electronics, Troika, 2022.
- All Watched over by Machines of Loving Grace, Richard Brautigan, 1967.
- Irma Watched over by Machines, Troika, 2019.
- A Boring Dystopia, Matthias Planitzer, 2023.
- 564 Tracs (
Not a love songis usually a love song), Miloš Trakilovió, 2023. - The Materiality of a Natural Disaster, Hilda Hellström, 2012.
- Technosamanic Systems: New Cosmological Models for Survival, Suzanne Treister, 2020 - Now.
- A Bestiary of the Anthropocene, Disnovation.org, 2021.
Friday, October 25, 2024
19.0° Celsius
The temperature at Twenthe Airport has gone up to 19.0° Celsius, which breaks the previous record of 18.9° on this date in 1953.Tuesday, October 22, 2024
Book
At 16:56, I bought the book On Anarchism written by Noam Chomsky in English and published by Penguin UK in 2013, ISBN:9780241969601, from thrift store Rataplan for € 0.50.Verifying and documenting live-bootstrap
My project "Verifying and documenting live-bootstrap" is one the selected proposals eligible to receive a grant from NLnet Foundation in the April 2024 NGI Zero Core call, alongside 48 other exciting new projects. I have decided not to accept this grant, because I have lost interest in the project, having finished most of what I wanted to achieve and gave a presentation about it on September 29. I made an attempt to also run strace for the other supported CPU's, but failed to do so. I have created a page to present the results and give some background and history of the project as a kind of finalization of my investigations of the past years.Monday, October 21, 2024
23,000 days
Today, it is 23,000 days ago that I was born. I decided to celebrate this special day by treat my colleagues on (small) cake. On Tuesday, January 25, 2022, I celebrated that I was 22,000 days old. On Sunday, 18 July 2027, I will be 24,000 days old.Low-level SPI on ESP32-S3
I am reading Chapter 30 of ESP32-S3: Technical Reference Manual to understand how Low-level SPI works when using it in master mode, using 1-bit SPI, 4-line half-duplex mode, and CPU-controlled single transfer (no DMA), normal bit order, writing and/or reading at most 4 bytes (32 bits), only using DOUT and DIN and skipping CMD and ADDRESS (because we are using 1-bit SPI and there is no need to have those). My notes are:- SPI_WR_BIT_ORDER and SPI_RD_BUT_ORDER set to 0 for MSB first (the default).
- SPI_Wx_REG registers for CPU-Controlled Data Transfer (30.5.5).
- SPI_USR_MOSI_HIGHPART and SPI_USR_MISO_HIGHPART set to 0 (the default).
- SPI_DMA_RX_ENA and SPI_DMA_TX_ENA set to 0 (the default).
- SPI_CLK is generated from clk_spi_mst with SPI_CLKCNT_N and SPI_CLKDIV_PRE.
- SPI_SLAVE_MODE set to 0 (the default).
- SPI_USR_CONF set to 0 (the default) for single transfer.
- SPI_USR_COMMAND set to 0 (not the default).
- SPI_USR_COMMAND_BITLEN set to 0 (the default).
- SPI_USR_ADDR and SPI_USR_DUMMY set to 0 (the default).
- SPI_USR_ADDR_BITLEN set to 0. (The default is 23, which stands for 24 bits). (The address is taken from the SPI_USR_ADDR_VALUE register.)
- SPI_USR_DUMMY_CYCLELEN to 0. (The default is 7.)
- SPI_USR_MOSI set to 1 when writing data (for DOUT).
- SPI_USR_MISO set to 1 when reading data (for DIN).
- SPI_USR_DATA_BITLEN set to number of bits to write and/or read. (The default is 0.)
- SPI_CS_HOLD_TIME set to 1 (the default).
- SPI_CS_HOLD set to 1 (the default).
- SPI_CS_SETUP set to 1 (the default).
- Not sure to set SPI_CS_SETUP_TIME to another value than the default 0.
- All SPI_Fx_DUAL/QUAD/OCT set to 0 (the default) for 1-bit SPI.
- SPI_USR set to 1 (to trigger a SPI operation).
- SPI_UPDATE set to 1 (to synchronize SPI registers from APB clock domain into SPI module clock domain).
Section 30.5.8.4 'Half-Duplex Communication (1/2/4/8-bit Mode)' explains how to set the registers for the desired SPI-usage. My notes:
- The CMD state is not mentioned as being optional. But the CMD can be 0 bits long.
- SPI_DOUTDIN set to 0 (the default).
- Set the FSPICLK according to Section 30.7.
- Configure interrupts.
- Set SPI_DMA_AFIFO_RST, SPI_BUF_AFIFO_RST, and SPI_RX_AFIFO_RST to reset these buffers.
- Set SPI_USR to start the transfer.
The file spi_struct.h gives C struct definition for accessing the different parts of the registers. These are used in the file spi_ll.h. The following 'functions' can be of interest:
- spi_ll_master_init.
- spi_ll_master_cal_clock to calculate the clock settings.
- spi_ll_master_set_clock_by_reg to set these clock settings.
- spi_ll_master_set_line_mode to set the 1-bit mode.
- spi_ll_set_command_bitlen to set SPI_USR_COMMAND(_BITLEN).
- spi_ll_set_addr_bitlen to set SPI_USR_ADDR(_BITLEN).
- spi_ll_enable_mosi and spi_ll_enable_miso.
- spi_ll_set_half_duplex to set SPI_DOUTDIN.
- spi_ll_master_set_clock_by_reg to select the CS to be used.
- spi_ll_apply_config to set apply the register configurations.
- spi_ll_write_buffer to set the data to the SPI_Wx_REG registers.
- spi_ll_user_start to set SPI_USR to start the transfer.
- spi_ll_get_running_cmd to check if the command is still running.
Note that the ports of the device that is being used, also need to be set.
Thursday, October 17, 2024
Links
- Finding all convex tangrams
- Van Der Poel 3D Wooden Brain Teaser Puzzle Solution
- 3D-Puzzle Van der Poel
- Willem van der Poel
Wednesday, October 16, 2024
Mushrooms on tree stump
This morning, just before leaving for work, I took some photographs in our backgarden of the mushrooms that appeared on the tree stump of the chestnut tree that we cut down two years ago. I have no idea what kind of mushroom it is, but I guess that it is a member of the family of polyporacae.Monday, October 14, 2024
C/2023 A3 (Tsuchinshan-ATLAS)
This evening, Conny and I biked to the country road called Borweg. (This road is named after a stronghold build by an Italian named Bernardino Cernaego who married Anna van Scheven as is mentioned on May 20, 1585.) We went there in the hope to catch a glimse of the comet C/2023 A3 (Tsuchinshan-ATLAS). When we arrived it was too light at the horizon. After some time, I thought to see a faint light with some line going up to the left. I took some pictures, one of which is shown below, in which the faint light of the comet is visible.Sunday, October 13, 2024
Wind direction graph
I noticed that the wind direction graph that is shown when you select 'Expertpluim' at the Weer- en klimaatpluim en Expertpluim page on the website of the Royal Netherlands Meteorological Institute, now has been improved like I did on July 29, 2022. I noticed that they did not use the solution (more a hack) that I used on my page. I have not figured out how they implemented it. Maybe there is now an option in the HighChart library for this.Saturday, October 12, 2024
Going into the city
When I biked on the road called Spoordijkstraat, which means railroad dike, I noticed some plants growing up against the sheet pile that was installed in the past year for the bike 'highway' running from Hengelo to Enschede. The YouTube video Bouwteamproject Aanleg F35, traject: Twekkelerzoom - Centraal station, Enschede shows an animation of the design of the bike path and the sheet pile starting from 0:59. Below one of the pictures I took.
At 13:44:26, I bought the booklet AKI Schilderlichting 2008 written by Joris Geurts, Kars Persoon, Kees Smits, and Elly Strik in Dutch and German, and published by AKI-ArtEZ Enschede in 2008 from Het Goed for € 0.50.
At TETEM art space, I saw the Model Collapse exhibition by Cyanne van den Houten and Ymer Marinus, who are part of the Telemagic collective. Before I entered the immersive exhibition, I was told that the exhibition is not about AI, as the title of it refers to concept of model collapse, but about how to get an AI like ChatGPT, but about how to get there. According to the description it 'depict the landscape from which generative AI emerges. Revealing its self-consuming origins in extraction of the earth's resources and data through relics, artifacts and stories from the past.' I was anticipating to learn some more about how these Large Language Models are created, but when I entered the exhibition I was a bit confused about it. There was a large screen with some text and about ten statue like objects with lights, buttons and displays. On was covered with a small displays that I found quite interesting.
At Fotogalerie Objectief, I saw the exhibition People Matter with photographs by Peter van Tuil and Frans Rentlink. From Peter van Tuil there were photographs from his books Ergens: Malaga 2023 and HUIS & HABITAT: Pieter en WillyPeter. The later is about the reclusive artist Pieter Derksen. Ingrid Hendriksen also took pictures of him with some text in English, which can be viewed at: (At home with Pieter Derksen: The reclusive artist. Frans Rentlink had a series of portrets of the surrealistic painter Charles du Bois and a friend of him called Johan.
At Concordia, it was quite busy with people visiting the Sustainable Fashion Experience Enschede. I first looked in the front room, where the exhibition Joystick by Madison Bycroft (on Instagram) was held. Next, I walked around the area where Kira Fröse and Marthe Zink are working on the Doublet #6 exhibition and then I went upstairs to have a second look at the Triangle in Square, but there was someone making some recording, so I did not walk around. I felt like the video's being displayed looked different. Then I heard some singing downstairs and it turned out that the gay men's chorus Soorten & Maten were practice singing the song 'Hotel California' (if I am not mistaken) as a warm-up for the performance they were going to give later. I presume as part of the opening of the exhibition It gets better by Tim Vischer, which is part of the Rainbow Days event. I left before the opening (also not being aware when it was).
Friday, October 11, 2024
Magnolia seeds
Last Monday, I already harvested one of the berries from a seed pod that had partly opened. I kept it on my laptop. I continued checking the other pods. On Thursday morning, I closed my laptop not realizing that the berry was there. When I opened it in the evening, I noticed that it had crushed the berry and revealed the seed. I placed the seed in a small pot with potting soil. This morning, I wanted to show the pods to Conny, but when I did so, the end of the branch with the pods, broke off, probably from the location where the flower used to start. I noticed that there already where two cracks at in the two remaining pods. In the evening, I opened the cracks, took out the berries, and opened them to remove the seeds. I tasted a bit of one of the berries, but it did not taste nice. (I immediatelly wondered wether they are poisonous, but this seems not to be the case.) I potted those two seeds as well. I have wrapped the pots in plastic bags and placed them in our shed.Tuesday, October 8, 2024
Link
- luxOS is a portable work-in-progress microkernel written from scratch.
Sunday, October 6, 2024
Seed pods in magnolia
This afternoon, after we went on a walk in the neighbourhood, I spend some time trimming some bushes in the front garden with a hedge trimmer. I also did some work on the magnolia and spotted some red seed pods as can be seen in the picture below.I am thinking about when to harvest them. If I harvest them now, the seeds might not be mature enough. It looks like the fruits have not come out yet. If I wait too long, the seeds might be eaten by some birds and I will not be able to harvest the seeds. In 2013, it was on November 25 that we harvested the berries. I think, I am going to keep an eye on it for the coming week.
Saturday, October 5, 2024
Still life of the harvest
Below a still life of part of the harvest that I received this morning from Herenboeren Usseler Es or what I took from the giveaway table where other members can donate part of their harvest or where vegetables are harvested but not given out because they are too small or left over from a previous issue.The picture shows:
- A bag with some flour.
- Two fennels
- A sweet potato
- Two small pumpkins
- A red onion
- Two leeks
- Two (orange) pumpkins
- A courgette
- A red chicory (a cross between Belgian endive and Radicchio Rosso, I read somewhere)
State machines with a switch statement
While developing embedded software, you often have to deal with state machines, to implement non-blocking behaviour. If for example, one of the tasks for your embedded software is to read data from some UART and send it to another UART, you could have a function like:
void echo_infinite(UART *in, UART *out) { while (1) { while (!data_available(in)) { // wait } char ch; ch = read_byte(in); while (!ready_for_sending(out)) { // wait } write_byte(out, ch); } }
The above function will never terminate. That is no problem if that is the only thing your device has to do, but totally not acceptable, if your device has to do something else as well, for example, have a blinking LED. The traditional solution is to use a state machine and call the function implementing the state machine from the (never terminating) main loop. In case there is just one such task, one can make use of static define variables for the local variables. Otherwise, one has to define a struct for each such task and pass this as an argument. (See the page Machine independent implementation of Cooperative Multi-threading in C for how this could be done.) If you want to implement the above function echo_infinite as a state machine, you get something like::
void echo_state_machine(UART *in, UART *out) { static char ch; static int state = 0; switch (state) { case 0: if (data_available(in)) { ch = read_byte(in); state = 1; } break; case 1: if (ready_for_sending(out)) { write_byte(out, ch); state = 0; } break; } }
This code looks rather different from the above code. For this simple case, with only two states, it is probably not that difficult, but in case you have something like ten states, it can quickly turn into Spagetti code, that is difficult to follow, could have dupplicated code, and could have subtile bugs. In case the function implementing your task had no switch-statements and there is but one instance of your task, one could write the following code using some defines that are going to be explained below:
void echo_async(UART *in, UART *out) { START_ASYNC while (1) { while (!data_available(in)) { WAIT } static char ch; ch = read_byte(in); while (!ready_for_sending(out)) { WAIT } write_byte(out, ch); } END_ASYNC }
Notice that this code looks very much like the initial version. Note the use of static before the definition of the local variable ch. The defines one has to use, are the following:
#define START_ASYNC static int state = 0; switch (state) { case 0: #define WAIT state = __LINE__; return; case __LINE__: #define END_ASYNC }
These defines make use of the fact that the 'case' statements belonging to 'switch' statement may occur everywhere in the block following the 'switch'. In a sense, the 'switch' statement acts like a kind of 'goto' that can jump everywhere in the code belonging to it. It also makes use of the fact that the '__LINE__' macro returns the number of the current line. Note that they are replaced with the line number of the line where 'WAIT' is used, not where it is defined, according to the standard rules of how the C-preprocessor works. See the program D241005.c for an example that uses the above functions, where the functions echo_stm and echo_async are called a hunderd times, which is not always enough to print the string "Hello World!". The programs accepts a number as an argument to be used for initializing the random generator. (Find a number that makes all the functions print the whole text.) After the above two functions are called from main, the function echo_infinite is called, which never terminates, meaning that the program has to be terminated for it to end.
If one does want to use a 'switch'-statement in the code, one could use a combination of a switch statement at the start of the function and 'goto'-statements to labels matching the various places to wait. This does recuire one to number the states explicitly, which requires some additional work and bookkeeping, but it could help when implementing unit tests. When using C++, one can replace the static variables with private members of the class the method belongs to. This technique can be used to define iterators that are implemented as co-routines that yield results whenever needed. For a example, see the next method of the class InlineIncludesIterator in the program kaem_parser.cpp. For a more detailed description of all the possible ways to implement co-routines, see also: Coroutines in C.