From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4602 invoked by alias); 11 Oct 2013 21:48:51 -0000 Mailing-List: contact ecos-discuss-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: ecos-discuss-owner@ecos.sourceware.org Received: (qmail 4586 invoked by uid 89); 11 Oct 2013 21:48:50 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 X-HELO: plane.gmane.org Received: from plane.gmane.org (HELO plane.gmane.org) (80.91.229.3) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Fri, 11 Oct 2013 21:48:49 +0000 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1VUkZg-0004rI-90 for ecos-discuss@ecos.sourceware.org; Fri, 11 Oct 2013 23:48:44 +0200 Received: from dsl.comtrol.com ([64.122.56.22]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Fri, 11 Oct 2013 23:48:44 +0200 Received: from grant.b.edwards by dsl.comtrol.com with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Fri, 11 Oct 2013 23:48:44 +0200 To: ecos-discuss@ecos.sourceware.org From: Grant Edwards Date: Fri, 11 Oct 2013 21:48:00 -0000 Message-ID: User-Agent: slrn/1.0.1 (Linux) X-IsSubscribed: yes Subject: [ECOS] Question about CYG_HAL_TABLE usage X-SW-Source: 2013-10/txt/msg00006.txt.bz2 I'm working with an app that uses the CYG_HAL_TABLE macros for seveal different purposes. I've always thought that the "END" label was at the end of the "array" of objects, such that you can iterate a table like this: for (p = __foo_TAB__; p < __foo_TAB_END__; ++p) { // process object pointed to by p } But this seems not to be the case. At least for Cortex M3 targets The END label is aligned on an 8-byte boundary so that there may be up to 7 bytes of padding between the end of the table and the END label. This means that * If you use HAL_TABLE macros for objects smaller than 8 bytes, you have no way of knowing where the table actually ends. * If object size isn't a mulitple of 8, the last iteration in the loop above points to garbage. Am I understanding this correctly? Are there asserts that will detect an attempt to use a HAL_TABLE with objects < 8 bytes long? If I do understand the implementation, then the loop needs to be for (p = __foo_TAB__; p+1 <= __foo_TAB_END__; ++p) { // process object pointed to by p } But again, that requires that object size be >= 8 bytes. -- Grant Edwards grant.b.edwards Yow! Am I accompanied by a at PARENT or GUARDIAN? gmail.com -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss