Wednesday, December 28, 2022

Multidimensional arrays of function pointers

Embedded hardware often contains an application processor and one or more additional processors attached to the printed circuit board.  The firmware that resides on the adjacent processor(s) responds to a series of processor specific instructions.

High-volume, parallel testing of firmware can be achieved using function-like macros and arrays of function pointers, where function name lookup occurs in constant time.  A fast scanner written in C using a finite automata in conjunction with a parser, also written in C, can be used for reading tests based on a custom context-free grammar. Dynamic arrays of function pointers can then be allocated at run-time and code within external object files or libraries can be executed in parallel using multiple processes or threads.

I wrote the following C code which is based on prior client work.  The code uses arrays of function pointers for executing functions via their addresses.

https://github.com/brhinton/bcn

-----BEGIN PGP SIGNATURE-----

iKkFABYKACkiIQXqqIvKb3w2I2gRpj+1e031vEXDfQTg+bTVZYLUx0jyBwUCY7M2
VAAArzMBxjGvmc97GYSHGpvO+hGBq+7JFg1bJJ5Rpu0DHIe9SWKzz7+DEhOJh5Ry
DWdwV4gj9CI+IvGlkPeKgAHItNfeOL/rxG+PTfNPAEVn7qhhxBUmgFS2rHn3N4Lt
aVhcl3+JjJP80hQCwTpNp8+LF2q8W6MjaA4A
=bRZq
-----END PGP SIGNATURE-----
-----BEGIN PGP PUBLIC KEY BLOCK-----

mEkFY65sghYAAAA/AytlcQHIqb41CJquBabOSLFttYTaBSPWPXAYsptm3CYX4F//
7ge6GdeVESRK9BfhzxrCjvLMW/K+5vBl7ycAtDJCcnlhbiBSLiBIaW50b24gPGNv
bXB1dGVycHJvZ3JhbW1lcjE5NzZAZ21haWwuY29tPojGBRMWCgBGIiEF6qiLym98
NiNoEaY/tXtN9bxFw30E4Pm01WWC1MdI8gcFAmOubIICGwMFCwkIBwICIgIGFQoJ
CAsCAxYCAQIeBwIXgAAArUwByNZk9YwXDDg6IgGGVGbiPiJa5ptTqb/stPCR0wdK
czDfcF1fqJib6qUDWC7cJycRTJcjjMHVTToMgAHDBDBvwDdd7IIczspl//5yTlPP
0dYuGLL0IvJXRF2MMx+AjiMRY5vdpN28D+gxP0FXq2Pl4ui0mh4AuEwFY65sghIA
AABCAytlbwG/Ut7euPNKzPiH/UV5OkHQLah/fOnOtx84g52fBXRMP9Zj+SSxuyar
Zifwf1NvKMXXsHo9tFCi9vwDAQoJiKwFGBYKACwiIQXqqIvKb3w2I2gRpj+1e031
vEXDfQTg+bTVZYLUx0jyBwUCY65sggIbDAAAhwEBx2Smtwx2nvS1/4wS1cBKJ7He
EUAMIJT4zjyi6sgdsa4A18pGy4cosu2uH8k/T/wYKbpsG/Rs3GNtgAHHSfVJIMtn
ReWRQ7/L/x5RIpYU+PWeBVI8B07HJlzfjWeUYoQbCyDNl1EcVQDBWmvwmeL/jIkv
7jcA
=KGqN
-----END PGP PUBLIC KEY BLOCK-----

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.