Што такое эфектыўны спосаб разбору радка на ўбудаваную сістэму?

Я пачатковец у гэтым цэлае ўкладзенага думаць аб памяці і г.д. Цікава, Wheter Ther з'яўляецца найбольш эфектыўным спосабам разбору радкоў вядомай структуры, але невядомая даўжынёй на ўбудаванай сістэме. (Некаторыя падыходы кожны убудаваны распрацоўшчык павінен ведаць вітаюцца).

У мяне ёсць структуры, як адзін смелай ніжэй падыходжу да майго АВРУ. Тыя каманды, якія вызначаюць-сутнасці пэўныя дзеянні, якія павінны выконвацца маёй АВР. Я не хачу выкарыстоўваць радок класа, з-за прычын.

<�Моцны> нумар радка падзельнік падзельнік радкі

У мяне няма ніякай улады над пратаколам. У мяне ёсць рашэнне, выкарыстоўваючы функцыю з strtok() , зЬгсру() ў ім. Я запоўніць масіў лексем то ў мяне ёсць некаторыя, калі/інакш, калі ўмовы для выканання дзеянняў.

Але мне цікава, калі ёсць рашэнне, як дзяржаўны апарат (чытанне посимвольно) або падобная, які працуе больш эфектыўны, ва ўбудавальных сістэмах. Я шукаў даволі доўга, і цяпер я быў бы ўдзячны, каб атрымаць нейкія намёкі на гэтым даволі распаўсюджаную promblem струннай разборы.

Thx для ўводу. I'm не прашу рашэнні, але і для падыходу.

0
Выкарыстоўвайце радковыя функцыі, яны простыя і не выклікаюць шмат накладных выдаткаў. У адваротным выпадку разбору з простай дзяржаўнай машыны, здаецца, таксама добры ПАДЫХОД як фармат, які вы хочаце, каб разабраць выглядае даволі проста. Можа быць, вы хочаце змяніць сваё пытанне, і ўключаюць у сябе некаторую выбарку камандных радкоў.
дададзена аўтар Jabberwocky, крыніца
Выкарыстоўвайце радковыя функцыі, яны простыя і не выклікаюць шмат накладных выдаткаў. У адваротным выпадку разбору з простай дзяржаўнай машыны, здаецца, таксама добры ПАДЫХОД як фармат, які вы хочаце, каб разабраць выглядае даволі проста. Можа быць, вы хочаце змяніць сваё пытанне, і ўключаюць у сябе некаторую выбарку камандных радкоў.
дададзена аўтар Jabberwocky, крыніца
C не мае класаў. Бібліятэка радкі, аднак, павінна быць дастаткова кампактнай, калі вы толькі звязаць функцыі фактычна выкарыстоўваюцца.
дададзена аўтар Olaf, крыніца
C не мае класаў. Бібліятэка радкі, аднак, павінна быць дастаткова кампактнай, калі вы толькі звязаць функцыі фактычна выкарыстоўваюцца.
дададзена аўтар Olaf, крыніца
@TomTanner Я думаю, што ОП з'яўляецца палітыкам :)
дададзена аўтар Thomas Ayoub, крыніца
@TomTanner Я думаю, што ОП з'яўляецца палітыкам :)
дададзена аўтар Thomas Ayoub, крыніца
«З-за прычын»? Гэта не дапамагае зразумець, чаму вы не хочаце выкарыстоўваць клас радкоў
дададзена аўтар Tom Tanner, крыніца
«З-за прычын»? Гэта не дапамагае зразумець, чаму вы не хочаце выкарыстоўваць клас радкоў
дададзена аўтар Tom Tanner, крыніца
Калі вы на самой справе азначае прасіць рашэння, а не падыход, я буду галасаваць, каб закрыць гэтае пытанне.
дададзена аўтар user3528438, крыніца
Калі вы на самой справе азначае прасіць рашэння, а не падыход, я буду галасаваць, каб закрыць гэтае пытанне.
дададзена аўтар user3528438, крыніца
@TomTanner мала памяці, і я прагны на маёй памяці =)
дададзена аўтар Stanislav Sokol, крыніца
@TomTanner мала памяці, і я прагны на маёй памяці =)
дададзена аўтар Stanislav Sokol, крыніца
Я вельмі мала памяці і класа Струнны хіба гэта памяць дружнай ў маім вопыце. That's асноўнай прычынай. З іншага боку, метады сапраўды выдатна. @ User3528438 У мяне ўжо ёсць працоўнае рашэнне, але я думаю, што ёсць відавочныя рэчы, што я не ведаю пра сябе.
дададзена аўтар Stanislav Sokol, крыніца
Я вельмі мала памяці і класа Струнны хіба гэта памяць дружнай ў маім вопыце. That's асноўнай прычынай. З іншага боку, метады сапраўды выдатна. @ User3528438 У мяне ўжо ёсць працоўнае рашэнне, але я думаю, што ёсць відавочныя рэчы, што я не ведаю пра сябе.
дададзена аўтар Stanislav Sokol, крыніца

7 адказы

Я не згодны з аўтаматычна толькі з дапамогай strtok для ўбудавальных сістэм, так як яна змяняе першы аргумент (вялікія радкі часта могуць быць толькі для чытання). Гэта даволі просты ў выкарыстанні strchr() , strspn() або strcspn() для дасягнення тых жа мэтаў, і вы можаце кантраляваць вы змяніць зыходную радок і выкарыстоўваць паказальнік або strncpy() і нуль спыніць яго запіс, здольную памяці.

2
дададзена

Просты цыкл у той час як з масівам буфераў будзе захаваць некаторыя апрацоўкі, па наступных напрамках (не правяраючы тут няма памылкі або што-небудзь)

 pos = 0;
 while (c = get_next_char(), c != delim) { buff[BUFF_N][pos++] = c; }
 buff[BUFF_N][pos] = 0;

 pos = 0;
 while (c = get_next_char(), c != delim) { buff[BUFF_S1][pos++] = c; }
 buff[BUFF_S1][pos] = 0;

 pos = 0;
 while (c = get_next_char(), c != '\n') { buff[BUFF_S2][pos++] = c; }
 buff[BUFF_S2][pos] = 0;

які будзе умерана больш эфектыўным, што выкарыстанне strtok і STRCPY, як вы чытаеце гэтыя сімвалы ў патрэбнае месца.

2
дададзена
Мая параноя кажа, што павінна быць перапаўненне/скід лічыльніка на , а завесамі, напрыклад, { ... `калі (поз> INSANE_LENGTH) {вяртанне ERROR; }} `Ці так?
дададзена аўтар BRFennPocock, крыніца
Вось чаму я сказаў «не правяраючы тут няма памылкі»
дададзена аўтар Tom Tanner, крыніца

Просты цыкл у той час як з масівам буфераў будзе захаваць некаторыя апрацоўкі, па наступных напрамках (не правяраючы тут няма памылкі або што-небудзь)

 pos = 0;
 while (c = get_next_char(), c != delim) { buff[BUFF_N][pos++] = c; }
 buff[BUFF_N][pos] = 0;

 pos = 0;
 while (c = get_next_char(), c != delim) { buff[BUFF_S1][pos++] = c; }
 buff[BUFF_S1][pos] = 0;

 pos = 0;
 while (c = get_next_char(), c != '\n') { buff[BUFF_S2][pos++] = c; }
 buff[BUFF_S2][pos] = 0;

які будзе умерана больш эфектыўным, што выкарыстанне strtok і STRCPY, як вы чытаеце гэтыя сімвалы ў патрэбнае месца.

2
дададзена
Мая параноя кажа, што павінна быць перапаўненне/скід лічыльніка на , а завесамі, напрыклад, { ... `калі (поз> INSANE_LENGTH) {вяртанне ERROR; }} `Ці так?
дададзена аўтар BRFennPocock, крыніца
Вось чаму я сказаў «не правяраючы тут няма памылкі»
дададзена аўтар Tom Tanner, крыніца

Мяркуючы, што вы спрабуеце разабраць што-небудзь нетрывіяльнае, паглядзіце на прагінаецца і <�а HREF = "https://www.gnu.org/software/bison/manual/html_node/index.html" отн = "NOFOLLOW noreferrer"> бізон .

Існуе даволі круты крывой навучання, але яна мае два вялікіх перавагі ў параўнанні з іншымі падыходамі.

  1. Гэта можа быць зроблена, каб мець справу вельмі добра промах сфармаванага тэкстам і забяспечвае, дзе іншыя падыходы прывядуць да праблемы аварыі або бяспекі.
  2. Ён не выкарыстоўвае знешнія бібліятэкі, якія выкарыстоўваюцца такім чынам, толькі рэальна генераваны сінтаксічны аналіз кода.
1
дададзена

Мяркуючы, што вы спрабуеце разабраць што-небудзь нетрывіяльнае, паглядзіце на прагінаецца і <�а HREF = "https://www.gnu.org/software/bison/manual/html_node/index.html" отн = "NOFOLLOW noreferrer"> бізон .

Існуе даволі круты крывой навучання, але яна мае два вялікіх перавагі ў параўнанні з іншымі падыходамі.

  1. Гэта можа быць зроблена, каб мець справу вельмі добра промах сфармаванага тэкстам і забяспечвае, дзе іншыя падыходы прывядуць да праблемы аварыі або бяспекі.
  2. Ён не выкарыстоўвае знешнія бібліятэкі, якія выкарыстоўваюцца такім чынам, толькі рэальна генераваны сінтаксічны аналіз кода.
1
дададзена

Я думаю, strtok() павінна быць дастаткова. У залежнасці ад таго, наколькі абмежаваныя ваша абсталяванне, вы павінны пазбягаць STRCPY (), як вы будзеце ў канчатковым выніку трымае радок у памяці двойчы.

Выкарыстанне strtok (), каб знайсці вашыя радкі затым прысвоіць адрас паказальніка, для наступнага выкарыстання. Такім чынам, вы маеце зыходную радок, аднак доўга гэта можа быць плюс тры ці чатыры паказальнікаў, якія будуць спажываць фіксаваныя 12/16 байт.

0
дададзена

Я думаю, strtok() павінна быць дастаткова. У залежнасці ад таго, наколькі абмежаваныя ваша абсталяванне, вы павінны пазбягаць STRCPY (), як вы будзеце ў канчатковым выніку трымае радок у памяці двойчы.

Выкарыстанне strtok (), каб знайсці вашыя радкі затым прысвоіць адрас паказальніка, для наступнага выкарыстання. Такім чынам, вы маеце зыходную радок, аднак доўга гэта можа быць плюс тры ці чатыры паказальнікаў, якія будуць спажываць фіксаваныя 12/16 байт.

0
дададзена