Olen tässä hieman yrittänyt aloitella PIC ohjelmointia C-kielellä, Hi-Tech picc litellä. Minulla on ongelma header filun kanssa, eli kun laitan koodiin:
#include
...
DelayS(2);
kääntäjä antaa ilmoituksen:
Error[499] : undefined symbol:
_DelayS (C:\PIC\Projektit\c_testi\main_code.obj)
BUILD FAILED: Wed May 02 18:01:02 2007
Sain jossain vaiheessa aikani testaillessa koodin kääntymään ja se toimi. Huomasin että kääntäjä haluaa object tiedoston (esim. delay.obj) jolloin projekti kääntyy. Mutta miten tämä object file tehdään ja mitä se sisältää?
#include
...
DelayS(2);
kääntäjä antaa ilmoituksen:
Error[499] : undefined symbol:
_DelayS (C:\PIC\Projektit\c_testi\main_code.obj)
BUILD FAILED: Wed May 02 18:01:02 2007
Sain jossain vaiheessa aikani testaillessa koodin kääntymään ja se toimi. Huomasin että kääntäjä haluaa object tiedoston (esim. delay.obj) jolloin projekti kääntyy. Mutta miten tämä object file tehdään ja mitä se sisältää?
Vastaukset 11
Vanhimmat
Johtuu siitä, että Piccliten mukana ei tule mitään delay.h kirjastoa, mitä käyttää.
Jos tarvitset viiverutiineja, niin helpoiten saat ne tuolta:
http://www.microchipc.com/sourcecode/PIC_Hi-Tech_C_delay_and_timeout_routines_for_PIC16xxxx_v7-1.zip
Saitilla on paljon muutakin hyödyllistä picille.
Kannattaa seurata HiTechin omaa foorumia:
http://www.htsoft.com/forum/all/postlist.php?Cat=&Board=pic
Jaa, mutta piccliten samples kansiosta löytyykin delay.h ja c. Kopioi ne projekstikansioosi ja pitäisi toimia #include "delay.h":lla. Huomaa, että vot käyttää funktioita DelayUs() ja DelayMs() kun olet asettanut XTAL_FREQ -vakion arvon ensin.
Kyllä siinä on. Ja olen kyllä imuroinut KO viive tiedoston. Ja sama delay.h on PICC liten mukana. Mutta vaikka se delay.h on projektin kansiossa ja laitettu projektiin, ei se toimi...
Ja sehän tässä hassua on, että olen sen saanut toimimaan, en vain tiedä miten!
No jos tämä on käänettävää koodiasi, niin siinä on kaksi virhettä:
#include
...
DelayS(2);
Pitää olla
#include "delay.h"
...
DelayMs(2);
On kokeiltu. Ei toimi. Oisko joku asetus väärin? Kun kääntäjä ei tee sitä objekti-filua?
Pistä tähän
1.) sorsa
2.) kääntämiskomento
3.) kääntäjän tuloste
SORSA:
#include
//#include
#include // Viiveet oli: DelayUs(40) DelayMs(40) DelayS(40)
#define _FCMEN_ON 0x3FFF
#define _FCMEN_OFF 0x37FF
#define _IESO_ON 0x3FFF
#define _IESO_OFF 0x3BFF
#define _BOD_ON 0x3FFF
#define _BOD_NSLEEP 0x3EFF
#define _BOD_SBODEN 0x3DFF
#define _BOD_OFF 0x3CFF
#define _CPD_ON 0x3F7F
#define _CPD_OFF 0x3FFF
#define _CP_ON 0x3FBF
#define _CP_OFF 0x3FFF
#define _MCLRE_ON 0x3FFF
#define _MCLRE_OFF 0x3FDF
#define _PWRTE_OFF 0x3FFF
#define _PWRTE_ON 0x3FEF
#define _WDT_ON 0x3FFF
#define _WDT_OFF 0x3FF7
#define _LP_OSC 0x3FF8
#define _XT_OSC 0x3FF9
#define _HS_OSC 0x3FFA
#define _EC_OSC 0x3FFB
#define _INTRC_OSC_NOCLKOUT 0x3FFC
#define _INTRC_OSC_CLKOUT 0x3FFD
#define _EXTRC_OSC_NOCLKOUT 0x3FFE
#define _EXTRC_OSC_CLKOUT 0x3FFF
#define _INTOSCIO 0x3FFC
#define _INTOSC 0x3FFD
#define _EXTRCIO 0x3FFE
#define _EXTRC 0x3FFF
main()
{
__CONFIG(_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOD_OFF & _IESO_OFF & _FCMEN_OFF);
while(1){
TRISC0 = 0;
TRISC5 = 1;
if (RC5 == 1){
unsigned int c;
for (c=0;c
Jos delay.c ja .h on samassa kansiossa kuin kutsuva moduli on #include -lause oltava #include "delay.h".
Itselläkin on picclite 9.50, eikä siellä ainakaan ole DelayS() -funktiota ollenkaan. Kokeile kääntyykö koodi jos vaihdat delay.h:n hipsuihin ja kutsut vaikka DelayMs(250);
Kokeile myös kääntää samples kansion projekteja.
No nyt toimii, kun laitoin projektikansioon delay.h delay.c ja always.h tiedostot. Eli minulla oli aikaisemmin vain delay.h tiedosto...
Toimii #include ja #include "delay.h" komennoilla.
KIITOS PALJON AVUSTA.
Joskus tappaa motivaatiota aika rankasti kun jumittuu tämmösiin ongelmiin.
Joku henkisesti häiriintynyt pommittaa tätä ketjua automaattivastauksilla. Nämä tulevet ilmeisesti jonkun rikollisproxyn kautta koska ylläpito ei ole halukas lähettäjää bannaamaan.
Ehkä kannattaisi tutkia osallistujat tuosta alkupäästä ja laittaa vireille syyte tietoliikenteen häirinnästä.
Tarkistussumma ei näy purevan tähän roskaajaan ja se on varsin ymmärrettävää kun yrityskertoja ei ole mitenkään rajattu. Päinvastoin se kannustaa vaan yrittämään aina uudelleen toisella arvolla kun oikea löytyy suht' helposti. Välillä tietysti kuormaa on sen verran että koko serveri on vähän aikaa tiltissä.
Olisiko parempi esim. monikirjaiminen stringi niin mahdollisuuksien määrä nousisi niin korkeaksi että huijarin ehtii saada kiinni kun se kelaa vaihtoehtoja läpi?