|
HI-TECH C |
|
|
|
 |
Ответов
(1 - 49)
|
Oct 9 2008, 13:34
|

Частый гость
 
Группа: Свой
Сообщений: 188
Регистрация: 5-10-05
Из: Советский Союз
Пользователь №: 9 244

|
Цитата(Евгений Германович @ Oct 9 2008, 15:15)  Если не затруднит-там несколько,что присоветуете? Берите последние STD, т.к. PRO ещё сырой.
|
|
|
|
|
Oct 9 2008, 14:46
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(Иваныч @ Oct 9 2008, 16:34)  Берите последние STD, т.к. PRO ещё сырой. Поздно.Установил про 9.60. Но есть проблемы в мплабе я согласно рекомендации В MPLABе выбрать HI-TECH Universal toolsuite и указать ему на C:\Program Files\HI-TECH Software\PICC\std\9.60\bin\picc.exe это проделал,а именно в окошке project--> set language...-->ht-->exequtables указал на C:\Program Files\HI-TECH Software\PICC\std\9.60\bin\picc.exe а дальше что? Я не могу найти этот си при создании пректа или я чего то не понял? Если не трудно помогите.А стд я потом переставлю.
|
|
|
|
|
Oct 9 2008, 16:27
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Евгений Германович @ Oct 9 2008, 18:46)  Поздно.Установил про 9.60. Но есть проблемы в мплабе я согласно рекомендации В MPLABе выбрать HI-TECH Universal toolsuite и указать ему на C:\Program Files\HI-TECH Software\PICC\std\9.60\bin\picc.exe это проделал,а именно в окошке project--> set language...-->ht-->exequtables указал на C:\Program Files\HI-TECH Software\PICC\std\9.60\bin\picc.exe а дальше что? Я не могу найти этот си при создании пректа или я чего то не понял? Если не трудно помогите.А стд я потом переставлю. Проверьте пути. В архиве Pro путь по умолчанию C:\Program Files\HI-TECH Software\PICC\ pro\..., а не ...\std\... Если разархивировали в более другое место, то поправьте путь в .reg файле. Обновите реестр этим .reg и выполните еще раз активацию в HI-TECH Universal Toolsuite. В МПЛабе вся необходимая инфа после этого уже должна появиться. Далее в свойствах проекта (Project->Select Language Toolsuite) выбираете HI-TECH Universal Toolsuite. Std спокойно уживается с pro (разархивировать в каталог, отличный от pro, поправить по необходимости .reg, импортировать его, выполнить активацию). В Project->Build Options->Project->Driver выбираете требуемый драйвер (pro/std желаемой версии) и все. (вперед на грабли совместимости pro и std  ). С установленным picc lite, идущим в комплекте МПЛаба (один раз установил для общего развития) мне не удалось заставить работать ни std, ни pro. Пришлось снести МПЛаб и установить без picc lite.
|
|
|
|
|
Oct 9 2008, 16:37
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(xemul @ Oct 9 2008, 19:27)  Проверьте пути. В архиве Pro путь по умолчанию C:\Program Files\HI-TECH Software\PICC\ pro\..., а не ...\std\... Если разархивировали в более другое место, то поправьте путь в .reg файле. Обновите реестр этим .reg и выполните еще раз активацию в HI-TECH Universal Toolsuite. В МПЛабе вся необходимая инфа после этого уже должна появиться. Далее в свойствах проекта (Project->Select Language Toolsuite) выбираете HI-TECH Universal Toolsuite. Std спокойно уживается с pro (разархивировать в каталог, отличный от pro, поправить по необходимости .reg, импортировать его, выполнить активацию). В Project->Build Options->Project->Driver выбираете требуемый драйвер (pro/std желаемой версии) и все. (вперед на грабли совместимости pro и std  ). С установленным picc lite, идущим в комплекте МПЛаба (один раз установил для общего развития) мне не удалось заставить работать ни std, ни pro. Пришлось снести МПЛаб и установить без picc lite. Я перепутал,установлен std.У меня тоже стоял lite завтра уберу. У меня в project wisard нет хайтека. А почему в C:\Program Files\HI-TECH Software нет оболочки hi-tech её надо отдельно грузить.
|
|
|
|
|
Oct 9 2008, 16:49
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Евгений Германович @ Oct 9 2008, 20:37)  Я перепутал,установлен std.У меня тоже стоял lite завтра уберу. А почему в C:\Program Files\HI-TECH Software нет оболочки hi-tech её надо отдельно грузить. Вы о ht-ide? Сейчас это отдельный продукт. Лет 7-8 тому, когда picc еще шел с ide в одном флаконе, я немного с ним (ide) поигрался, но никаких прелестей не ощутил (помню только ужас от встроенного редактора). Возможно, сейчас он стал поразумнее. Сейчас проверил - в project wisard есть HI-TECH Universal Toolsuite. (я еще ни одного проекта не создавал с использованием визарда, поэтому и не знал, что там живет  )
|
|
|
|
|
Oct 14 2008, 16:53
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Евгений Германович @ Oct 12 2008, 15:11)  Error [939] ; . no file arguments
Чего не хватает? Цитата (939) no file arguments (Driver) The driver has been invoked with no input files listed on its command line. If you are getting this message while building through a third party IDE, perhaps the IDE could not verify the source files to compile or object files to link and withheld them from the command line. Поставьте для разбора полетов в Project->Build Options->Compiler галку в чекбоксе Verbose. Как вариант, куда-нибудь в пути/имена файлов проекта затесалась кириллица.
|
|
|
|
|
Oct 16 2008, 13:09
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(xemul @ Oct 14 2008, 19:53)  Поставьте для разбора полетов в Project->Build Options->Compiler галку в чекбоксе Verbose. Как вариант, куда-нибудь в пути/имена файлов проекта затесалась кириллица. Спасибо за ответ,я и с этим разобрался.Как говорится дело было не в бобине .... и тд. Я просто забыл вкл файл в проект Однако у меня есть ещё вопрос -это использование delay из папки samples не могу вызвать. На эту запись транслятор однозначно отзывается матерками. picc -DXTAL_FREQ=4MHZ Если не трудно окажите помощь.
|
|
|
|
|
Oct 16 2008, 16:19
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Евгений Германович @ Oct 16 2008, 17:09)  Однако у меня есть ещё вопрос -это использование delay из папки samples не могу вызвать.
На эту запись транслятор однозначно отзывается матерками. picc -DXTAL_FREQ=4MHZ
Если не трудно окажите помощь. Вы можете задать XTAL_FREQ обычным #define XTAL_FREQ 4MHZ перед #include "path_to/delay.h" Можете задать XTAL_FREQ=4MHZ в Project->Options->Compiler->Define macros Файлы delay.* стОит скопировать в более удобное место (в какой-нибудь ./common/ для устоявшихся и обычно используемых сорцов, или хотя бы в папку проекта). Кста, в delay.h присутствуют строки Код #ifndef XTAL_FREQ #define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */ #endif Я этими функциями не пользуюсь и сказать что-то более разумное о них не могу. Еще одно кста из delay.h: Цитата * MAKE SURE this code is compiled with full optimization!!! UPD: я хотел сказать, что для delay.c нужно задать оптимизацию по скорости независимо от типа оптимизации всего проекта.
|
|
|
|
|
Oct 17 2008, 12:12
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(xemul @ Oct 16 2008, 19:19)  Вы можете задать XTAL_FREQ обычным #define XTAL_FREQ 4MHZ перед #include "path_to/delay.h" Можете задать XTAL_FREQ=4MHZ в Project->Options->Compiler->Define macros Файлы delay.* стОит скопировать в более удобное место (в какой-нибудь ./common/ для устоявшихся и обычно используемых сорцов, или хотя бы в папку проекта). Кста, в delay.h присутствуют строки Код #ifndef XTAL_FREQ #define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */ #endif Я этими функциями не пользуюсь и сказать что-то более разумное о них не могу. Еще одно кста из delay.h: Попробую,спасибо.
|
|
|
|
|
Oct 19 2008, 10:50
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(DL36 @ Oct 18 2008, 11:25)  Если уж пользоваться программными задержками то лучше использовать этот вариант delay.hВы немного неправильно указали адрес,но я туда все равно попал Проблема не в программе задержки,я её сам написал. Проблема в том,что я не смог вызвать вышеозначенную функцию,и это меня сильно огорчает. Также я не смог указать частоту посредством XTAL_FREQ . Вот в чем основная проблема.
|
|
|
|
|
Oct 20 2008, 04:43
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(Евгений Германович @ Oct 19 2008, 13:50)  Вы немного неправильно указали адрес,но я туда все равно попал Проблема не в программе задержки,я её сам написал. Проблема в том,что я не смог вызвать вышеозначенную функцию,и это меня сильно огорчает. Также я не смог указать частоту посредством XTAL_FREQ . Вот в чем основная проблема. Ссылку поправил delay.h. Хотя странно это вроде проверял. Приведите функцию и участок программы с локализацией проблемы, короткий.
|
|
|
|
|
Oct 20 2008, 13:16
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(DL36 @ Oct 20 2008, 07:43)  Ссылку поправил delay.h. Хотя странно это вроде проверял. Приведите функцию и участок программы с локализацией проблемы, короткий. #include <pic.h> #include "C:\Program Files\HI-TECH Software\PICC\std\9.60\samples\delay\delay.h"; near char reload = 0; _XTAL_FREQ=4MHZ; extern void DelayMs(unsigned char); main() { __CONFIG(HS & WDTDIS & PWRTEN & BORDIS & LVPDIS); TRISA=0X00; TRISB=0XFF; TRISD=0X0F; while(1) {PORTA=0X00; DelayMs(3); PORTA=0xff; } } С вызовом я разобрался при написании вам ответа,до этого момента не мог добиться победы. Однако _XTAL_FREQ=4MHZ; в любых вариантах вызывает бурную реакцию хайтека. И пользуясь случаем что такое и для чего near.И у меня еще есть кучка вопросов.Ответите???
|
|
|
|
|
Oct 21 2008, 19:18
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(Евгений Германович @ Oct 20 2008, 16:16)  #include <pic.h>
#include "C:\Program Files\HI-TECH Software\PICC\std\9.60\samples\delay\delay.h"; near char reload = 0; _XTAL_FREQ=4MHZ;
С вызовом я разобрался при написании вам ответа,до этого момента не мог добиться победы. Однако _XTAL_FREQ=4MHZ; в любых вариантах вызывает бурную реакцию хайтека. И пользуясь случаем что такое и для чего near.И у меня еще есть кучка вопросов.Ответите??? Так и должно быть в delay.h макрос описан. Код #ifndef XTAL_FREQ #define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */ #endif
#define MHZ *1000L /* number of kHz in a MHz */ #define KHZ *1 /* number of kHz in a kHz */
#define DelayUs(x) { unsigned char _dcnt; \ _dcnt = (((long)(x))*(long)(XTAL_FREQ))/(long)(12MHZ); \ while(--_dcnt != 0) \ continue; } и указать компилятору значение можно только так #define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */ Поменяй этот #include "C:\Program Files\HI-TECH Software\PICC\std\9.60\samples\delay\delay.h"; на тот, что я указал. Да еще лучьше просто копировать в папку проекта.
|
|
|
|
|
Oct 22 2008, 15:31
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(DL36 @ Oct 21 2008, 22:18)  Так и должно быть в delay.h макрос описан. Код #ifndef XTAL_FREQ #define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */ #endif
#define MHZ *1000L /* number of kHz in a MHz */ #define KHZ *1 /* number of kHz in a kHz */
#define DelayUs(x) { unsigned char _dcnt; \ _dcnt = (((long)(x))*(long)(XTAL_FREQ))/(long)(12MHZ); \ while(--_dcnt != 0) \ continue; } и указать компилятору значение можно только так #define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */ Поменяй этот #include "C:\Program Files\HI-TECH Software\PICC\std\9.60\samples\delay\delay.h"; на тот, что я указал. Да еще лучьше просто копировать в папку проекта. Я так и сделал.Но вылезла куча ошибок.Как мог убрал,но задержка генерируется фиксированная ,что бы не менял.При использовании #define XTAL_FREQ ХХХ MHZ с любой частотой ничего не меняется. Это я про пример из samples я попробовал _delay_ms() из описания на хайтек таже фигня,но я не успокоился и нашел #define uS_CNT 163 и все стало хорошо 163 это период моего кварца. Я так и не прорубил про XTAL_FREQ это что явное надувательство?Кстати или нет но в 18 пике мой текст,верхний,не пошел.
|
|
|
|
|
Oct 22 2008, 15:48
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(Евгений Германович @ Oct 22 2008, 18:31)  Я так и сделал.Но вылезла куча ошибок.Как мог убрал,но задержка генерируется фиксированная ,что бы не менял.При использовании #define XTAL_FREQ ХХХ MHZ с любой частотой ничего не меняется. Это я про пример из samples я попробовал _delay_ms() из описания на хайтек таже фигня,но я не успокоился и нашел #define uS_CNT 163 и все стало хорошо 163 это период моего кварца. Я так и не прорубил про XTAL_FREQ это что явное надувательство?Кстати или нет но в 18 пике мой текст,верхний,не пошел. Все работает, приложите к сообщению короткий запакованный проект, поправлю. У Вас нет понимания процесса.
|
|
|
|
|
Oct 22 2008, 17:57
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Евгений Германович @ Oct 20 2008, 17:16)  Код #include "C:\Program Files\HI-TECH Software\PICC\std\9.60\samples\delay\delay.h";
_XTAL_FREQ=4MHZ;
extern void DelayMs(unsigned char); ... Однако _XTAL_FREQ=4MHZ; в любых вариантах вызывает бурную реакцию хайтека. Кто такой _XTAL_FREQ, я не знаю, как, похоже, и компилятор. Может быть так пройдет? Код #define XTAL_FREQ 4MHZ #include "C:\Program Files\HI-TECH Software\PICC\std\9.60\samples\delay\delay.h"
// а это уже есть в delay.h //extern void DelayMs(unsigned char); ... Интересно, для кого я писал: Цитата Вы можете задать XTAL_FREQ обычным #define XTAL_FREQ 4MHZ перед #include "path_to/delay.h"
|
|
|
|
|
Oct 23 2008, 12:41
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
xemul считаю своим долгом извиниться перед вами-виноват недоглядел Однако :#include <pic18.h> //#define XTAL_FREQ=5MHZ #include "C:\Program Files\HI-TECH Software\PICC-18\STD\9.51\samples\delay\delay.h"; #define XTAL_FREQ=9MHZ //#define XTAL_FREQ=1MHZ main() { __CONFIG(1,HS & OSCSDIS); __CONFIG(2,BOREN & BORV42 & PWRTEN & WDTPS128 & WDTDIS); __CONFIG(4,DEBUGEN & LVPDIS & STVREN); TRISA=0X00; TRISB=0XFF; TRISD=0X00; LATD=0x0f; while(1) { PORTA=0X00; // DelayMs(10); DelayUs(10); PORTA=0xff; //DelayMs(40); DelayUs(40); } } Если поставить #define перед #include то транслятор начинает возмущаться. Должен отметить,что если заменить DelayUs(10); на DelayMs(10); то появляется сообщение об ошибке  Естественно что изменение цифр в #define XTAL_FREQ=5MHZ ни к чему не приводит. Для DL36 запрошенные вами файлы прилагаются.
|
|
|
|
|
Oct 23 2008, 14:10
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Вы таки невнимательны. Код #define a b // OK #define a=b // препроцессор Вас не поймет ЗЫЖ попробуйте использовать в сообщении теги code и /code для текстов программ (теги заключаются в [])
|
|
|
|
|
Oct 23 2008, 15:21
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
 да. про code можно подробнее.Я готов их использовать только объясните где  и зачем В железе не проверял,но после #define XTAL_FREQ 5MHZ или сколь надо,в list файле отмечена положительная реакция на смену цифры. Однако транслятор выкинул предупреждение о нежелательности задания частоты подобным образом. Вы правы. не подскажете как облагородить list такого кол-ва ненужных букв я ещё нигде не видел.
|
|
|
|
|
Oct 23 2008, 17:31
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Евгений Германович @ Oct 23 2008, 19:21)  про code можно подробнее.Я готов их использовать только объясните где  и зачем Без тегов: main() { while(1) { } } С тегами: Код main() { while(1) { сохраняется форматирование кода, и не приходится ломать глаза и голову } } В окне редактирования сообщения в панели инструментов есть кнопка с буквой #. Вот она и вставляет теги code и /code. Еще одна полезная кнопка там же - красная буква Хе (а может быть и крест  ) поверх буквы T - "Закрыть все теги". Цитата В железе не проверял,но после #define XTAL_FREQ 5MHZ или сколь надо,в list файле отмечена положительная реакция на смену цифры. Однако транслятор выкинул предупреждение о нежелательности задания частоты подобным образом. Вот ведь гад... Не знаю, у меня он на XTAL_FREQ, заданный любым допустимым образом, не ругается. Цитата не подскажете как облагородить list такого кол-ва ненужных букв я ещё нигде не видел. Вы имеете в виду файлы листингов *.lst? Опять же не знаю - мне там все буквы нравятся и кажутся весьма полезными.
|
|
|
|
|
Oct 24 2008, 06:12
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Все до безобразия просто результат: Цитата Memory Summary: Program space used 24h ( 36) of 4000h bytes ( 0.2%) Data space used 0h ( 0) of 300h bytes ( 0.0%) EEPROM space used 0h ( 0) of 100h bytes ( 0.0%) External data memory None available ID Location space used 0h ( 0) of 8h nibbles ( 0.0%) Configuration bits used 4h ( 4) of 7h words ( 57.1%)
Loaded C:\#Work\tmp\Tst\Tst.cof.
********** Build successful! ********** С правками Код #include <pic18.h>
#define XTAL_FREQ 4MHZ #include "dl36.h"; //Этот файл надо всключить в проект
main() { __CONFIG(1,HS & XT); __CONFIG(2,BOREN & BORV42 & PWRTEN & WDTPS128 & WDTDIS); __CONFIG(4,DEBUGEN & LVPDIS & STVREN);
TRISA=0X00; TRISB=0XFF;
TRISD=0X00; LATD=0x0f; а это править нииииизя, пока понимание не прийдет Код #ifndef XTAL_FREQ #define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */ #endif
#define MHZ *1000L /* number of kHz in a MHz */ #define KHZ *1 /* number of kHz in a kHz */
#define DelayUs(x) { unsigned char _dcnt; \ _dcnt = (((long)(x))*(long)(XTAL_FREQ))/(long)(12MHZ); \ while(--_dcnt != 0) \ continue; } /* #define DelayUs(x) { unsigned char _dcnt; _dcnt = (unsigned char)((x)*((XTAL_FREQ*1.0)/(12MHZ))); while(--_dcnt != 0) continue; } */ extern void DelayMs(unsigned char);
Прикрепленные файлы
Tst.rar ( 58.58 килобайт )
Кол-во скачиваний: 32
|
|
|
|
|
Oct 25 2008, 06:01
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(Евгений Германович @ Oct 24 2008, 17:53)  Простите,но мой _XTAL_FREQ 4MHZ длиннее вашего на одно подчеркивание Или я опять чтото проглядел? Должно быть одинаково если #define _XTAL_FREQ 4MHZ то и Код #define DelayUs(x) { unsigned char _dcnt; \ _dcnt = (((long)(x))*(long)(_XTAL_FREQ))/(long)(12MHZ); \ while(--_dcnt != 0) \ continue; } Вам же символ _ ни к чему. В хайтеке _используется если надо из асма обратиться к сишной переменной.
|
|
|
|
|
Oct 25 2008, 11:56
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(DL36 @ Oct 25 2008, 09:01)  Должно быть одинаково если #define _XTAL_FREQ 4MHZ то и Код #define DelayUs(x) { unsigned char _dcnt; \ _dcnt = (((long)(x))*(long)(_XTAL_FREQ))/(long)(12MHZ); \ while(--_dcnt != 0) \ continue; } Вам же символ _ ни к чему. В хайтеке _используется если надо из асма обратиться к сишной переменной. Я пробовал без подчеркивая,хайтек ответил предупреждением,но всё работало.Я подчеркнул,хайтек заткнулся и всё работало. Кстати вольный перевод предупреждения-сейчас не модно пользоваться XTAL_FREQ надо _ XTAL_FREQ
|
|
|
|
|
Oct 25 2008, 12:26
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Евгений Германович @ Oct 25 2008, 15:56)  Я пробовал без подчеркивая,хайтек ответил предупреждением,но всё работало.Я подчеркнул,хайтек заткнулся и всё работало.  Гм... #define XTAL_FREQ не встречается ни в одном стандартном хидере версии std. Этот дефайн поминается только в delay.h в ./samples/... В pro в pic.h есть следующее: Код #pragma inline(_delay) #ifdef __PICCPRO__ extern void _delay(unsigned long); // NOTE: To use the macros below, YOU must have previously defined _XTAL_FREQ #define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000UL))) #define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000UL))) #endif Могу предположить, что Вы пытаетесь использовать picc std с хидерами от picc pro. Кста, pro корректно раскручивает короткие задержки в nop'ы и goto $+1. Для стд мне приходится держать отдельный delay.c с функциями задержек до 10 тактов (бОльшие задержки считаю идеологически вредными  ), для которого в проектах выключается ассемблерная оптимизация, т.к. оптимизатор asm("nop") оптимизирует напрочь, а от asm("goto $+1") у него крыша съезжает вплоть до следующей }. А конструкция типа volatile asm("...") писсом не поддерживается.  Цитата Кстати вольный перевод предупреждения-сейчас не модно пользоваться XTAL_FREQ надо _ XTAL_FREQ Запостите, плз, предупреждение сюда - даже интересно стало.
|
|
|
|
|
Oct 25 2008, 15:14
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(Евгений Германович @ Oct 25 2008, 16:22)  #warning Preprocessor symbol XTAL_FREQ has been deprecated. Now used _XTAL_FREQ Вот этот текст без варнинга и выскакивает. Странно почему у меня ничего не выскакивает, предупреждения на максимуме компилятор PICC18 std9.51 Цитата Вы заговорили об ассемблерной оптимизации,чем приблизили следующие вопросы У меня при написании асемблерной вставки ХТ жутко ругается на команды использующие адресацию через индексный регистр.Ежли я задаю принудительно адрес с помощью @ то все нормально,а если нет то ...........Оптимизацию я вроде откючил,попытка воткнуть слова bankX воспринимается благосклонно но пользы от восприятия не какой.Не будете ли так любезны прояснить.У меня std9.51 Использование Индексных регистров в асмовких вставках дело тонкое, его надо поделить с компилятором. Но, вот такой текст дает вполне приличный код. Код FSR0L = *( unsigned char *)(&pTable); // FSR0H = *((unsigned char *)(&pTable) +1); WREG = tableOffset0; // tmpMult = PLUSW0; Хайтек очень часто использует FSRx как регистры временного хранения, И может Вы ему чем то помешали. Кстати о страничной организации памяти надо помнить и это теперь Ваша забота.
|
|
|
|
|
Oct 25 2008, 15:49
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Евгений Германович @ Oct 25 2008, 17:22)  #warning Preprocessor symbol XTAL_FREQ has been deprecated. Now used _XTAL_FREQ Вот этот текст без варнинга и выскакивает. В picc std 9.60 такого не замечал. Цитата Вы заговорили об ассемблерной оптимизации,чем приблизили следующие вопросы У меня при написании асемблерной вставки ХТ жутко ругается на команды использующие адресацию через индексный регистр.Ежли я задаю принудительно адрес с помощью @ то все нормально,а если нет то ........... Есть такая непоследовательность в хидерах - INDF определен не для всех контроллеров. Если обращение к INDF происходит в ассемблерных вставках, то необходимо также добавить Код #asm INDF equ 000h #endasm Я, чтобы не париться с этим безобразием, добавил Код static volatile unsigned char INDF @ 0x00; // в ./include/pic*.h и INDF equ 000h; в ./include/as*.h Цитата Оптимизацию я вроде откючил,попытка воткнуть слова bankX воспринимается благосклонно но пользы от восприятия не какой.Не будете ли так любезны прояснить.У меня std9.51 Ничего не понял. Вы бы приводили проблемные куски кода с описанием беды для облегчения процесса. ЗЫЖ ассемблерная оптимизация и ассемблерные вставки никак друг с другом не соотносятся. Но первое - вещь велми полезная, а второе - ... не необходимая.
|
|
|
|
|
Oct 25 2008, 19:17
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Евгений Германович @ Oct 25 2008, 19:59)  про варнинг,сегодня проверял вот текст Код #include "C:\Program Files\HI-TECH Software\PICC-18\STD\9.51\samples\delay\delay.h"; ... __delay_ms(10);
//DelayMs(40); Ругань идет при использовании __delay,Если эту штуку не применять то XTAL_FREQ 13MHZ что с чертой спереди что без -все тихо и спокойно. Воистину, в огороде бузина... Как соотносятся __delay_ms() и DelayMs()? Если Вы пытаетесь использовать DelayMs() из C:\Program Files\HI-TECH Software\PICC-18\STD\9.51\samples\delay\delay.h, то там черным по-Сишному: Код void DelayMs(unsigned char); Если Вы написали свою __delay_ms(), то я, увы, не смог телепнуть ни ее текст, ни ругань по ее поводу. Цитата Меня до неприличия заинтересовал вопро о принудительном определении места в памяти переменных,но как бы я не изголялся с банком -никакого эффекта. Оно Вам точно надо? Код int Abc @ 0x192; // и никаких чудес // если память контроллера нарезана банками по 256 байт, // то Abc попадет в bank1 по смещению 0x92 Abc = 1234; manual.pdf Цитата 3.4.2 Absolute Variables Эта конструкция предназначена в первую очередь для согласования адресов Сишных переменных с регистрами специального назначения микропроцессора, но может быть использована и для размещения переменных пользователя по абсолютным адресам. Компилятор и линкер не производят никаких проверок на перекрытие абсолютных переменных друг с другом. Определение абсолютных переменных может фрагментировать память и сделать невозможным для линкера размещение других объектов. По возможности избегайте использования абсолютных переменных. Если абсолютные переменные все же должны быть определены, старайтесь размещать их в одном конце памяти одним куском. (в оригинале "try to place them at one end of a memory bank or space", но под вечер беда с более точным переводом) Посмотрите любой из хидеров в C:\Program Files\HI-TECH Software\PICC-18\STD\9.51\include - там таким образом описаны все SFR.
|
|
|
|
|
Oct 25 2008, 20:44
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(xemul @ Oct 25 2008, 18:49)  Есть такая непоследовательность в хидерах - INDF определен не для всех контроллеров. Если обращение к INDF происходит в ассемблерных вставках, то необходимо также добавить Это тот случай когда _ помогает. Попробуйте так обратиться _INDF.
|
|
|
|
|
Oct 26 2008, 04:01
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Я решил проверить все delay до которых смог дотянуться.  Результат не радует. Воистину, в огороде бузина... Как соотносятся __delay_ms() и DelayMs Воистину, в огороде бузина... неплохо,разница только в том,что DelayMs безбожно врет(По другому сказать правила форума не позволяют,а зря) Оно Вам точно надо? На прямо поставленный вопрос ответ будет подобным-НЕ ЗНАЮ. Но меня огорчила дискриминация со стороны какого то хайтека.Как можно доверить столь интимную вещь,как распределение памяти,какомуто хайтеку,Что он может знать о моих планах на отдаленное будущее. int Abc @ 0x192 Так и я могу.А вы попробуйте просто определить Abc в банк 1 без конкретизации адреса. А как массив в определённый банк записать?? У меня ничего не вышло,этот хт грузит массив в последний банк и нагло плюет на мои просьбы засунуть его в другое место. 3.4.2 Absolute Variables Эта конструкция предназначена в первую очередь для согласования адресов Сишных переменных с регистрами специального назначения микропроцессора, но может быть использована и для размещения переменных пользователя по абсолютным адресам. Компилятор и линкер не производят никаких проверок на перекрытие абсолютных переменных друг с другом. Определение абсолютных переменных может фрагментировать память и сделать невозможным для линкера р У вас,что есть перевод хайтека,если есть не поделитесь? Да бог c INDF. Почему невинная операция incf с использованием банка вызывает такую реакцию ХТ какое его собачье дело,что я собрался делать?Банк естественно был задан перед использованием.
|
|
|
|
|
Oct 26 2008, 07:26
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(Евгений Германович @ Oct 26 2008, 08:01)  Я решил проверить все delay до которых смог дотянуться.  Результат не радует. Воистину, в огороде бузина... Как соотносятся __delay_ms() и DelayMs Воистину, в огороде бузина... неплохо,разница только в том,что DelayMs безбожно врет(По другому сказать правила форума не позволяют,а зря) Оно Вам точно надо? Я не использую программных задержек более 50us для более длинных существуют таймеры. Учитесь использовать RTOS и вопросы задержек отпадут. Цитата На прямо поставленный вопрос ответ будет подобным-НЕ ЗНАЮ. Но меня огорчила дискриминация со стороны какого то хайтека.Как можно доверить столь интимную вещь,как распределение памяти,какомуто хайтеку,Что он может знать о моих планах на отдаленное будущее. int Abc @ 0x192 Так и я могу.А вы попробуйте просто определить Abc в банк 1 без конкретизации адреса. А как массив в определённый банк записать?? У меня ничего не вышло,этот хт грузит массив в последний банк и нагло плюет на мои просьбы засунуть его в другое место. Если честно, то мне по барабану где переменные лежат, это забота компилятора. Цитата 3.4.2 Absolute Variables Эта конструкция предназначена в первую очередь для согласования адресов Сишных переменных с регистрами специального назначения микропроцессора, но может быть использована и для размещения переменных пользователя по абсолютным адресам. Компилятор и линкер не производят никаких проверок на перекрытие абсолютных переменных друг с другом. Определение абсолютных переменных может фрагментировать память и сделать невозможным для линкера р Это можно, но надо ли. Компилятору надо указать, что эти адреса заняты и он туда не полезет. Цитата У вас,что есть перевод хайтека,если есть не поделитесь? Нет, я использую оригинал, что и Вам советую. Цитата Да бог c INDF. Почему невинная операция incf с использованием банка вызывает такую реакцию ХТ какое его собачье дело,что я собрался делать?Банк естественно был задан перед использованием. Не настолько она невинна как кажется, после оптимизации компилятор надеется на то, что в регистрах лежат определённые данные а Вы можете это нарушить. Я показал как можно использовать индексную адресацию не влезая без необходимости в область влияния компилятора. Если хорошо подумать в Си очень многое доступно и без ассемблера. Научившись писать в Си найдете возможность подружить компилятор с ассемблером.
|
|
|
|
|
Oct 26 2008, 13:32
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Евгений Германович @ Oct 26 2008, 08:01)  Я решил проверить все delay до которых смог дотянуться.  Результат не радует. Цитата Воистину, в огороде бузина... Как соотносятся __delay_ms() и DelayMs?
неплохо,разница только в том,что DelayMs безбожно врет(По другому сказать правила форума не позволяют,а зря) Уфф.. Я не знаю, до какой степени безбожно у Вас врет DelayMs(). Мой вопрос был: Цитата Если Вы написали свою __delay_ms(), то я, увы, не смог телепнуть ни ее текст, ни ругань по ее поводу. Точность DelayMs() и DelayUs() я проверял лет 10 тому. С того времени и сами функции в picc std, и их точность ни разу не изменились (а я ими ни разу не воспользовался). DelayUs() на задержках в несколько десятков мкс подвирает больше, чем на сотнях мкс, и это совершенно естественно. Точность DelayMs() примерно соответствует точности внутреннего RC-генератора контроллера. Если у Вас получаются другие результаты, проверьте чистоту эксперимента . Цитата На прямо поставленный вопрос ответ будет подобным-НЕ ЗНАЮ. Но меня огорчила дискриминация со стороны какого то хайтека.Как можно доверить столь интимную вещь,как распределение памяти,какомуто хайтеку,Что он может знать о моих планах на отдаленное будущее. имхо, в большинстве случаев он справится с этой вещью лучше, независимо от Ваших планов. Цитата int Abc @ 0x192 Так и я могу.А вы попробуйте просто определить Abc в банк 1 без конкретизации адреса. А как массив в определённый банк записать?? У меня ничего не вышло,этот хт грузит массив в последний банк и нагло плюет на мои просьбы засунуть его в другое место. Мануалы - рулеззз. Вы только сначала определитесь, какая у Вас версия - pro или std? В любом случае смотрите раздел "Special Type Qualifiers". Вкратце: версии pro (и picc, и picc18) чихают на пожелания программера о рукопашном распределении переменных по банкам, но на квалификаторы bankN не ругаются для совместимости с версиями std (которые удовлетворяют такие пожелания). Цитата У вас,что есть перевод хайтека,если есть не поделитесь? Нет. Я просто перевел кусок для Вас. Про программирование на С без ассемблера: одно и то же можно написать очень по-разному. Попробуйте разные варианты и проанализируйте листинги на предмет разумности и оптимальности этих вариантов. Про знаменитость ht picc: под мелкие пики компиляторов С лет дцать назад было чуть да ничего. Оптимизатор ht picc давал более-менее приличный код по сравнению с другими. У меня просто с тех пор осталась привычка к ht. ЗЫЖ Евгений Германович, неужели, отвечая кому-нибудь в конфе, Вы не замечали парные конструкции, типа quote .. /quote, code .. /code, color .. /color, ..., заключаемые в []? Такие конструкции называются тэгами и придуманы для облегчения и изложения, и восприятия. Ваш способ изложения облегчению восприятия совсем не способствует. Цитата(DL36 @ Oct 26 2008, 00:44)  Это тот случай когда _ помогает. Попробуйте так обратиться _INDF. Мне иногда не лень нарисовать какой-нить .as Поэтому мне проще все хидеры привести к единому виду.
|
|
|
|
|
Oct 26 2008, 14:06
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(xemul @ Oct 26 2008, 17:32)  Мне иногда не лень нарисовать какой-нить .as Поэтому мне проще все хидеры привести к единому виду. Применение _ не приводит ни к какому криминалу. Вариант обращения _INDF в духе и применяется при необходимости обращения к глобальным переменным из асма. Цитата(Евгений Германович @ Oct 26 2008, 12:53)  Это можно, но надо ли. Компилятору надо указать, что эти адреса заняты и он туда не полезет. Как???? Ищите, читайте мануал. Помогает исследование заголовочных файлов Хайтека. В начале применения Си, я также искал и нашёл подобный вариант, но затем отказался от подобной практики, поскольку это связано с проблемами переносимости даже в пределах одного семейства. Первый проект потерян, и поэтому помочь не могу.
|
|
|
|
|
Oct 26 2008, 17:11
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(xemul @ Oct 26 2008, 18:58)  Угу. Но я говорил про ассемблерные файлы, а не про ассемблерные вставки. Повторюсь: мне проще все хидеры привести к единому виду. Так и я про ассемблерные.
|
|
|
|
|
Oct 27 2008, 13:34
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
xemul я ничего сам не писал.Функция __delay_ms описана в мануале на хайтек,я её просто применил. Мануалы - рулеззз. Вы только сначала определитесь, какая у Вас версия - pro или std? В любом случае смотрите раздел "Special Type Qualifiers". Вкратце: версии pro (и picc, и picc18) чихают на пожелания программера о рукопашном распределении переменных по банкам, но на квалификаторы bankN не ругаются для совместимости с версиями std (которые удовлетворяют такие пожелания). Определился std.Моя версия std видимо очень наглая  и не удовлетворяет.  имхо, в большинстве случаев он справится с этой вещью лучше, независимо от Ваших планов. Щасс. ЫЖ Евгений Германович, неужели, отвечая кому-нибудь в конфе, Вы не замечали парные конструкции, типа quote .. /quote, code .. /code, color .. /color, ..., заключаемые в []? Такие конструкции называются тэгами и придуманы для облегчения и изложения, и восприятия. Ваш способ изложения облегчению восприятия совсем не способствует. Не замечал,каюсь
|
|
|
|
|
Jun 20 2009, 06:57
|

Местный
  
Группа: Свой
Сообщений: 206
Регистрация: 17-03-07
Из: Москва
Пользователь №: 26 266

|
1. #define my_bit PORTC0 (или RC0, не помню в HI-TECH как было, можно посмотреть в include файле) 2. Работать будет, но надо еще позаботиться о сохранении контекста. Если у вас процедура обработки прерываний такая длинная, это уже само по себе неправильно. В прерываниях нужно поднимать только флаги, а основную обработку совершать вне прерывании. По моему скромному мнению, прерывать прерывание в 16-й серии оправдано только в случае если приходится мониторить о пропаже питания.
добавил: По 2. нужно очень внимательно позаботиться, что бы при повторное прерывание, не попасть в тот же самый обработчик прерываний, который был прерван, получиться reentrance, со всеми вытекающими... Вообще в 16-й серии лучше такое не делать! (хотя у меня было один раз, но по второму прерыванию, сохранял данные и дальше просто усыпал процессор, который из слипа, выходил только по reset)
--------------------
УЭР
|
|
|
|
|
Jun 20 2009, 15:44
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Stas @ Jun 19 2009, 22:51)  Появилось несколько вопросов: 1. А как синтаксически правильно выразить "в бит порта (к примеру RC0) вывести битовую переменную (bit my_bit)"? Столкнулся с тем что в switch значение бита порта не равно переменной, при записи RC0 = my_bit. RC0 = my_bit; - для picc совершенно правильная синтаксическая конструкция, которая раскручивается (т.к. RC0 объявлен volatile bit) во что-нить вроде btfss 0x.., my_bit_pos goto $+3 bsf RC0 goto $+2 bcf RC0 Посмотрите внимательно ассемблерный листинг. Неплохо бы указывать версию компилятора и приводить фрагмент, в котором наблюдаются/предполагаются проблемы, и необходимые объявления. Цитата 2. Можно ли на PIC16 организовать вложеные прерывания? Т.е. в системе 3 прерывания - таймер и 2 приоритетных внешних. Необходимо чтоб внешние прерывания могло вызываться при обработке прерывания таймера. Можно, но вряд ли оно требуется. Определитесь, какое прерывание является самым приоритетным для Вашей программы, поставьте его обработчик первым, все остальные обработчики сделайте максимально короткими. Какие временнЫе параметры у сигналов на "2 приоритетных внешних" прерываниях и чем занимается таймер? Цитата Если при возникновении прерывания таймера очищать бит прерывания таймера и устанавливать бит глобального прерывания вручную (а не командой retfie)- будет ли это работать ? За детские вопросы прошу не бить, с HiT и PIC16 - первый раз. Будет, но Вам придется написать своё сохранение/восстановление регистров и отвести под это соответствующий кусок ОЗУ (с учетом предполагаемой вложенности прерываний). Но сама идея идеологически вредная, учитывая систему прерываний мелких пиков, и самонадеянная, учитывая первый раз.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|