А нету у меня плюсов, и что прикажешь дальше?
AVR libc посмотри немного. И не такое увидишь.
Код: Выделить всё
int variable = array["parameter_name"];
Код: Выделить всё
typedef struct {
char CmdName[12]; // name of command
uint32_t (*fnctPt)(instance_t *, int *); // to execute this command
int *param;
}Cmd_t;Код: Выделить всё
typedef struct {
unsigned char input_string[64];
unsigned int base;
uint32_t stack[FORTH_STACK_SIZE];
uint32_t stack_idx;
unsigned int str_index;
unsigned int esc_sequence;
void (*UART_OutString)(char *);
void (*UART_OutChar)(uint8_t);
void (*UART_OutUDec)(uint32_t);
} instance_t; Код: Выделить всё
struct instance_t;
struct Cmd_t;
struct Cmd_t{
instance_t * p_instance;
};
struct instance_t{
Cmd_t * p_cmd;
};
//------------------------------------------------
{
instance_t inst;
Cmd_t cmd;
inst.p_cmd = &cmd;
cmd.p_instance = &inst;
}
Код: Выделить всё
#ifndef COMMANDLINE_H
#define COMMANDLINE_H
#define FORTH_STACK_SIZE 16
struct instance_t;
struct Cmd_t;
typedef struct {
char CmdName[12]; // name of command
uint32_t (*fnctPt)(instance_t *, int *); // to execute this command
int *param;
}Cmd_t;
typedef struct {
unsigned char input_string[64];
unsigned int base;
uint32_t stack[FORTH_STACK_SIZE];
uint32_t stack_idx;
unsigned int str_index;
unsigned int esc_sequence;
Cmd_t * current_vocabulary;
void (*UART_OutString)(char *);
void (*UART_OutChar)(uint8_t);
void (*UART_OutUDec)(uint32_t);
} instance_t;
Код: Выделить всё
arm-none-eabi-gcc -g3 -gdwarf-2 -mcpu=cortex-m4 -mthumb -std=c99 '-DDEBUG_EFM=1' '-DEFM32GG12B810F1024GM64=1' '-DSL_BOARD_NAME="BRD2207A"' '-DSL_BOARD_REV="A03"' '-DSL_COMPONENT_CATALOG_PRESENT=1' -I"C:\Users\prg51\SimplicityStudio\Maze\EFM32_ROMI_Robot_2\config"
<Skipped>
In file included from ../Maze.c:21:
../commandline.h:22:24: error: unknown type name 'instance_t'
22 | uint32_t (*fnctPt)(instance_t *, int *); // to execute this command
| ^~~~~~~~~~
Код: Выделить всё
uint32_t (*fnctPt)(instance_t *, int *); // to execute this commandКод: Выделить всё
typedef struct Node {
DATA_TYPE data;
struct Node *next;
} Node;Вы не внимательно посмотрели в мой код. У него с Вашим есть различия.uldemir писал(а):Чевой-то не получается
Код: Выделить всё
#ifndef COMMANDLINE_H
#define COMMANDLINE_H
#define FORTH_STACK_SIZE (16)
struct instance_t;
struct Cmd_t;
struct Cmd_t{
instance_t * p_instance;
};
struct instance_t{
Cmd_t * p_cmd;
};
/*
------------------------------------------------
In file included from ../Maze.c:21:
../commandline.h:22:5: error: unknown type name 'instance_t'
22 | instance_t * p_instance;
| ^~~~~~~~~~
../commandline.h:27:4: error: unknown type name 'Cmd_t'
27 | Cmd_t * p_cmd;
| ^~~~~
Не совсем в АрдуинеVladislavS писал(а):Аlex, наверное, в ардуине компилирует? Там компилятор в режиме С++ - он такое умеет.
Код: Выделить всё
Thunderboard>words
drop dup swap @ +
* / - << !
b! w! & | ^
. sp cr show hex
bin decimal crc vbat threshold
Threshold X_offset Y_slope MAXspeed MINspeed
MAXmotor TurnSpeed Accelerat K*error K*de/dt
Kintegral MotorKprop MotorKint OnWay RunNumber
PathLength MapSize StartPoint EndPoint IRlevel
map LeftHand ColorRed ColorGreen ColorBlue
ColorThr ColorSat DstToleran GuardDist SensorOffs
IgnoreError BrakePath TimeToRun TurnCost CrossCost
StepCost CellStep Volt_calibr Bat_low_lvl Length_tab
RedWall GreenWall Watermark motor_en motor_speed
searchWay validate save_conf dump dump_eeprom
dump_log dump_addlog dump_log_ft dump_map show_path
time_to_run init_brkpth list words
Thunderboard>Код: Выделить всё
const Cmd_t Table[]={
{"drop", &drop_stack, NULL},
{"dup", &dup_stack, NULL},
{"swap", &swap_stack, NULL},
{"@", &read_mem, NULL},
{"+", &sum_stack, NULL},
Код: Выделить всё
#include <stdint.h>
#include <string.h>
uint32_t foo1() { return 1; }
uint32_t foo2() { return 2; }
uint32_t foo3() { return 3; }
uint32_t foo4() { return 4; }
uint32_t foo5() { return 5; }
typedef struct {
char CmdName[12];
uint32_t (*fnctPt)();
int *Cmd_t;
} Cmd_t;
const Cmd_t Table[]={
{"drop", &foo1},
{"dup", &foo2},
{"swap", &foo3},
{"@", &foo4},
{"+", &foo5}, };
int main(int argc, char *argv[])
{
for(uint32_t i=0; i<argc; i++)
{
if(strcmp(Table[i].CmdName, argv[i])==0)
return Table[i].fnctPt();
}
}Я не против. Более того, хотелось бы. Но я не знаю, как это организовать на языке си, поэтому пока что выкрутился используя массивы. На ассемблере и не такие завороты когда-то устраивал. Ну и конечная цель - переключение словарей. Т.е. чтобы в определённом контексте стали бы доступны другие слова. Почти как в настоящем форте.VladislavS писал(а):uldemir, послушайте мой совет - сделайте связный список
Я не против. Более того, хотелось бы. Но я не знаю, как это организовать на языке си, поэтому пока что выкрутился используя массивы. На ассемблере и не такие завороты когда-то устраивал. Ну и конечная цель - переключение словарей. Т.е. чтобы в определённом контексте стали бы доступны другие слова. Почти как в настоящем форте.VladislavS писал(а):uldemir, послушайте мой совет - сделайте связный список
Код: Выделить всё
#ifndef COMMANDLINE_H
#define COMMANDLINE_H
#define FORTH_STACK_SIZE (16)
struct instance_t;
struct Cmd_t;
struct Cmd_t{
instance_t * p_instance;
};
struct instance_t{
Cmd_t * p_cmd;
};
/*
----------
In file included from ../Maze.c:21:
../commandline.h:22:5: error: unknown type name 'instance_t'
22 | instance_t * p_instance;
| ^~~~~~~~~~
../commandline.h:27:4: error: unknown type name 'Cmd_t'
27 | Cmd_t * p_cmd;
| ^~~~~
Код: Выделить всё
struct instance_t;
struct Cmd_t;
struct Cmd_t{
struct instance_t * p_instance;
};