Jump to content

    

6Ф3П

Участник
  • Content Count

    7
  • Joined

  • Last visited

Community Reputation

0 Обычный
  1. Здравствуйте. Atmel Studio 7; SDRAM 32Mbyte (MT48LC16M16A2); 32uc3a0512 В настройках линковщика прописал: -Wl,--defsym=__heap_start=0xD0000000,--defsym=__heap_end=0xD000FFFF Результат отрицательный. Куда копать?
  2. AvrStudio 5

    Перекомпилировал в 5 студии проект ранее написанный в WinAVR. Зашил. На ЖК дисплее вместо русских букв "кракозяблики". Наверно, что то в настройках компилятора?
  3. Вычисление CRC

    Спасибо, понял.
  4. Вычисление CRC

    По поводу volatile совершенно согласен. Проблема в том что я в студии не могу посмотреть знач. переменной. Объясните пожалуйста в чём дело. Код//  ================================================================ long CalculateCRC32Block(unsigned char* buf, unsigned int len) {    unsigned long crc = 0xFFFFFFFF;    while (len--)    {         crc = (crc >> 8) ^ pgm_read_dword(&(CRC32Table[(crc ^ *buf++) & 0xFF]));        }    return crc ^ 0xFFFFFFFF; } Если так Код//  ================================================================ int main(void) {    unsigned char a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};    volatile unsigned long crc = CalculateCRC32Block(a, 9); то значение переменной crc в студии не видно Так тоже не видно Код//  ================================================================ int main(void) {    unsigned char a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};    unsigned long crc = 0;    crc = CalculateCRC32Block(a, 9); И только так я могу его посмотреть Код//  ================================================================ int main(void) {   unsigned char a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};   volatile unsigned long crc = 0;   crc = CalculateCRC32Block(a, 9); Может лучше использовать какую-нибудь другую программу для отладки? Или руки кривые?
  5. Вычисление CRC

    В ТОЧКУ!!!!! volatile unsigned long crc = 0xFFFFFFFF; aaarrr большое спасибо!!! Теперь CRC как положено 0x40EFAB9E;
  6. Вычисление CRC

    Спасибо. Косячок подправил но всё равно что то не то Код    for (int i = 0; i < 9; i++)     {         crc = (crc >> 8) ^ (CRC32Table[(crc ^ a[i]) & 0xFF]);     }     crc = crc ^ 0xFFFFFFFF; Теперь CRC = 0x15E95EF1 p.s. Если глупости спрашиваю прошу прощения, я с С не очень, а WinAVR второй день юзаю.
  7. Вычисление CRC

    Здравствуйте. Буду признателен если спасёте от инвалидности по мозгу. Среда WinAVR. Вычисляю CRC32 как описано тут http://ru.wikipedia.org/wiki/Crc#CRC-32 Код// =================================================== unsigned long CRC32Table[256]  = {0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, итд} int main(void) {   unsigned char a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};   int len = 9;   volatile long crc = 0xFFFFFFFF;   while (len--)   {     crc = (crc >> 8) ^ (CRC32Table[(crc ^ a[9 - len]) & 0xFF]);   }   crc = crc ^ 0xFFFFFFFF; В результате CRC == 0xE1042295 (Эмуляция в AVR студии) Теперь то же самое на Delphi Код// ==================================================== procedure TForm1.Button1Click(Sender: TObject); const tbl: array [0..255] of integer = ($00000000, $77073096, $EE0E612C, $990951BA, ...); arr: array [0..8] of byte = (1,2,3,4,5,6,7,8,9); var   crc, len: integer; begin   len := 9;   crc := $FFFFFFFF;   while len > 0 do begin     crc := (crc shr 8) xor tbl[(crc xor arr[9 - len]) and $FF];     Dec(len);   end;   crc := crc xor $FFFFFFFF;   label1.Caption := inttostr(crc); end; Здесь CRC = $40EFAB9E; Кто виноват, а главное, что делать. Забыл сказать - с вероятностью 99,9(9) правильный результат в Delphi т. к. этот алгоритм был использован в старых проектах.