TOPPERS「活用アイデア」・「アプリケーション開発」コンテスト
は、2011年から毎年実施されています。
https://www.toppers.jp/contest.html
「アプケーション開発」は、ソースコードの公開を前提としています。
「活用アイデア」でも、その後実現したソースコードなどもある。探しながら紹介。
なお、この記事は、TOPPERSプロジェクトの公式見解ではなく、
小川清 の 技術者個人の考えに基づいています。
目的(purpose)
TOPPERS開発アイデア・アプリケーション開発コンテスト受賞作品には、良質な算譜、技術的に崇高な志向、目的を達成するための意思などが感じられる。広く、source codeを表示して紹介し、次の応募作品を促す。
#成果(outcome)
応募作品の算譜を眺めると、その技術者の得意分野や技法を感じることができる。応募作品のソースコードを使ってみようという気になる。ソースコードを一度コンパイルしたくなる。自分も良い作品を作ろうという気になる。
TOPPERS活用アイデア・アプリケーション開発コンテスト受賞作品紹介(4) 第三回アプリケーション開発部門(2013)銅賞
lwIP の移植 松浦 光洋(個人)
応募資料(application material)等
コンテスト応募資料
https://www.toppers.jp/docs/contest/2013/matsuura.pdf
ET2013発表資料
https://www.toppers.jp/docs/contest/2013/mmatsu_presen_2013.pdf
###Download
ソースコード
https://www.toppers.jp/docs/contest/2013/matsuura_src.zip
関連資料(related URL)
lwip移植の内容:書籍に収録
「全部ネット接続!Ethernetマイコン・プログラミング」
http://shop.cqpub.co.jp/hanbai/books/49/49791.html
lwIPをTOPPERS/ASPに移植: 松浦光洋の研究開発
http://matuura.cocolog-nifty.com/blog/2013/11/lwiptoppersasp-.html
STM32F429ボードにLWIP
http://matuura.cocolog-nifty.com/blog/2013/01/lwip-cdbb.html
算譜(source code)
#include <string.h>
#include <kernel.h>
#include "kernel_cfg.h"
#if 1
#include "debug.h"
#else
#ifdef USE_DEBUG_PRINTF
#undef USE_DEBUG_PRINTF
#endif
#define printf(...)
#endif
#include "arch/sys_arch.h"
#include "lwip/opt.h"
#include "lwip/debug.h"
#include "lwip/def.h"
#include "lwip/sys.h"
#include "lwip/mem.h"
#include "lwip/stats.h"
void sys_init(void)
{
return;
}
err_t sys_sem_new(sys_sem_t *sem, u8_t count)
{
err_t ret = ERR_VAL;
printf("sys_sem_new in\n");
if(NULL != sem)
{
T_CSEM csem = { TA_TPRI, (uint_t)count, (uint_t)1 };
ID id = acre_sem(&csem);
if(0 < id)
{
*sem = id;
ret = ERR_OK;
printf("sys_sem_new out %d, %d\n", *sem, count);
}
else
{
*sem = (sys_sem_t)NULL;
printf("sys_sem_new out ERROR!\n");
}
}
return ret;
}
void sys_sem_free(sys_sem_t *sem)
{
printf("sys_sem_free in %d\n", *sem);
del_sem(*sem);
*sem = (sys_sem_t)NULL;
printf("sys_sem_free out\n");
return;
}
void sys_sem_signal(sys_sem_t *sem)
{
printf("sys_sem_signal in %d\n", *sem);
sig_sem(*sem);
printf("sys_sem_signal out %d\n", *sem);
return;
}
u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
{
SYSTIM systim0, systim1;
ER ercd;
get_tim(&systim0);
printf("sys_arch_sem_wait in %d\n", *sem);
if(timeout)
{
ercd = twai_sem(*sem, (TMO)timeout);
}
else
{
ercd = wai_sem(*sem);
}
if(E_OK == ercd)
{
get_tim(&systim1);
printf("sys_arch_sem_wait out %d, E_OK\n", *sem);
return (u32_t)(systim1 - systim0);
}
printf("sys_arch_sem_wait out %d, SYS_ARCH_TIMEOUT\n", *sem);
return SYS_ARCH_TIMEOUT;
}
err_t sys_mbox_new(sys_mbox_t *mbox, int size)
{
err_t ret = ERR_VAL;
printf("sys_mbox_new in\n");
if(NULL != mbox)
{
T_CDTQ cdtq = { TA_NULL, (uint_t)size, (void *)NULL };
ID id = acre_dtq(&cdtq);
if(0 < id)
{
*mbox = id;
ret = ERR_OK;
printf("sys_mbox_new out %d, %d\n", *mbox, size);
}
else
{
*mbox = (sys_mbox_t)NULL;
printf("sys_mbox_new out ERROR!\n");
}
}
return ret;
}
void sys_mbox_free(sys_mbox_t *mbox)
{
printf("sys_mbox_free in %d\n", *mbox);
del_dtq(*mbox);
*mbox = (sys_mbox_t)NULL;
printf("sys_mbox_free out\n");
return;
}
void sys_mbox_post(sys_mbox_t *mbox, void *msg)
{
printf("sys_mbox_post in %d, 0x%08x\n", *mbox, msg);
snd_dtq(*mbox, (intptr_t)msg);
printf("sys_mbox_post out %d, 0x%08x\n", *mbox, msg);
return;
}
err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg)
{
err_t ret = ERR_VAL;
printf("sys_mbox_trypost in %d, 0x%08x\n", *mbox, msg);
if(E_OK == psnd_dtq(*mbox, (intptr_t)msg))
{
ret = ERR_OK;
}
printf("sys_mbox_trypost out %d, 0x%08x %d\n", *mbox, msg, ret);
return ret;
}
u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout)
{
SYSTIM systim0, systim1;
ER ercd;
get_tim(&systim0);
printf("sys_arch_mbox_fetch in %d\n", *mbox);
if(timeout)
{
ercd = trcv_dtq(*mbox, (intptr_t *)msg, timeout);
}
else
{
ercd = rcv_dtq(*mbox, (intptr_t*)msg);
}
if(E_OK == ercd)
{
get_tim(&systim1);
printf("sys_arch_mbox_fetch out %d, E_OK\n", *mbox);
return (u32_t)(systim1 - systim0);
}
printf("sys_arch_mbox_fetch out %d, SYS_ARCH_TIMEOUT\n", *mbox);
return SYS_ARCH_TIMEOUT;
}
u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg)
{
printf("sys_arch_mbox_tryfetch in %d\n", *mbox);
if(E_OK == prcv_dtq(*mbox, (intptr_t *)msg))
{
printf("sys_arch_mbox_tryfetch out %d, 0x%08x, ERR_OK\n", *mbox, *msg);
return (u32_t)ERR_OK;
}
printf("sys_arch_mbox_tryfetch out %d, SYS_MBOX_EMPTY\n", *mbox);
return SYS_MBOX_EMPTY;
}
sys_thread_t sys_thread_new(const char *name, void(*thread)(void *), void *arg, int stacksize, int prio)
{
printf("sys_thread_new in\n");
T_CTSK ctsk = { TA_ACT, (intptr_t)arg, (TASK)thread, (PRI)prio, (SIZE)stacksize, (STK_T *)NULL };
ID id = acre_tsk(&ctsk);
printf("sys_thread_new %s, %d, %d, %d\n", name, stacksize, prio, id);
return (sys_thread_t)id;
}
sys_prot_t sys_arch_protect(void)
{
bool_t state = sns_loc();
if(!state)
{
loc_cpu();
}
return (sys_prot_t)(~state);
}
void sys_arch_unprotect(sys_prot_t pval)
{
if(pval)
{
unl_cpu();
}
return;
}
u32_t sys_now(void)
{
SYSTIM systim;
get_tim(&systim);
return (u32_t)systim;
}
最新のソフトウェアへの対応には、上記書籍が参考になる。
参考資料(reference)
TOPPERS活用アイデア・アプリケーション開発コンテストを振り返る
https://researchmap.jp/joxkbxlck-1778110/
「応募すると何が嬉しい」TOPPERS活用アイデア・ アプリケーション開発コンテスト
https://www.slideshare.net/kaizenjapan/ss-78528931
「TOPPERS活用アイデア・アプリケーション開発コンテスト」への道
https://researchmap.jp/jovr40j3b-1778110/?block_id=1778110&active_action=journal_view_main_detail&post_id=38687&comment_flag=1
文書履歴(document history)
ver. 0.10 初稿 20180620
最後までおよみいただきありがとうございました。
いいね 💚、フォローをお願いします。
Thank you very much for reading to the last sentence.
Please press the like icon 💚 and follow me for your happy life.