27.07.2011, 07:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Что то не могу сообразить,почему не могу залить массив больше 250 8-битных чисел в ROM pic16f628a,ведь еще половина места свободного.Flash же не имеет банков в этом микроконтроллере,как RAM.
Пробовал и #org,так выделяет он,а туда не пишет массив.
const char table[250] = {0x00,0x00,0x00,0x04,0x08,0x1f,0x00,0x00,0x00,0x00 ,
0x00,0x00,0x00,0x02,0x02,0xfe,0x02,0x02,0x00,0x00, // 1-0
__________________
Глаза боятся,а руки делают.
Последний раз редактировалось CERGEI1982; 27.07.2011 в 08:01.
|
|
|
|
27.07.2011, 09:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Посмотрите как организовано хранение массива в ассемблерном коде. Насколько помню, у 16Ф628 нет индексного регистра для работы с памятью программ и возможно массив пишется набором retlw. Соответственно больше одной страницы делать не хочет
__________________
misterdi<@>i.ua
|
|
|
Сказали "Спасибо" MisterDi
|
|
|
27.07.2011, 10:41
|
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от CERGEI1982
|
Flash же не имеет банков в этом микроконтроллере,как RAM.
|
Зато он имеет блочную организацию (по 256 байт); а читать данные из флеши можно только через табличный retlw (с addlw PCL). Максимальный размер массива в твоем случае 256 минус несколько инструкций на подготовку PCL.
Вообще, некоторые компиляторы умеют делать для 628-го таблицы больше 256, подготавливая еще и PCLATH (в частности хайтек). В CCS'е много всяких настроек и директив, посмотри, возможно там есть какая-нибудь #use bigtables или типа того.
|
|
|
Сказали "Спасибо" testerplus
|
|
|
27.07.2011, 11:36
|
|
Временная регистрация
Регистрация: 02.01.2005
Адрес: Киев
Сообщений: 78
Сказал спасибо: 6
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от wasp
|
делаю конвертер на PIC16F887...Но иногда комп тоже может спросить. Его опрос принимает INT_RDA(). Так вот примерно 10% этих запросов теряются, потому как аппаратный УСАРТ подвисает. Видимо это происходит когда прерывания встречаются.
|
Я делал приставку к ПК, которая получает данные через аппаратных UART и выводит на дисплей. Вначале я сделал просто чтение символа и вывод на дисплей, но оказалось, что даже на скорости 9600 кбит/с иногда данные приходят быстрее, чем я успеваю все вывести и (или) обработать. Я сделал буфер на 32 байта и по прерыванию от приемника UART байт сразу сбрасывается в буфер. Помогло. Но очень изредка возникает ситуация, что буфер приемника переполняется (выставляется бит OERR) и приемник выключается (для включения приемника его нужно сбросить). Я пробовал заставить CCS сбрасывать бит ошибки и снова включать приемник в штатной функции, но у меня не получилось ( #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8,errors)). Изредка и мой буфер переполняется. Поэтому я контролирую биты переполнения и "вешаю" программу ("while(1);"). WDT перезагружает МК.
Последний раз редактировалось SergeyK; 27.07.2011 в 11:42.
|
|
|
|
27.07.2011, 12:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от MisterDi
|
Посмотрите как организовано хранение массива в ассемблерном коде. Насколько помню, у 16Ф628 нет индексного регистра для работы с памятью программ и возможно массив пишется набором retlw. Соответственно больше одной страницы делать не хочет
|
Да наверно,хотя посмотрел ассем объявлений массива вообще нет.Выделяется динамически при компиляции наверно память.Посмотрел директивы толком ничего не нашел.Думаю попробывать структуру,а в ней наборы массивов не превышающих 256.
__________________
Глаза боятся,а руки делают.
|
|
|
|
28.07.2011, 04:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Со структурой тож не вышло,зато помогло с #rom.Но вот теперь не могу считать из памяти программ,не работает read_program_memory().Для нее не надо никаких библиотек,что я делаю не так?
__________________
Глаза боятся,а руки делают.
|
|
|
|
28.07.2011, 09:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
в Help-e написано
Цитата:
|
Availability: Only devices that allow reads from program memory.
|
Насколько помню, у 16f628 нет комманд чтения данных из памяти программ.
Как вариант: для доступа к большому массиву разбить его на группы по 250 элементов и для каждой группы вызывать отдельную функцию.
как-то так:
Код:
|
char GetData(number)
{
if (number ‹ 250) return data1[number];
if (number ‹ 500) return data2[number-250];
if (number ‹ 1000) return data3[number-500];
} |
__________________
misterdi<@>i.ua
|
|
|
|
28.07.2011, 12:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
__________________
Глаза боятся,а руки делают.
|
|
|
|
29.08.2011, 19:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.02.2008
Адрес: Ukraine, рядом с Полтавой
Сообщений: 9,771
Сказал спасибо: 5,556
Сказали Спасибо 25,326 раз(а) в 5,690 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Слегка покопался в топике, но не увидел, уж не пинайте если было..
Решил обновить частотомер, писаный 15 лет назад на асме.. И споткнулся на простейшем: понадобилось переменную в int32 перекодировать в BCD. В родных примерах народ не заморачивается: хоть на порт, хоть на экран выводят через printf и компилятор сам вставляет что нужно. А мне захотелось поиграть с разным представлением цифр на экране, а как в упор это сделать не нашел. Вставку на асме пихать как-то неэстетично что ли..
|
|
|
|
29.08.2011, 19:26
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от Eddy71
|
переменную в int32 перекодировать в BCD.
|
Может все таки ITOA ?
http://www.microchip.su/showthread.p...ht=itoa&page=3
Если все таки BCD нужен - просто не прибавлять 0x30 ('0').
Вместо
вписать
Ну и расширить до int32 ...
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 29.08.2011 в 19:31.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:32.
|
|