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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* C. m9 T! n$ c9 X0 x! A" d' o' b4 M& n- k+ b2 c
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' g# u- l4 [0 @( X
3 N8 t3 ^+ U9 K' i3 e' V
其他程序段。。。。。3 C5 y# S. J# x/ r! H( g) {5 `

6 L! B/ Y' D2 ?7 @6 }0 M# Y   free(x_d);
/ ?% F. I7 \4 Z1 z, _- P( O9 L" t0 `, Z; |  A5 v
使用DSP侧单独调试功能,验证动态申请没有问题,8 s# ~+ r0 `; k" b, ?5 [* H! \
2 j! w8 D" R' S
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! H6 q" k* i4 R' K
# h8 P: M# h4 X1 W) [/ e3 `

7 Z% ~  a! I. ^& t, v+ V  X8 Z# M; _8 T: z
- s+ c6 z7 p, a) N! s! \# I

+ @6 P  b: }( m5 k
' b: y- N, M8 {! X
7 c; H$ y2 I0 h4 y' b8 a/ Z  s4 j& F. @0 _7 }( k& j2 @

) o) W5 Z! b6 I  S4 @5 p
! q3 H# H" d' i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% T5 j  _5 l" \: l+ {9 {- ?
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下1 }3 B( D* B! z3 `' }
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 Q" `3 |$ g6 h5 `; Y2 Q- |

# W3 w9 F! r( y1 H是不是需要在DSP.CFG中进行配置
7 ^+ |+ m* b1 n- Z我现在的配置为
6 n8 `6 Y( e6 a, ^! ?# _2 J" D
. s/ r9 B$ j1 t1 S0 u/*
0 n$ {( r6 y. g7 p; e *  ======== Operating System Configuration ========
3 s- W% S5 Z7 M' }* E- G& `! v */
, S9 _- [( L1 y: M
2 r0 S) G) W5 Q! H3 g: s: T4 @/* no rts heap */7 y4 |# y' W' |, ?1 p
Program.heap = 0;
* `+ }+ I$ ~5 l, U' TProgram.argSize = 100;  /* minimum size */
' h+ u6 i! E; w: L, Y: FProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( {0 K7 t) U$ N6 n9 D, T2 i. w
$ Z9 c4 y$ E- P1 p# Q( f
/* create a default heap */
4 R/ d# F  X' m, W! H9 S2 Yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! i9 i& S, g4 X% nvar heapMemParams = new HeapMem.Params();
) p; u, B, k! ~7 e7 z  i0 L4 [heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, s7 }* Z& ]/ c; C: k1 D4 c  B4 Q3 J9 o6 C8 P# {, v  Z* |
var Memory = xdc.useModule('xdc.runtime.Memory');
+ }% K0 o- T$ f7 m+ SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' C* ?0 N' T0 S0 X- c2 ]* o2 p5 M
6 {+ ~# R6 e0 V! Z
/* configure System module */! E; w: E+ w1 S" W" O
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" G" |3 ~0 [9 I3 s6 K" JSysMin.bufSize = 0x1000;
' G4 v0 D1 n" Y: q' SSysMin.flushAtExit = false;
8 v$ x9 n( I: D& ~: q
* C; [; p- M! l+ l% p; j: pvar System = xdc.useModule('xdc.runtime.System');
% }1 m/ h  S/ vSystem.SupportProxy = SysMin;. L5 h: O3 \0 N, v; q) u

+ K& i/ H# X# E9 U- n* G" ^( K/* configure SysBios to use the lower half of Timer 1 */1 J7 b3 S# f0 b  g2 Z8 T
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');- P1 J+ z$ J( V  W; z( x8 l# F5 k* N
var Clock = xdc.useModule('ti.sysbios.knl.Clock');! I3 v5 Q; h; s/ j; B9 A
Timer.timerSettings[1].master = true;
5 F5 n5 B2 c, |+ mTimer.defaultHalf = Timer.Half_LOWER;
$ |9 a# l/ U6 U( }. Q8 mClock.timerId = 1;
% H2 W" A2 {. Z; y5 o8 u+ }0 g) B* H6 ?; A

1 h, d4 I$ o' m( {4 T/*
1 O2 Y7 \4 q% S9 Z. W *  ======== Miscellaneous Configuration ========+ V! a3 W' ]- r
*/" f1 h! v- y& ~; y# J
/ z  O& A4 Y* Q
/* set default diags mask */1 f- G- y4 v9 m3 |: @- G
var Diags = xdc.useModule('xdc.runtime.Diags');$ L0 x+ A8 n* \0 d
var Defaults = xdc.useModule('xdc.runtime.Defaults');
# ~. l+ p# x- M7 s
! H% t% L; p9 s( U2 e9 ~# ?+ ^Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! N6 C( H% |! O5 g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 ~5 J# A/ o, ZDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 r9 _+ L# R3 s3 R
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- |/ ]* U* C( G7 q4 f  M, wDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) Z& l' F3 F- P/ d
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 e# S2 e% ]. e) N' I7 t, qDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; O$ S% f6 ^8 E0 Y4 m1 b
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
0 x/ n! ^: K; c0 y: z. m4 n$ oDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 T$ ?8 Y& Z. r% B% V7 h8 qDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& d9 G; z, W. _! i' t' d* H
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
3 S+ J+ f6 F- ]2 @0 bDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( W1 @+ {& D5 x% w( mDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- R; V1 V: m- FDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: p* c! H& j6 `/ O& m! l" r

; `5 S; S# D- e/* override diags mask for selected modules */
8 F. \4 I- i7 P* c. wxdc.useModule('xdc.runtime.Main');2 u( z& e7 B/ ], e) L" @
Diags.setMaskMeta(
; r4 c! o" E- g; ~" ?+ E    "xdc.runtime.Main",5 o3 R* k% O/ z& [2 R9 w
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* G. E+ x" X: Q    Diags.RUNTIME_ON1 L) D0 ], R2 ?* n! l$ T
);4 i) S  `/ }2 c
- [2 M( u3 Z, y( e  Z4 q
var Registry = xdc.useModule('xdc.runtime.Registry');7 N& K2 g9 H0 @6 |% {: h
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ W+ L- [( }8 l4 \/ k% E
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' L& M! J0 F! g3 F" Y/ u+ _" E# n% QRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 C( Q# Y6 K  ^$ ?& o
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;. ~; k7 V' y" [: y3 E

) l) [2 L1 U' l9 a& M5 F/* create a logger instance */
% v2 i7 I5 J4 v, Avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 {+ P% A/ Y1 M8 Z  H. g# rvar loggerBufP = new LoggerBuf.Params();/ S* X6 S% C" c  L
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 H# H: ~6 L8 E# Z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;. ~! Z- p& d( x, W7 Y. Q/ \
. |0 T6 F' R! w! J/ Q6 A+ V
var appLogger = LoggerBuf.create(loggerBufP);) a  P# a. n! Z- ~( |/ W8 T
appLogger.instance.name = "AppLog_Core1";
6 R' ]' M) O/ t0 DDefaults.common$.logger = appLogger;
) ?+ J6 _- N+ f& B- {Memory.defaultHeapSize = 0x8192;   
8 z1 S9 [$ R" {Idle.idleFxns[0] = "&LEDStatus";' y& M8 ^" r& }& y' D
Cache.initSize.l2Size = Cache.L2Size_32K;
. _% K6 E+ b7 b( A/ c
- J0 f- s6 W5 d! D5 c' K. H4 W# w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
1 X( Z4 _4 T4 {! H* gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 u  m. u" S" f: J: P7 jvar heapMemParams = new HeapMem.Params();8 D( p/ E& y5 \5 S6 _
heapMemParams.size = 0x4000;' b. m7 c: n* [/ i4 t& Y

! ^  c& f+ P4 K  b) Rvar Memory = xdc.useModule('xdc.runtime.Memory');
) R0 Q$ A; h- B! GMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
' O% K& }3 }* y* ^5 x5 a/ o% W' P7 O% H% l
我大约calloc  每次共计大小为5K*16bits,
# e3 |# ^$ J! a9 v0 T而默认配置才0x4000、需要改大。! B" m- v" `- J( E. h

8 `2 R& F: J- ^# F8 [0 T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ M6 L" |% `5 k) r
Program.heap = 0;: j$ y0 S0 z8 i) l$ ?8 d5 V; [
Program.argSize = 100;  /* minimum size */$ P* O2 ^% T: ~# x+ N& L$ v$ h
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-6 13:34 , Processed in 0.041256 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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