С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
6 / 4 / 2
Регистрация: 23.05.2018
Сообщений: 47

HEW под M16C/R8C как сделать указатель на адрес памяти?

18.02.2022, 15:35. Показов 1045. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый.
Вот кусок кода:
C
1
2
3
4
5
6
7
8
        unsigned long i;
 
    for(i=0;i<0x19C00;i++)
    {
        while(!ti_u0c1);                // Tx buffer empy?
        u0tb=[i+0x2400];            // Tx buffer
        while(!ti_u0c1 && !txept_u0c0); // Tx buffer empy? & Tx comlette?
    }
Как передать в Tx буфер содержимое адреса i?
Могу это сделать при помощи asm вставки, но хочу на чистом C.
Всем спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.02.2022, 15:35
Ответы с готовыми решениями:

Как вычислить адрес значения в памяти процесса, зная указатель на него
Есть указатель на адрес значения в памяти процесса: 00B6F3B8 + 1415. Как вычислить адрес значения в памяти процесса, зная указатель на...

Как сделать массив-указатель на абсолютный адрес в FLASH?
Хочу сделать вот так: uint32_t addr=0x0801FC00; uint8_t CFG uint8_t * TCFG; TCFG= (uint8_t*) addr; int i;

Получить адрес памяти, на который ссылается указатель
Изучаю указатели, появился такой вопрос: int *b = new int(5); Как получить адрес памяти, на который ссылается указатель b? То есть...

14
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
18.02.2022, 21:09
Цитата Сообщение от Gebrail Посмотреть сообщение
u0tb=[i+0x2400];            // Tx buffer
это по каковски?
0
6 / 4 / 2
Регистрация: 23.05.2018
Сообщений: 47
18.02.2022, 21:25  [ТС]
Именно здесь и нужно сделать указатель, но 32-х битный. После компиляции, HEW делает мне 16-ти битный указатель, и кусок флеш просто не доступен.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
18.02.2022, 21:33
Цитата Сообщение от Gebrail Посмотреть сообщение
Именно здесь и нужно сделать указатель, но 32-х битный.
ну сделай так
C
1
unsigned char* buf=0;
потом используй так
C
1
buf[i];
Добавлено через 2 минуты
Цитата Сообщение от Gebrail Посмотреть сообщение
и кусок флеш просто не доступен.
адрес какой у него?
Цитата Сообщение от Gebrail Посмотреть сообщение
сделать указатель,
я ни одного указателя не увидел
0
6 / 4 / 2
Регистрация: 23.05.2018
Сообщений: 47
18.02.2022, 21:50  [ТС]
Начальный адрес - 0х2400, конечный адрес - 0x1BFFF. Длинна флеш 0x19C00

Добавлено через 13 минут
Все равно делает 16-ти битный указатель...
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
18.02.2022, 22:08
Цитата Сообщение от Gebrail Посмотреть сообщение
Начальный адрес - 0х2400
C
1
unsigned char* buf=0х2400UL;
0
6 / 4 / 2
Регистрация: 23.05.2018
Сообщений: 47
18.02.2022, 22:32  [ТС]
Я делаю так:
C
1
2
3
4
5
6
7
8
    unsigned char *temp=0;
    
 
    for(i=0x19C00;i>=0;i--)
    {
        while(!ti_u0c1);                // Tx buffer empy?
 
        u0tb=temp[i+0x2400];            // Tx buffer
Добавлено через 16 минут
По итогу, после компиляции получаю
Assembler
1
 MOV.B:G   [A0],R0L
А0 - это 16-ти битный регистр. Должно быть что то типа
Assembler
1
 LDE.B [A1A0],R0L
Вот это уже будет 32-х битная регистровая пара
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
18.02.2022, 22:47
Цитата Сообщение от Gebrail Посмотреть сообщение
for(i=0x19C00;i>=0;i--)
как объявлен i?
Цитата Сообщение от Gebrail Посмотреть сообщение
unsigned char *temp=0;
попробуй так
C
1
unsigned char *temp=0UL;
Добавлено через 1 минуту
Цитата Сообщение от Gebrail Посмотреть сообщение
u0tb=temp[i+0x2400];
C
1
u0tb=temp[i+0x2400UL];
0
6 / 4 / 2
Регистрация: 23.05.2018
Сообщений: 47
18.02.2022, 22:59  [ТС]
Пробовал:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
    unsigned long i;
    unsigned char *temp=0UL;
 
    u0c1 &= 0xFB;
    s0tic &= 0xF7;
    for(i=0x19C00;i>=0;i--)
    {
        while(!ti_u0c1);                // Tx buffer empy?
 
        u0tb=temp[i+0x2400UL];          // Tx buffer
        while(!ti_u0c1);                // Tx buffer empy?
        while(!txept_u0c0);             // Tx comlette?
    }
Без изменений...
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
18.02.2022, 23:16
Цитата Сообщение от Gebrail Посмотреть сообщение
Без изменений...
значит надо читать документацию на компилятор, у меня такого нет и процессор мне незнаком

Добавлено через 2 минуты
Цитата Сообщение от Gebrail Посмотреть сообщение
for(i=0x19C00;i>=0;i--)
C
1
for(i=0x19C00UL;i>=0;i--)
как компилируется?

Добавлено через 2 минуты
Цитата Сообщение от Gebrail Посмотреть сообщение
unsigned long i;
Цитата Сообщение от Gebrail Посмотреть сообщение
for(i=0x19C00;i>=0;i--)
цикл бесконечный i всегда или больше или равен 0,может компилятор это видит попробуй
C
1
signed long i;
0
6 / 4 / 2
Регистрация: 23.05.2018
Сообщений: 47
18.02.2022, 23:19  [ТС]
Все без вопросов компилируется. Но указатель все равно 16-ти битный :-(((
Начал "двигаться" сверху-вниз - так четко видно, что и откуда берется.
На АСМ-е все без проблем работает - но это не интересно. Интересно сделать на чистом С.
Дальше ведь еще интереснее заморочки начнутся....
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
18.02.2022, 23:31
кстати в стандарт уже введены типы переменных по размеру
int8_t - знаковый размер 8 бит
uint8_t - беззнаковый размер 8 бит
int16_t - знаковый размер 16 бит
uint16_t - беззнаковый размер 16 бит
int32_t - знаковый размер 32 бит
uint32_t - беззнаковый размер 32 бит
int64_t - знаковый размер 64 бит
uint64_t - беззнаковый размер 64 бит
попробуй использовать их, используй #include "stdint.h"
https://ru.wikipedia.org/wiki/Stdint.h

Добавлено через 1 минуту
чему равен void* в твоем компиляторе?
1
6 / 4 / 2
Регистрация: 23.05.2018
Сообщений: 47
18.02.2022, 23:51  [ТС]
Лучший ответ Сообщение было отмечено ValeryS как решение

Решение

Все! Победил!!! Нужно было указать, что указатель типа far
C
1
    far unsigned char *temp;
По умолчанию, все типы данных - near в пределах 16-ти бит. Если нужно собрать из 2-х 16-ти битных регистров 32-х разрядную регистровую пару, необходим указатель типа данных far!
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
19.02.2022, 00:12
Цитата Сообщение от Gebrail Посмотреть сообщение
что указатель типа far
это такое старье, что я даже про него и не вспомнил
говорил же
Цитата Сообщение от ValeryS Посмотреть сообщение
надо читать документацию на компилятор
0
6 / 4 / 2
Регистрация: 23.05.2018
Сообщений: 47
19.02.2022, 00:18  [ТС]
Не могу найти нормальную доку по этому компилятору. Есть официальная дока - но там полный кастрат. 137 страниц - ни о чем! Вот и приходится догадываться. В Апноутах на С, сплошняком АСМ вставки - это не серьезно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.02.2022, 00:18
Помогаю со студенческими работами здесь

В какой области памяти хранится указатель (сама переменная, которая хранит адрес)?
Привет! В общем у меня возник небольшой вопрос :) Если мы объявляем указатель, выделяем ему память, то память выделяется в куче, а адрес...

Выделение памяти под указатель
Нужно с помощью указателя изменить значение переменной в функции. Но под один из них не выделяется память. Что делать? int colIndex =...

Выделение памяти под указатель
Здравствуйте форумчане,у меня возник маленький вопрос:) Почему sizeof(char) дает результат в 1 байт, а sizeof(char*) ) дает 4 байта.Как...

Выделение памяти под указатель
Доброго времени суток. Возник такой вопрос: для любой программы, насколько мне известно, выделяется свой кусочек оперативной памяти. Когда...

Выделение памяти под указатель
Здравствуйте! Есть следующий код. Я разбиваю строку на слова и слова заданной длины пытаюсь заменить на слово (символьный указатель str)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru