关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7565|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 s2 _8 M' X4 @& |# k6 a* f7 q$ F* B4 ?8 N/ @& [, R
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' I/ M0 S( _- {( C. j' \7 o  q

+ ~1 @; a2 @# Z8 \其他程序段。。。。。
3 e, A% g6 m' @" i$ s* a 1 |/ A2 w1 h! Q: F  q& a$ v% }
   free(x_d);
. z: t' F- U! O: C1 M6 H% G0 C! M: K" J) Y9 I' |  s
使用DSP侧单独调试功能,验证动态申请没有问题,
! b" @, }. Q5 C1 n1 N4 L5 r/ m; i) s8 ]+ T
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& i% ~5 L: R, {" I

. W% z- q' ~5 z8 y9 ~9 q7 A" m: I- \5 X; s, g3 o9 D# n3 Y' ?

* N7 Z# `  ~6 d' t9 j0 K5 a' @5 G& S+ \9 P% m8 b" `: |) ?
0 g) _. j' b: u  ~6 _
3 u( V) k2 h8 e( l3 I
3 D+ y: Y7 ~) l% N2 H0 B! A
4 @9 ~  S  |6 K' u/ b6 N: n7 _

7 [! V) K6 R: L9 j8 l$ L) r6 q
' S' x1 W9 ?& s6 i5 M% B0 ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: ^. x4 f5 u0 e7 S" R3 L. t1 s
Program.heap = 0;
9 o% w# R4 `. p2 O4 m0 X) ^! vProgram.argSize = 100;  /* minimum size */
- s% F# ^5 j6 Y; y$ [6 E. ZProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap *// f. v2 Y* [3 h& J& f" p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 F. T; p; L6 L! S. @
var heapMemParams = new HeapMem.Params();2 k3 C2 ?2 v. T( U  Z. g9 o, e
heapMemParams.size = 0x4000;
8 q- f" A, B4 H7 B: b( s2 A) D# N7 Y1 z$ R. ?
var Memory = xdc.useModule('xdc.runtime.Memory');- P7 e6 D2 K7 p) z4 y/ Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; \( |% k% M& A2 J; u  g/ _: n
: i* L2 N/ P7 ^  w5 i" o: ^! R
我大约calloc  每次共计大小为5K*16bits,
. P5 X6 K! N1 q6 `+ ]. D$ P3 V而默认配置才0x4000、需要改大。; n* h( Q9 v1 d0 |$ N# G8 a9 T$ Y# k

0 h( R6 t% m! F* s4 `5 R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 W' V8 S( ]0 b' |) k# }' ^我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  Q" `6 r- U' y6 n: G
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# w6 i1 r$ l) T4 y$ [0 ?: |( h2 T

; R3 m2 {( d0 n+ ~是不是需要在DSP.CFG中进行配置7 g$ V! u& |0 k# b
我现在的配置为& t" ^9 M. f8 Y/ j  V3 @4 k
/ ~  Q- C* V% ]
/*5 Y7 m- D0 w8 R- Z; e
*  ======== Operating System Configuration ========" o. V, s2 ~2 y1 v% W5 b
*/
6 A# E1 T* \. }$ g/ W; s+ V, g# z  T) z0 [1 j0 D% p* S
/* no rts heap */
' A6 A  X) \6 uProgram.heap = 0;% z6 x% [, Q' X7 B- h) p3 I/ I1 S2 h
Program.argSize = 100;  /* minimum size */
" _5 F7 |2 ^( EProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! p' h+ c( v( a6 C. z( w+ ^; I
% C4 u1 l$ p" E( L6 i
/* create a default heap */
8 B" _* D5 z8 Y5 y/ gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" a$ i" M8 h: x, C5 f
var heapMemParams = new HeapMem.Params();
8 J0 U! s; q% |0 I' hheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' I% e, ^7 b8 `/ {5 i) L

* i  l# n& ^3 @2 S( z3 k# k
var Memory = xdc.useModule('xdc.runtime.Memory');
7 Y  b& o  Z5 E1 n& E! B3 a3 ?) PMemory.defaultHeapInstance = HeapMem.create(heapMemParams);- c9 C5 G+ V3 S' }* h

  ~. B0 e/ O& ~" y/* configure System module */) D  U# s+ f  h  f2 I# u* F
var SysMin = xdc.useModule('xdc.runtime.SysMin');0 B" g3 y" @. _: T3 x3 H- l/ D
SysMin.bufSize = 0x1000;
) a' D/ G) _! xSysMin.flushAtExit = false;
. L8 ?: m$ S* L+ x7 j. L; m6 D1 t. H2 `5 @% b% F
var System = xdc.useModule('xdc.runtime.System');  S# r* i" M- O8 E3 l
System.SupportProxy = SysMin;7 i- l, B6 x# H1 T0 p7 z4 ^

9 W$ T; S, G4 V2 y% e( g. u' K8 q/* configure SysBios to use the lower half of Timer 1 */
$ V8 h, A- q/ u5 O$ S) A: avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');7 W. l+ G: t4 t/ }3 M
var Clock = xdc.useModule('ti.sysbios.knl.Clock');( b7 [' @+ l  W) o9 f
Timer.timerSettings[1].master = true;. O) U" _4 N4 h$ g! f% [
Timer.defaultHalf = Timer.Half_LOWER;
7 y: Q& f' U+ j5 {. R* @* nClock.timerId = 1;
5 H2 Y7 s" k% f0 C! C
1 C# t) c$ Y1 i; o8 U0 e5 j+ N  s2 t" Z* |
/*
0 }) [8 U# q( V! i) o. V *  ======== Miscellaneous Configuration ========
: D1 R; `3 u8 g7 |1 J! j */
. ^  K7 K6 D  S7 p
; |, Z" V1 w  w9 f" ?5 R/* set default diags mask */- ?1 ^5 A0 p+ M( A3 K
var Diags = xdc.useModule('xdc.runtime.Diags');" M& K) z& @' v' \2 w
var Defaults = xdc.useModule('xdc.runtime.Defaults');
! Z( B8 o: q2 b$ C
: H$ U3 O- F; B9 M7 n$ _; RDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 k8 X: c0 y: W6 E# Q* Z/ nDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; P$ f' x) ]$ O# x' VDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* m+ w! c- K+ |, N
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  c$ [/ s& ]! l$ Q+ Q" z7 p% L8 FDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! J( R# D' U% e3 E4 c) tDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) F* P( @' P: n! n0 v( D- PDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 m7 u$ v9 \! MDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 u# Q3 e- z/ a7 f' z/ `3 S
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! `1 b6 G/ w2 M; w9 |$ VDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;, L  ]% H% i# d4 m$ F# U& q) K
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;2 i$ j" l( Z3 R3 ?  F
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- {! e% f4 }' x; ?8 w$ Q9 q
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 V9 ?1 \# u* X# Z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 z3 |2 _! N% O' w5 U
2 b; t, E% Q$ w# Z
/* override diags mask for selected modules */
/ y4 }3 P! b8 X5 w' hxdc.useModule('xdc.runtime.Main');0 e: ?9 m6 u" N- t$ ^; B
Diags.setMaskMeta(1 |7 A$ j: O/ ^: u/ p% H8 N6 r
    "xdc.runtime.Main",0 f: K) S( `) l; v- V( l
    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 o) u  S9 B& T3 ?% H
    Diags.RUNTIME_ON
& x4 u# ~: q3 u8 A4 D);
9 \9 A( ]% c5 ~3 j3 r4 U6 y" j* e! ?
" u5 x  q: D1 Z: |0 m) kvar Registry = xdc.useModule('xdc.runtime.Registry');- P! k. `- P7 g" T& r
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) e" L; u9 w6 O4 L
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. b/ b' s# q$ N0 k/ t2 p
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 L5 I1 h1 ^! R0 ]( C  gRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 }+ e) X/ Y# y* }8 F( k
6 C) L, p3 d7 h9 _8 v! y
/* create a logger instance */
1 T! d$ ~% \% y: R+ k0 @var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' g3 U3 m- I0 O
var loggerBufP = new LoggerBuf.Params();( V" {& M' k7 j1 J) J" K8 P" Z3 L" B
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) t6 v) S3 w# K- q7 v
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
, [4 b* z/ C) E( r  W' u9 [% J3 b  a0 p4 G( t- m
var appLogger = LoggerBuf.create(loggerBufP);
. c, v. o+ {: T, E* uappLogger.instance.name = "AppLog_Core1";2 _  |% C+ o: x. Q
Defaults.common$.logger = appLogger;( t: k$ z# r6 X/ O2 i' B  R5 E
Memory.defaultHeapSize = 0x8192;   
$ y2 e. s6 y1 f* U* s, b& I$ vIdle.idleFxns[0] = "&LEDStatus";
& v3 s9 Q' B3 Z# N. @Cache.initSize.l2Size = Cache.L2Size_32K;9 Z- ^0 q4 r* T2 G* u

( D2 m9 N! l: u. d
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-5 20:11 , Processed in 0.042218 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表