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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 A) V0 _1 I* \$ i  E8 Z+ x; G! t1 `& t" y# ~
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& C* c$ E2 T  E  ?, c( d$ `' z; }9 i8 C" M
其他程序段。。。。。, {: S! U; {3 ]; _& h$ @9 `- V
6 M) L1 t. h( ^9 X  |
   free(x_d);
& Q7 U4 ?% U) \) J0 _& R2 q( ~! ^  f1 ^0 w4 D9 ], U; [
使用DSP侧单独调试功能,验证动态申请没有问题,
" v8 |8 E, \: B" \, V8 y" ^" e8 l+ G0 O) S+ Q9 I
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 c  i; c- o4 d3 W6 @7 W
4 @8 m8 }7 ^8 @

, P0 S9 L0 Y6 [) N
: y- U. K, ~3 l, D" e
& f) i/ d8 v- @
; H+ R& }/ L3 l: [) q
  L0 i4 w% Y. l+ V! {! J
5 t9 m0 L5 E7 _& K7 {
: k4 K0 v9 U/ y. {5 q  P1 T( W0 G; q
; a- a' z0 T* |8 E, N) |: y3 H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明& `- P) C( `) R9 f$ s2 U4 P5 |. R
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- R6 R3 b* V& [1 |8 z( a6 q) m$ ~(不过疑惑的是,为何单独DSP仿真就没有问题呢?); E( n$ a( c) T/ X, k7 y

8 Z2 S# h) ]7 E! F' Y0 H8 a是不是需要在DSP.CFG中进行配置
/ X& K+ q' @7 o: Y我现在的配置为2 Q3 \8 E% @) x+ `& b

9 T  N2 k; x: A/ ]  n5 ~/*/ q% t$ x' _. f8 j6 p
*  ======== Operating System Configuration ========" Q$ F# C* v8 Z& V/ k
*/( l% L# B" w4 P1 r7 z. x
, B8 r4 O/ k# e$ {# ~) [
/* no rts heap */. e9 P+ C. t) n2 V+ \8 g7 O' f8 ~5 \9 j
Program.heap = 0;
# o6 v8 K/ W7 n, ?; |Program.argSize = 100;  /* minimum size */9 j; ~! z8 O5 G
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- ^; J9 [3 i  T
, j/ a" {/ ]9 e: N9 L. k
/* create a default heap */
1 C* a0 s6 i! Z+ ^2 e2 D0 Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 G; T' d& ~. S( L( z2 e; ~' r$ Y
var heapMemParams = new HeapMem.Params();; n1 p; S+ l5 i+ B1 c
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( O: h6 O; U* D) B+ X9 }9 k
! M) @; _% v& B3 c$ _
var Memory = xdc.useModule('xdc.runtime.Memory');
6 V+ y( Z* E3 p0 n$ \/ eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ }9 `; m, }0 L, {: p5 A$ F, q% m" h1 ]( G% x3 C& P
/* configure System module */  j! b: h6 l, U2 }1 P. ^
var SysMin = xdc.useModule('xdc.runtime.SysMin');9 N' u  m$ d5 ^2 Z( s
SysMin.bufSize = 0x1000;' s6 i( W: K9 ?, c+ @
SysMin.flushAtExit = false;, [5 J3 J# i5 f! k+ G# [

0 O* b- D7 L& v2 Ivar System = xdc.useModule('xdc.runtime.System');
# r! y- l0 I5 S' o  J' DSystem.SupportProxy = SysMin;
" z3 _( K8 l) j) a) Z8 w
" l) A: }) s, ?( j  n/ E( ^/* configure SysBios to use the lower half of Timer 1 */: o& R% v, T$ u
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& T( ~: a- |, Q! fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
, s6 t6 P6 Q1 Q1 j" QTimer.timerSettings[1].master = true;
8 M3 T3 ^' s4 n% j* y( R4 ATimer.defaultHalf = Timer.Half_LOWER;# C' z7 m+ w1 A: r
Clock.timerId = 1;# R& \9 O- f# [# ?

6 j7 j, ]; f+ i7 l& h- V0 U/ L0 i
# Q! a" M7 C, M! E8 j1 p/*$ e5 P3 ~: ^& P9 I2 Y
*  ======== Miscellaneous Configuration ========
; M6 M4 r7 U  n- T! x4 I- i: I */
6 P! [+ f8 Q3 H; V. l, {5 y
# V) e- o6 C& e5 V" x/* set default diags mask */+ V( q" O5 x' V
var Diags = xdc.useModule('xdc.runtime.Diags');5 t3 U! Q! f3 w4 C) o# `* m! w6 w) O
var Defaults = xdc.useModule('xdc.runtime.Defaults');( I" j! ?0 u  p5 w7 R
+ i6 n9 i5 X9 Z
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" J2 I8 q1 a" p: y! g  V
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 v* h- \: A3 l0 KDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! Y: w% y- Y7 V, I! m9 \* ZDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* J" W* Y: W# _; [, a+ d5 b. x
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 h- P. N  g+ k3 Q/ i5 ^
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% x8 Y1 }4 c, {1 |1 YDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" u4 s  i; Q$ u) v3 ]; BDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 G+ V. q/ h- c( c2 I6 l7 }Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) ~) {5 {- ?' g  bDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% n; o% j+ d+ N! z% [. y8 F, E* LDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
/ B) o# @& G5 D* K- aDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: L+ z: B. a, JDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ |/ _: `0 C! a# j7 QDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: d: ^8 x- F; G* L0 Q
7 h; [/ v$ Z' @: ^! m/* override diags mask for selected modules */3 s  L$ u4 [8 G* o. E) {7 a0 J7 `
xdc.useModule('xdc.runtime.Main');
4 d# t- l$ _, _Diags.setMaskMeta(: a# w2 w; h9 h" ~5 c
    "xdc.runtime.Main",
1 \( w  D' r. g    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ h1 F- l7 @2 }% T4 L7 J* V( F: a
    Diags.RUNTIME_ON  @- N0 a8 @  q
);
7 @. x- x9 ]0 T8 V0 q" J
, n. s& o+ R  v2 G0 k' cvar Registry = xdc.useModule('xdc.runtime.Registry');( ?" |# ?. M' m8 g+ D$ g4 X2 }
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; \4 r- k2 B# Z% Q- q& f7 CRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 `# O3 z8 u( B7 @0 kRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;, f- K. _2 j; R& V3 ^+ J
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ ?; f- h5 {" H% z# H4 V, ?0 w: U) b  l+ R
/* create a logger instance */8 f& M- P' r2 Y
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 Q. p  x3 E3 G  Avar loggerBufP = new LoggerBuf.Params();
: Y' ~- J, n- Z8 cloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% c# V& O3 W% mloggerBufP.bufType = LoggerBuf.BufType_FIXED;/ f/ _) {0 D3 y8 _! Q) Z
8 C) `. U4 m2 T* i! v0 ~
var appLogger = LoggerBuf.create(loggerBufP);5 D4 b- A! b! \8 ?2 m' Y
appLogger.instance.name = "AppLog_Core1";
% q& ^" [2 \( ^9 `3 W4 PDefaults.common$.logger = appLogger;! x# \7 x% s, |- k/ V
Memory.defaultHeapSize = 0x8192;    ' {; L' j) q8 P' {, ?6 u$ b  ?
Idle.idleFxns[0] = "&LEDStatus";
" Y# E. Y) q4 RCache.initSize.l2Size = Cache.L2Size_32K;$ l6 Q! _& V2 `0 y# V. D' N

# V, p% v# W" [6 ?) k% s
回复 支持 反对

使用道具 举报

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 */
8 A8 T6 r* M. p' cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ j  m# x) Z: \' V( U% v
var heapMemParams = new HeapMem.Params();4 ^* z' x1 A& b5 a% W$ A2 ^
heapMemParams.size = 0x4000;8 @9 x$ r7 c( `; S: d. }

: l% X9 H6 d" M3 e8 ?, hvar Memory = xdc.useModule('xdc.runtime.Memory');
$ k! a  n! ~; C9 G: {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: {& F. C$ a, @6 y& Z% I. S" e" c# i  c* C. m& \# r. [
我大约calloc  每次共计大小为5K*16bits,
1 N# r- _4 A+ c而默认配置才0x4000、需要改大。) s7 x) p7 h$ W2 k

, x2 M3 i8 {4 Q2 C8 a
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* c  @, w/ l' p+ f- V% u0 vProgram.heap = 0;; m, q6 `: O2 ^- L  w/ S
Program.argSize = 100;  /* minimum size */
9 u0 G+ v' T3 uProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-7 07:25 , Processed in 0.046023 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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