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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构! l" n8 o* M: d; O" A
; |1 X2 ?2 L- R; {% D- z; d6 x
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ @% C0 q. B, T& Z; I( G/ c7 v, P6 G. t1 }! m
其他程序段。。。。。+ g& C; V' f% [' q; B8 n5 X- ?& p

# i2 H( h7 P/ P9 e" c8 n   free(x_d);
- A% c/ n7 I0 d( R/ q- A0 Z
) @$ Q0 x% w1 A8 B( }+ @1 Z使用DSP侧单独调试功能,验证动态申请没有问题,
2 U* G: c6 x  P" X) A
3 L$ C1 n: j1 N0 h& g8 e: t+ |6 d% ~) r但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; Q+ T( h8 |; V2 A2 W4 H
5 O$ r' D9 n) w1 m6 ~5 v; ^& C

6 G$ A, p1 ~5 C' n4 `, W$ @9 _9 q- `0 K  M" k& Z  L

( d5 G5 C' {, w
9 _' f- o6 M( \" C4 g6 O+ o8 r" T: j: [# T, g( I) p3 T

; r, ]6 e4 w2 H( [  K8 r4 d% G
1 X* k; ?" _7 O! e
, J  u+ r1 j' N6 C9 ]7 `
( L/ @, c9 [* I2 y" E5 V
分享到:  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 */
7 R8 F/ B  i8 v0 [$ u% MProgram.heap = 0;
/ S# g! f- ]$ h; s, O4 m" ^5 Q5 PProgram.argSize = 100;  /* minimum size */
8 z! W! e- C2 w( N0 A9 X0 RProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
# y$ f. t5 v2 S- |  B7 ~+ ~var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 `! Q+ `3 a+ c! e0 U
var heapMemParams = new HeapMem.Params();
; h3 w# X+ b8 N. u" m: u2 [3 qheapMemParams.size = 0x4000;& Z  L# k( @' F$ l3 k
- A8 V& F. q9 x' S6 g5 i: ]
var Memory = xdc.useModule('xdc.runtime.Memory');4 Q$ C8 r6 C7 y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- G; p& ?, O4 W8 p8 {
+ f' h1 X# y+ {& K- |
我大约calloc  每次共计大小为5K*16bits,: S% I+ ]% q8 k& o
而默认配置才0x4000、需要改大。, X, y7 \- w3 J- D( L* a8 Z+ z

& B$ B; |/ d0 g' n3 }1 Z
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明1 F* B$ ^) s$ c7 {. X: E# q# }
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! r" O& A- k: {
(不过疑惑的是,为何单独DSP仿真就没有问题呢?); D" ~2 K8 Y. Z# F6 r

( P$ x; g. K7 A0 ?% S5 C  o是不是需要在DSP.CFG中进行配置% R& i- ]3 D% U7 ?8 x
我现在的配置为
" D- o* o/ c8 e# @" O& o& N0 H5 n3 z
4 g: o9 @8 t5 U/*
+ R0 q; |7 L: u# ]# z  t/ K0 E *  ======== Operating System Configuration ========
& G' d5 ~) Z# E4 i5 b: ~  D- ~ */! Y$ M6 A# w# O# T( F

4 K5 v4 E0 |6 j0 u5 _: e- q/* no rts heap */
3 N7 a; y! q: IProgram.heap = 0;4 x$ O& Q' }* u6 F
Program.argSize = 100;  /* minimum size */. \4 E, n7 |% k1 s& N3 ?
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
+ c0 F; V1 j& ?
: C9 i5 Z# ], w4 I' k9 z7 V4 w5 Y/* create a default heap */
% {9 }/ a- I) `: `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( }# H9 Y7 T( I' E
var heapMemParams = new HeapMem.Params();
: m3 f/ b# i6 n# qheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* V9 z; s% T) T6 w* w: k7 o$ z, n
  E; K4 f8 _0 H: i! [* F7 [( k3 b
var Memory = xdc.useModule('xdc.runtime.Memory');
( s$ B6 e( X) `; M% z6 c% }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 d1 v4 c9 D# l( V0 Y4 Q; a8 t- Z& O- N: [
/* configure System module */1 v( t7 K6 {8 Y7 C2 K) _
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 l; O; j9 f& Q( Q8 m4 v8 u% v* d: f
SysMin.bufSize = 0x1000;
1 o1 M9 M* n+ j0 E/ rSysMin.flushAtExit = false;
  O. z9 q/ F0 e. }' [
/ ~; u! C0 C, W5 |/ _var System = xdc.useModule('xdc.runtime.System');$ V4 v/ s# e: E' b0 `
System.SupportProxy = SysMin;. A; @2 J8 o  t, B

0 U2 D4 ]2 E9 c& l; G9 A/* configure SysBios to use the lower half of Timer 1 */
( l! x& V3 s: ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( c( T& c9 k" v# R8 a# L
var Clock = xdc.useModule('ti.sysbios.knl.Clock');9 @. i) ^3 A; l! l
Timer.timerSettings[1].master = true;
2 S% k4 P: R4 K1 eTimer.defaultHalf = Timer.Half_LOWER;  h+ G7 p$ i: V0 h6 |5 \! U( P
Clock.timerId = 1;
" m- k1 Q. ?' N  N
" r5 a  E( v) V' L' v' Z# p  E
$ v* f3 u1 ?, l3 D/*) f: M/ F# D. l  W; Z2 F3 @
*  ======== Miscellaneous Configuration ========
/ `6 @! o& @4 o. ^* F */
5 O; {$ N( T+ a& \1 h" R5 I3 \: p1 H2 x+ ^; G# r3 a% {5 z
/* set default diags mask */
" [$ I8 ^8 k! Q4 uvar Diags = xdc.useModule('xdc.runtime.Diags');
1 v- R9 B' d3 ovar Defaults = xdc.useModule('xdc.runtime.Defaults');1 ?7 [& e+ Y$ g" e- N  N
! E/ u, y- [, G" `
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 o/ u: q8 E( Z8 Y! Z" m9 tDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 g- C! M) j# v$ mDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;) ~8 I* W% @- c9 e5 V* ?
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 V& R& k8 q6 c9 i/ e6 l4 L, ]- r
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# I3 C% D2 m. v/ J1 X- K- F
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" Z+ ^( Z4 c; t: n
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;* o% S4 L0 A  I3 C1 ^
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! W2 M# r% f3 |# n2 F. `
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  Y- D8 x9 s; c: {8 p' ?Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* o; D: ?2 d9 F2 D3 j6 U; ~2 |1 BDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;+ [4 E1 g3 F7 D4 b. l
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 f8 e8 u- }% |# X
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 e- T, \. Q" F; ?7 eDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ T) X4 ~# M& i7 o, K
6 q! `1 a* {( r, s1 [
/* override diags mask for selected modules */
8 z7 }6 I% H2 q" a0 P3 q# H9 i7 _2 Nxdc.useModule('xdc.runtime.Main');
6 H# }& E/ B7 l! I6 i, M7 zDiags.setMaskMeta(/ J& `9 O) }7 [8 P
    "xdc.runtime.Main",& A+ Z4 n/ \0 Q# J" K6 W
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
4 K6 r1 m, v4 e+ U6 d    Diags.RUNTIME_ON- z3 G) I( p7 J) l+ c+ x8 |
);1 k. ^  \" n# j: V1 h* G7 p
) }2 a* X9 n3 l+ @, L% Q, m3 i" D) I
var Registry = xdc.useModule('xdc.runtime.Registry');& J1 J7 ]( Y$ J) @/ K; u
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% f) z7 Q* S, K! N! D+ s) DRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;' ^1 v4 w& @* ]6 R. w' F) c
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
  i( Q) J' ?' n" o0 `) jRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: B! a, B1 _) f
: D3 m& |4 w$ L2 e
/* create a logger instance */. \* B0 W; L3 S! q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 C* h) M' ]% ], c6 m. vvar loggerBufP = new LoggerBuf.Params();
$ ^: W% v6 l7 [: W. l" uloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 h" U. l( j8 I8 y3 }* T
loggerBufP.bufType = LoggerBuf.BufType_FIXED;; v5 g" u8 V/ a8 x, b+ g
! W3 g% l+ a* e9 }+ k5 a- b  b6 H
var appLogger = LoggerBuf.create(loggerBufP);/ P2 a6 u4 H: v
appLogger.instance.name = "AppLog_Core1";
( _) ]8 @5 ^9 v4 `7 s% Z- NDefaults.common$.logger = appLogger;: A' t  \- U) H% u& q2 ]
Memory.defaultHeapSize = 0x8192;   
- r: r( w- Z9 U& t7 [Idle.idleFxns[0] = "&LEDStatus";
& ]  i4 J6 \* ZCache.initSize.l2Size = Cache.L2Size_32K;. s  q& e; {4 s# F
3 L/ F/ R; E5 f
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-23 13:00 , Processed in 0.072891 second(s), 36 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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