|
Регистры сравнения через указатель, iar avr Compiler V6.12.1.50500 |
|
|
|
Jul 8 2018, 12:47
|
Местный
Группа: Свой
Сообщений: 494
Регистрация: 23-06-09
Из: Полтава, UA
Пользователь №: 50 579
|
Здравствуйте, почему не работает такой код, что я еще не дописал? Вверху глобальной переменной OCR инициализирован массив, которому присвоены адреса 6-ти регистров сравнения атмега48, а внизу процедура (цикл убрал) в которой по циклу необходимо присваивать значения в выбранный регистр. Если имя массива и есть указатель на массив, то почему нижняя строка идет как ошибка?
Эскизы прикрепленных изображений
|
|
|
|
|
Jul 8 2018, 14:45
|
Группа: Участник
Сообщений: 12
Регистрация: 3-09-17
Пользователь №: 99 108
|
OCR это не РЕГИСТРЫ сравнения, а ПОРТЫ, вы пытаетесь обратиться к портам по указателю? Или какая цель этого кода? Что вы хотите получить? Наверно необходимо преобразование типа OCR до типа определения портов, чтобы компилятор понял, что это не адресное пространство RAM почитайте здесь (2. Передача порта через указатель) http://easyelectronics.ru/rabota-s-portami...erov-na-si.html
Сообщение отредактировал technik-1017 - Jul 8 2018, 14:52
--------------------
|
|
|
|
|
Jul 8 2018, 16:49
|
Местный
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140
|
Цитата(Ga_ry @ Jul 8 2018, 18:35) SFR_B_R(0xB4, OCR2B) Ну а дальше пройтись и посмотреть что это значит не судьба? Небольшая цитатка из документации, чтобы осознать глубину задачи. Звёздочкой тут не отделаться, это вам не ARM. Цитата Memory attributes A memory attribute corresponds to a certain logical or physical memory in the microcontroller. Available function memory attributes: __nearfunc, __farfunc Available data memory attributes: __tiny, __near, __far, __huge, __regvar, __eeprom, __tinyflash, __flash, __farflash, __hugeflash, __generic, __io, and __ext_io. Data objects, functions, and destinations of pointers or C++ references always have a memory attribute. If no attribute is explicitly specified in the declaration or by the pragma directive #pragma type_attribute, an appropriate default attribute is implicitly used by the compiler. You can specify one memory attribute for each level of pointer indirection.
|
|
|
|
|
Jul 8 2018, 17:27
|
Местный
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140
|
Нет, я сейчас не занимаюсь AVR. Просто по старой памяти Хотя нет, могу. Код OCR0A = pwm_tab[idx1];
|
|
|
|
|
Jul 8 2018, 18:02
|
Местный
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140
|
Да блин, ну я же цитату с документации не зря привёл! Код const uint8_t reg = 0x27; *(__io uint8_t *)reg = 0x55; Код // 12 *(__io uint8_t *)reg = 0x55; LDI R16, 85 OUT 0x27, R16 Для массива сами раскрутите...
|
|
|
|
|
Jul 8 2018, 18:54
|
Местный
Группа: Свой
Сообщений: 494
Регистрация: 23-06-09
Из: Полтава, UA
Пользователь №: 50 579
|
Извиняюсь, цитату я как раз пропустил читаю с телефона. Нет, все равно не идет даже без массива: Код const unsigned char OCR = 0x27; void cycle_1(void) { *(__io unsigned char *) OCR = pwm_tab[idx1]; } Строки с ошибкой теперь не выделяются а просто в сообщениях компилятор пишет. Tool Internal Error: Internal Error: [CoreUtil/General]: Illegal state Это точно для iar avr?
|
|
|
|
|
Jul 8 2018, 18:59
|
Местный
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140
|
Цитата(Ga_ry @ Jul 8 2018, 21:54) Это точно для iar avr? Точнее не бывает. И с массивом тоже работает. idx1 как определено?
|
|
|
|
|
Jul 8 2018, 19:32
|
Профессионал
Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143
|
Цитата(Ga_ry @ Jul 8 2018, 16:47) Здравствуйте, почему не работает такой код, что я еще не дописал? вот такой код в иаре компилится и должен работать unsigned char volatile* ocr_arr[] = { &OCR0A, &OCR0B }; *ocr_arr[0] = *ocr_arr[1] = 12;
--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|