Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.
|
Forum Index : Microcontroller and PC projects : Problems with PEEK and POKE in MMBasic
Author | Message | ||||
v.lenzer Regular Member Joined: 04/05/2024 Location: GermanyPosts: 49 |
I want to create a data logger with an RP2040-Zero. I'm working with MMBasic, V.5.08. I wanted to use POKE BYTE .. and PEEK ... for this. But I haven't had any success with that yet. POKE BYTE 1000,111 (write the value 111 to address 1000) seems to work. At least I don't get an error message with it. But with PEEK(BYTE 1000) I don't get the value 111 back. I've already searched the forum, but unfortunately I haven't found any entries. Does anyone have experience with PEEK and POKE in MMBasic? Can the RAM of the RP2040-Zero be used for this at all? Best wishes! Joachim |
||||
thwill Guru Joined: 16/09/2019 Location: United KingdomPosts: 4036 |
Hi @v.lenzer, Not immediately sure about why that doesn't work (Edit: perhaps address 1000 - which is very low - is acting as ROM but not reporting an error when you try to write to it ?), however ... Are you POKEing and PEEKing into arbitrary addresses? ... I would recommend against that. Allocate an INTEGER array, and use POKE VAR and PEEK(VAR ...) (or PEEK(VARADDR var) so you know that you own the memory in question and it isn't the address of a piece of supposedly opaque MMBasic internals. Best wishes, Tom Edited 2024-06-10 01:12 by thwill Game*Mite, CMM2 Welcome Tape, Creaky old text adventures |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9110 |
As Tom says...... |
||||
v.lenzer Regular Member Joined: 04/05/2024 Location: GermanyPosts: 49 |
thank you very much for your advices. I should have known that address 0 points to the ROM. I'm sorry. If I poke higher addresses than 16KB, the connection is broken. I'm probably poke to RAM locations that contain important values or the program. With DIM INTEGER adr(nbr) I can unfortunately only store a maximum of 256 bytes. That's why I came up with the idea of writing to RAM. I wanted to write several thousand pulses (data logger). I have to come up with a construct with variables. We'll see. In any case, I now know how to handle PEEK and POKE. Edited 2024-06-10 02:07 by v.lenzer Best wishes! Joachim |
||||
Mixtel90 Guru Joined: 05/10/2019 Location: United KingdomPosts: 6783 |
Don't POKE just anywhere. It either won't work (if you're lucky), introduce obscure and unpredictable errors (if you're unlucky) or just crash the lot. There is no "safe" normal RAM area that can be used with POKE. You can poke into the video display area or into the variables area (into known variables only). See VAR POKE. I often POKE into strings, it's a neat way to store individual bytes. For a data logger you are probably better saving to a file using OPEN APPEND to tag the new stuff onto the end. The file can be on drive A (but space is limited) or on a SD card. Mick Zilog Inside! nascom.info for Nascom & Gemini Preliminary MMBasic docs & my PCB designs |
||||
thwill Guru Joined: 16/09/2019 Location: United KingdomPosts: 4036 |
Why do you conclude that ? Untested but something along these lines definitely allows you to store/manipulate 16K: Dim buf%(16 * 1024 / 8) ' 16K buffer Dim offset% For offset% = 0 To (16 * 1024) - 1 Poke Var buf%, offset, &hAB ' Store 0xAB in each byte. Next Best wishes, Tom Game*Mite, CMM2 Welcome Tape, Creaky old text adventures |
||||
v.lenzer Regular Member Joined: 04/05/2024 Location: GermanyPosts: 49 |
Unfortunately, the short program didn't work. The error message appears: "[4] Poke Var buf%, offset%, &hAB ' Store 0xAB in each byte. Error : Array dimensions" Perhaps it's because I'm using an RP2040-Zero. I now have to study the OPEN APPEND command. Perhaps I can handle it. At this point I have to apologize. I'm a newbie. I've already programmed many controllers in machine language, but I'm only just starting out with MMBasic. I'm trying to learn and practice through small projects in practice. That's why I often ask stupid questions. Best wishes! Joachim |
||||
thwill Guru Joined: 16/09/2019 Location: United KingdomPosts: 4036 |
Replace buf% with buf%() in the offending line. Tom Game*Mite, CMM2 Welcome Tape, Creaky old text adventures |
||||
lizby Guru Joined: 17/05/2016 Location: United StatesPosts: 3150 |
Try this line. For me, it runs. Poke Var buf%(), offset%, &hAB ' Store 0xAB in each byte. (Note also "%" on offset.) ~ Edited 2024-06-10 02:43 by lizby PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed |
||||
v.lenzer Regular Member Joined: 04/05/2024 Location: GermanyPosts: 49 |
Hurray! It worked and I was able to read the values again with PEEK (VAR ...)! Thank you very much!!! Best wishes! Joachim |
||||
twofingers Guru Joined: 02/06/2014 Location: GermanyPosts: 1241 |
I don't know if it's a good idea to use Peek and Poke for this. I would consider whether a string array with one byte strings (length 1) might not be a cleaner solution. Example for an array of 16kB: DIM STRING myByte$(16*1024) LENGTH 1 Best regards Michael Edit: One disadvantage is that each usable byte costs you two bytes in memory. Edited 2024-06-10 04:08 by twofingers causality ≠ correlation ≠ coincidence |
||||
Martin H. Guru Joined: 04/06/2022 Location: GermanyPosts: 1113 |
a more economical way for an array of 16kB: DIM STRING myByte$(128) LENGTH 128 you only waste additional 128 bytes for 16k Memory Edited 2024-06-10 04:39 by Martin H. 'no comment |
||||
twofingers Guru Joined: 02/06/2014 Location: GermanyPosts: 1241 |
It might also be worth looking at the LONGSTRING command. causality ≠ correlation ≠ coincidence |
||||
Martin H. Guru Joined: 04/06/2022 Location: GermanyPosts: 1113 |
possible. As long as you do not use BASIC string functions on the array, you can even use the entire memory that has been reserved for this purpose. 'no comment |
||||
Martin H. Guru Joined: 04/06/2022 Location: GermanyPosts: 1113 |
btw .. nice User Name @v.lenzer a pun for slackers 'no comment |
||||
v.lenzer Regular Member Joined: 04/05/2024 Location: GermanyPosts: 49 |
Better than B.Trüger! Best wishes! Joachim |
||||
Print this page |