PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Переменную типа Long "разобрать" на Byte


Переменную типа Long "разобрать" на Byte

Сообщений 31 страница 48 из 48

31

ethelberg написал(а):

.... мне надо всего 12 байт записывать. ...

когда я писал

useful написал(а):

...
p.s. И предполагаю, если расскажите зачем вам нужно разбивать переменную на байты, то окажется всё ещё проще. ...

Я имел ввиду, вы без терминологии AVR и PureBasic простыми русскими словами опишите где вы собираетесь взять эти 12 байт что с ними сделать и куда записать.

И я пока при своём мнении остаюсь, что всё СУПЕР просто. Проблема в отсутствии формулировки задачи.
Из спортивного интереса постарайтесь меня услышать и ответить на вопрос который задан а не просто на тему, потому что вы например про округление выше заговорили. Это каким боком к заголовку темы про 4 байта?

0

32

useful написал(а):

Я имел ввиду, вы без терминологии AVR и PureBasic простыми русскими словами опишите где вы собираетесь взять эти 12 байт что с ними сделать и куда записать.

Я писал что я хочу сделать.

ethelberg написал(а):

Суть в чём. Я сделал хорошему другу на ATTINY2313 управление тремя задвижками в цех. Но нужно по месту  "конфигурировать". Делать сложнее контроллер с кнопками и дисплеем не имеет смысла для простой задачи.
AVR студию там ставить или БаскомAVR и объяснять что и где править в исходнике -бесполезно, ибо такое помнят ровно до закрытия программы. Вот у меня и возникла идея выдать ему программатор USBASP с панелькой дип20 + простая программка где тупо числа вносятся в окошко, создаётся фалик.eep для записи и AVRDUDE зашивается в тиньку в эпром. А дальше хоть трава не расти.

Timon написал(а):

ethelberg, обрати внимание на мой пример.

Проверил, ошибка контрольной суммы.

Если кому то интересно тут пару файлов eeр скачанных с АТМега328

Я уже получил нужные мне байты + контрольную сумму которые нужно правильно записать в файл.

Отредактировано ethelberg (06.10.2020 17:14:58)

0

33

Я сдаюсь. Вы меня не слышите.

0

34

В файлах данные в intel hex формате.
Баском сохраняет в бинарном формате.

0

35

ethelberg написал(а):
Timon написал(а):

ethelberg, обрати внимание на мой пример.

Проверил, ошибка контрольной суммы.

Я только что проверил свой пример. Абсолютно рабочий. И он универсальный, можно записать в файл как 12 ваших байт (3 переменных Long), так и гораздо больше информации, многострочной.
То, что у вас не верна контрольная сумма означает лишь одно - вы не смогли (или не захотели) разобраться в примере, а просто бездумно удалили лишние для вас данные из массива.

ethelberg написал(а):

Если кому то интересно тут пару файлов eeр скачанных с АТМега328

Я уже писал выше, что расширение имени файла никак не влияет на содержимое оного. Очень жаль, что вы видимо этого не понимаете.
Данные в файлах, выложенных в вашем примере представлены в тексте, формат Intel HEX, о чём собственно уже написал Пётр.
То, что им даны расширения имён EEP несколько безграмотно, но в заблужение может ввести только людей типа вас, которые не понимают разницы между форматом данных в файле и расширением имени файла.

0

36

useful написал(а):

Я сдаюсь. Вы меня не слышите.

Наверное потому что мы говорим на разных языках и у нас разный уровень знаний пуребейсика.
Памяти, процедуры пока я не глубоко в них плаваю. У меня вообще возникает вопрос зачем писать в память и почему нельзя писать например без этого. Много ещё не знаю и предстоит изучить. Громоздкие для меня примеры не сразу понимаю что и для чего.

Timon написал(а):

То, что у вас не верна контрольная сумма означает лишь одно - вы не смогли (или не захотели) разобраться в примере, а просто бездумно удалили лишние для вас данные из массива.

http://forumupload.ru/uploads/0009/ae/28/588/t714913.jpg
1.контрольную сумму в вашем коде считает верно! Ругается прошивальщик почему то.  Есть онлайн калькулятор для проверки чтоб по байтам не слаживать в калькуляторе.
2. Я взял пример с сообщения 25 темы. Ни чего в нём не менял. Контрольная сумма верная. Что не нравится прошивальщику я выясню и вам непременно сообщу.  Там первые 8 байт в каждой строке отличаются от того что я вижу сливая с контроллера на комп.   Я потому и подставлял "вручную" эту часть строки.
Сейчас прибегаю домой на короткое время. Думаю что уже завтра меня наконец отпустят и буду дома.
Я разберусь. Никуда оно не денется. Мне решение задачи виделось как побайтная запись в файл. Разобрал на байты, изменил согласно расчёта и по одному же и записал в файл. Я по сути два вечера только смог уделить изучению. Если бы мне надо была какая то коммерция то я бы задонатил желающему и не изобретал велосипед тратя кучу времени. Но я сам изучаю в силу своих возможностей и понимания, а оно  ко всем приходит по разному.

0

37

ethelberg написал(а):

...Наверное потому что мы говорим на разных языках и у нас разный уровень знаний пуребейсика. ...

Ещё одна попытка.
Забудьте про AtMega и Purebasic.
Вы в состоянии представить свою задачу так, что бы описать один листочек в клеточку и на нём исходные данные и другой листочек в клеточку на котором результат и описать как вы это понимание алгоритм преобразования одного в другое принципиально не используя термины из AVR и Purebasic?
Как только вы это сделаете, я и любой другой на этом форуме возможно совсем разными способами помогут реализовать это на PureBasic.

p.s. Одна клетка = Один байт.

Отредактировано useful (07.10.2020 15:17:27)

0

38

ethelberg написал(а):

Ругается прошивальщик почему то.

Не пишет в какой строке ошибка?
Загрузите файл в программу ftp://ftp.radio.ru/pub/2009/10/hex_test.zip

0

39

Пётр
в 32 сообщении ссылка "Если кому то интересно тут пару файлов eeр скачанных с АТМега328"

У меня прям спортивный интерес. НО программа для тестов ругается на оба файла.

Мне по прежнему кажется, что присутствует разночтение по поводу что и с чем нужно сделать.

0

40

ethelberg написал(а):

1.контрольную сумму в вашем коде считает верно! Ругается прошивальщик почему то.  Есть онлайн калькулятор для проверки чтоб по байтам не слаживать в калькуляторе.
2. Я взял пример с сообщения 25 темы. Ни чего в нём не менял. Контрольная сумма верная. Что не нравится прошивальщику я выясню и вам непременно сообщу.  Там первые 8 байт в каждой строке отличаются от того что я вижу сливая с контроллера на комп.   Я потому и подставлял "вручную" эту часть строки.
Сейчас прибегаю домой на короткое время. Думаю что уже завтра меня наконец отпустят и буду дома.
Я разберусь. Никуда оно не денется. Мне решение задачи виделось как побайтная запись в файл. Разобрал на байты, изменил согласно расчёта и по одному же и записал в файл. Я по сути два вечера только смог уделить изучению. Если бы мне надо была какая то коммерция то я бы задонатил желающему и не изобретал велосипед тратя кучу времени. Но я сам изучаю в силу своих возможностей и понимания, а оно  ко всем приходит по разному.

Нет, всё же у меня в коде ошибка, т.к. я неверно истолковал HEX формат и контрольную сумму вычисляю только с байтов данных, а нужно вычислять со всей строки, учитывая все байты в строке. Нужно добавить всего одну строчку. Сейчас доработаю и выложу, после чего попробуйте.

0

41

Я добавл строку, попробуйте так:

Код:
#file_test=0
Dim long.l (1,3)
long(0, 0)=12  
long(0, 1)=876543210 
long(0, 2)=234554321
long(0, 3)=-234554321

long(1, 0)=201032
long(1, 1)=111111111 
long(1, 2)=-324354645
long(1, 3)=-9999994

Summa.a=0; переменная в один байт для вычисления КС в конце каждой строки
data_end$=":00000001FF"; строка, означающая конец HEX файла
TempString$=""; переменная для хранения строки результата для HEX файла

nb_bytes_line$=RSet(Hex((ArraySize (long(), 2)+1)*4), 2, "0"); количество байт в каждой строке равно размеру массива данных второго уровня
start_address=0; стартовый адрес (в десятиричном исчислении)
type_write$="00"; тип строки - 00 это данные

For f=0 To ArraySize (long(), 1); цикл по количеству строк
  TempString$+":"+nb_bytes_line$+RSet(Hex(start_address), 4, "0")+type_write$; начинаем собирать строку. Добавляем кол-во байт данных в строке, адрес в микроконтроллере, в который нужно вписать данные и тип записи в строке
  Summa-(ArraySize (long(), 2)+1)*4-PeekA(@start_address)-PeekA(@start_address+1);начинаем вычислять контрольную сумму, первые три байта - кол-во данных в строке и адресацию. Тип строки не берём во внимание, т.к. он будет всё время 0 и на расчёт не повлияет
  For i=0 To ArraySize (long(), 2); цикл по количеству байт в строке, у нас 16
    For i_1=0 To 3; цикл по кол-ву байт в переменной Long, 4 байта
      Summa-PeekA (@long(f, i)+i_1); вычисляем КС
      TempString$+RSet(Hex(PeekA (@long(f, i)+i_1)), 2, "0"); прибавляем байт данных к переменной общей строки
    Next
  Next
  TempString$+RSet(Hex(Summa), 2, "0")+#CRLF$; добавляем КС и переход на новую строку и возврат коретки
  Summa=0; сбрасываем переменную для расчёта КС
  start_address+((ArraySize (long(), 2)+1)*4); увеличиваем адрес 
Next

TempString$+data_end$; добавляем к общей переменной конец файла HEX
If CreateFile(#file_test,"C:\\D\res_test.txt"); сохраняем общую переменную в текстовый файл
  WriteString(#file_test, TempString$, #PB_Ascii)
  CloseFile(#file_test)
Else
  Debug "Can not create file!"; или не сохраняем)))
EndIf 

+1

42

Я же выложил проверенный код создающий файл требуемого формата. Переменную типа Long "разобрать" на Byte
В нем не нужно ничего менять. Просто вставляем в основной код и вызываем SaveHexFile.

+1

43

Пётр написал(а):

Как я уже писал, eep имеет двоичный формат. Это легко проверить.
При компиляции этого кода

Пётр я знаю что баском создаёт бинарный файл. С баскома и прошщивается.
AVR студия  создаёт файл и он читается блокнотом как обычный хекс.

Тут в папке два файла.
eep.eep созданный авр-студией. Второй eep_c_ATMEGA328.eep это скачанный АВР-дудой с меги после заливки в неё eep.eep   
А теперь смотрите в чём капкан.
Я создаю на вид такой же файл как и авр-студия.

Код:
Global Dim Byte.c(12)
Global Dim long.l(2)       ;4 байта
Global.a temp              ;байт для счёта
Global Summa.c             ;2 байта 
Global Dim ByteStr.s{2}(12)
Global TempString.s
;разбор на байты
long(0) = 12;34567890
Byte(0)=PeekA(@long(0))    ;младший байт
Byte(1)=PeekA(@long(0)+1)
Byte(2)=PeekA(@long(0)+2)
Byte(3)=PeekA(@long(0)+3)  ;старший байт

long(1)=876543210 
Byte(4)=PeekA(@long(1))    ;младший байт
Byte(5)=PeekA(@long(1)+1)
Byte(6)=PeekA(@long(1)+2)
Byte(7)=PeekA(@long(1)+3)  ;старший байт

long(2) =234554321
Byte(8)=PeekA(@long(2))    ;младший байт
Byte(9)=PeekA(@long(2)+1)
Byte(10)=PeekA(@long(2)+2)
Byte(11)=PeekA(@long(2)+3) ;старший байт  

;Рассчёт контрольной суммы
Summa=0
For temp=0 To 11 
 Summa= Summa+Byte(temp)   ;INC 
Next
Summa=0-Summa              ;контрольная сумма ноль минус сумма всех байт
;Debug "suuma="+Summa    
Byte(12)=PeekA(@Summa)     ;младший байт
 

;файл
TempString$ = ":20000000"
;TempString = ""
For temp=0 To 12           ;12 байт=3 четырёхбайтных числа
 TempString$ + RSet(Hex(byte(temp)),2,"0") ;ноль в начале байта если меньше F в hex
Next 
  
Debug "HEX " + TempString$

If CreateFile(0,"test3.eep")
  WriteStringN(0, TempString$,#PB_Ascii)
  WriteStringN(0, ":00000001FF",#PB_Ascii)
  CloseFile(0)
EndIf  

Не вижу в редакторе WinHex разницы в байтах между созданным в студии, далее в Notepad++ поставил плагин хекс-эдитор. Всё одинаково. Но если я зашиваю в мегу файлик созданный авр-студией и забираю назад то всё на месте. А тот что создаю на бейсике скачивается сплошняком FF. То есть авр-дуда делает вид что прошивает, не ругается но по факту не программируется микроконтроллер.

Timon написал(а):

Я добавил строку, попробуйте так:

Спасибо. Работает! Такое надо в хелп.

0

44

ethelberg написал(а):

TempString$ = ":20000000"

20 в начале строки означает что в ней 32 байта данных, а в действительности только 12.
Запустите этот код и сравните файлы.

Код:
Structure ArrA
  a.a[0]
EndStructure

Procedure.s Hex_String(Adr.u, Type.a, *Point.ArrA, Size.a)
  Protected s.s=":"+RSet(Hex(Size, #PB_Ascii), 2, "0")
  Protected i, Summ.a=0
  
  s+RSet(Hex(Adr, #PB_Unicode), 4, "0")
  s+RSet(Hex(Type, #PB_Ascii), 2, "0")
  
  Summ + Size + (Adr & $FF) + ((Adr>>8) & $FF) + Type
  
  If *Point And Size>0
    Size-1
    For i=0 To Size
      Summ + *Point\a[i]
      s+RSet(Hex(*Point\a[i], #PB_Ascii), 2, "0")
    Next i
  EndIf
  
  Summ = 0 - Summ
  s+RSet(Hex(Summ, #PB_Ascii), 2, "0")
  
  ProcedureReturn s
EndProcedure

Procedure SaveHexFile(FileName.s, *Point.ArrA, Size, StartAdr.l) ; Сохранение в hex файл.
  Protected Res = #False, Adr.l=0, i, Count=0, FileID
  
  If FileName<>"" And *Point And Size>0 And StartAdr>=0
    
    If FileSize(FileName)>0
      DeleteFile(FileName)
    EndIf
    
    FileID = CreateFile(#PB_Any, FileName, #PB_Ascii)
    If FileID
      
      Adr = (((StartAdr/$FFFF)&$FF00)>>8) | (((StartAdr/$FFFF)&$FF)<<8)
      WriteStringN(FileID, Hex_String(0, 4, @Adr, 2))
      
      Adr = StartAdr & $FFFF
      
      Size - 1
      For i=0 To Size Step 16
        
        If Adr>$FFFF ; Новый сегмент.
          StartAdr+$FFFF
          Adr = (((StartAdr/$FFFF)&$FF00)>>8) | (((StartAdr/$FFFF)&$FF)<<8)
          WriteStringN(FileID, Hex_String(0, 4, @Adr, 2))
          Adr=0
        EndIf
        
        If Size - i>=16
          Count = 16
        Else
          Count = Size - i + 1
        EndIf
        
        WriteStringN(FileID, Hex_String(Adr, 0, *Point+i, Count))
        
        Adr+16
      Next i
      
      WriteStringN(FileID, ":00000001FF") ; Строка обозначающая конец файла.
      CloseFile(FileID)
      Res = #True
    EndIf
  EndIf
  
  ProcedureReturn Res
EndProcedure


Dim Byte.a(12)
Dim long.l(2)       ;4 байта

;разбор на байты
long(0) = 12;34567890
Byte(0)=PeekA(@long(0))    ;младший байт
Byte(1)=PeekA(@long(0)+1)
Byte(2)=PeekA(@long(0)+2)
Byte(3)=PeekA(@long(0)+3)  ;старший байт

long(1)=876543210 
Byte(4)=PeekA(@long(1))    ;младший байт
Byte(5)=PeekA(@long(1)+1)
Byte(6)=PeekA(@long(1)+2)
Byte(7)=PeekA(@long(1)+3)  ;старший байт

long(2) =234554321
Byte(8)=PeekA(@long(2))    ;младший байт
Byte(9)=PeekA(@long(2)+1)
Byte(10)=PeekA(@long(2)+2)
Byte(11)=PeekA(@long(2)+3) ;старший байт  

If SaveHexFile("test3.eep", @Byte(), 12, 0)
  Debug "Файл создан"
Else
  Debug "Ошибка при создании файла"
EndIf

0

45

Пётр написал(а):

20 в начале строки означает что в ней 32 байта данных, а в действительности только 12.
Запустите этот код и сравните файлы.

Точно. Не учёл это.

Пётр написал(а):

Запустите этот код и сравните файлы.

Это то что пишется в файл

:020000040000FA
:0C0000000C000000EAFC3E34D103FB0DB4
:00000001FF

а это назад забирается с атмега 328

Код:
:200000000C000000EAFC3E34D103FB0DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4
:20002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:20004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:20006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:20008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:2000A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:2000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:2000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:20010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
:20012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF
:20014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF
:20016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F
:20018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F
:2001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F
:2001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F
:2001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F
:20020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
:20022000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE
:20024000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE
:20026000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E
:20028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E
:2002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E
:2002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E
:2002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E
:20030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD
:20032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD
:20034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD
:20036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D
:20038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D
:2003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D
:2003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D
:2003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D
:00000001FF

Первая строка не записалась. Вторая нормально.
Ага, всё верно. Первая строка и не должна записываться.

Отредактировано ethelberg (08.10.2020 13:55:52)

0

46

ethelberg написал(а):

Первая строка не записалась. Вторая нормально.

Первая (:020000040000FA) это не данные, а адрес. Она не должна записываться.
В данном случае адрес нулевой, но например в этой прошивке он равен $0800000000, т. к. по этому адресу находится флеш-память у STM32.

0

47

Ура, я разобрался.

Код:
Global Dim Byte.c(12)
Global Dim long.l(2)       ;4 байта
Global.a temp              ;байт для счёта
Global Summa.c             ;2 байта 
Global TempString.s
;разбор на байты
long(0) = 12;34567890
Byte(0)=PeekA(@long(0))    ;младший байт
Byte(1)=PeekA(@long(0)+1)
Byte(2)=PeekA(@long(0)+2)
Byte(3)=PeekA(@long(0)+3)  ;старший байт

long(1)=876543210 
Byte(4)=PeekA(@long(1))    ;младший байт
Byte(5)=PeekA(@long(1)+1)
Byte(6)=PeekA(@long(1)+2)
Byte(7)=PeekA(@long(1)+3)  ;старший байт

long(2) =234554321
Byte(8)=PeekA(@long(2))    ;младший байт
Byte(9)=PeekA(@long(2)+1)
Byte(10)=PeekA(@long(2)+2)
Byte(11)=PeekA(@long(2)+3) ;старший байт  

;Рассчёт контрольной суммы
Summa=0
For temp=0 To 11 
 Summa= Summa+Byte(temp)   ;INC 
Next
summa+12
Summa=0-Summa              ;контрольная сумма ноль минус сумма всех байт
;Debug "suuma="+Summa    
Byte(12)=PeekA(@Summa)     ;младший байт
 

;файл
TempString$ = ":0C000000"  ;0C=12 хекс
For temp=0 To 12           ;12 байт=3 четырёхбайтных числа
 TempString$ + RSet(Hex(byte(temp)),2,"0") ;ноль в начале байта если меньше F в hex
Next 
  
Debug "HEX " + TempString$

If CreateFile(0,"test3.eep")
  WriteStringN(0, TempString$,#PB_Ascii)
  WriteStringN(0, ":00000001FF",#PB_Ascii)
  CloseFile(0)
EndIf  

Допускал две ошибки.((
Первая не указывал число байт по не внимательности и вторая контрольную сумму надо считать с учётом этого 0C000000. Потому то ориентировался на то что скачиваю с атмеги.((( Век живи, век учись.
Пример годится для записи 32 байт данных. Мне больше пока не требуется.
Контрольная сумма - нужно добавить число байт к данным и   число записываем дата байт в хекс прописать в начале. Это я умею и сделаю.

Всем кто отозвался и принял участие в обсуждении спасибо!

Отредактировано ethelberg (08.10.2020 14:44:41)

0

48

Спасибо за тему!!!!  :cool:

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Переменную типа Long "разобрать" на Byte