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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构) o5 _$ n* l2 P; n" d" c
5 Q# X- H) B& d
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2566 r& v  _8 E* e
* C: r# Q7 s+ @$ U+ E
其他程序段。。。。。
! b$ c7 _! B2 x, h* Z& a8 I
0 M" V7 ~8 \3 t0 L5 Z   free(x_d);/ I! \: _/ ?* |+ n- @* t
" R. T7 u8 J# J
使用DSP侧单独调试功能,验证动态申请没有问题,
9 @; u# T8 M6 Z, B8 Q$ b7 b0 `  u# r9 @: \
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 {# _9 h" F  H. N' `# M
4 ]/ M; k- p8 J+ f7 d* g  e
, ?6 T4 h* F2 I

2 r& T9 y' }" g% G' S, l: P, _+ ]- |6 u3 Q. V
# g2 a- ~# v4 q2 |; r9 E1 f2 n
7 t* A1 ]9 |# @7 _" ^4 Y+ i% F1 Y
0 u$ X. e+ f/ U9 B, S
' N4 M0 T; p: k9 @$ P8 }0 z

5 c# I6 h+ r8 I4 Q4 l' O' T
$ z& L$ `7 Z" O* K3 ]0 K% P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明8 _$ `6 U9 J1 P; g# ^1 @
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 F$ o$ J; W1 q. w9 h(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
4 [% A* S& P2 L2 a
$ l( N6 ^7 i* r7 B( r; r8 Z! W* w- V
是不是需要在DSP.CFG中进行配置, X( Y6 P6 J$ I! c. ?4 J& u
我现在的配置为
/ q: |" T, o0 j& z9 w  s2 [% [) \% c
. g: h0 V3 e0 p. \/*' a& D, \% U" c
*  ======== Operating System Configuration ========
' N- H' @, J, o$ e5 l */
% B# T. C4 Y- }. ]' y! n6 M
/ I0 J- {; Y: S0 i2 {/* no rts heap */& Y' A( d' V6 \: [
Program.heap = 0;6 q2 V* D4 I1 ~: ]3 G
Program.argSize = 100;  /* minimum size *// M9 N5 s8 ?5 g9 N. l; q- O
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! D) {' a3 x, R) G: o! o

! q- Z$ Y# |) S8 r/* create a default heap */! s# `( y! K+ F8 ^) ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* M5 ~+ J  C1 g& z( h
var heapMemParams = new HeapMem.Params();# X, v7 ~# g! |. _& U- O
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 S& i4 Q; e2 l/ J9 _+ o' D, X) t
. Q. \1 ^, z+ i" b1 s
var Memory = xdc.useModule('xdc.runtime.Memory');
, t6 @% \5 z7 vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);6 @- r9 D% M* F, b

* }: E9 c4 z, S: O& L, a+ j" n/* configure System module */
9 h/ d  k6 F  G! G, W+ y# B5 M4 [var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 g- Z! m) D( x7 e# VSysMin.bufSize = 0x1000;
* H. F" w* C8 t% H* K  dSysMin.flushAtExit = false;8 p. E( H2 N5 e% z, J, J( J/ Q
) |5 {, S! B* Z* g. b
var System = xdc.useModule('xdc.runtime.System');  ?1 `; c* z: w7 G% k
System.SupportProxy = SysMin;
# f, I# D9 z! F7 D# s4 n6 A; Z1 ~# y& m% ?& r. t  L
/* configure SysBios to use the lower half of Timer 1 */
! ^: d& q' x$ \: e% R9 L6 F8 ]var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, O5 q3 K5 ~/ x: \9 U) J
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ K5 p2 |( j4 r! q+ Z8 @Timer.timerSettings[1].master = true;
# D4 e0 T& Q+ v( z: m; a1 HTimer.defaultHalf = Timer.Half_LOWER;
: q7 Y5 o1 g; y8 {$ C& {* vClock.timerId = 1;. v  J1 e  h" o: y2 `; C

( b! H" \, ]' j; T/ @
/ G% M7 D+ P; r+ _3 h& Y4 d5 X% n, y/*  m/ `! `7 o4 m3 g* _; ]! G$ r4 Z
*  ======== Miscellaneous Configuration ========9 L* C0 ^$ i2 D- [7 u
*/$ j0 G/ L! Y. y
+ s7 s2 x) O$ ]% t% l/ q. O
/* set default diags mask */5 V8 |5 b- k! i  ~* c2 a! s
var Diags = xdc.useModule('xdc.runtime.Diags');
$ l& n3 C$ t' h$ A1 e% Vvar Defaults = xdc.useModule('xdc.runtime.Defaults');6 [$ u; i1 W- }

1 M( N/ v3 Y' F4 o- u; P: N, q) q' [Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ I' m0 j( ~# [% Q0 g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; U& i& H* W6 \, kDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 D! d& G! B0 I) uDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 f+ w# U5 e0 M* r) C- ?& `8 X
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 d" x6 ?6 O% d; VDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 u  }9 S- G! ?+ G$ T2 t' U* T- ^
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& D( N7 O; D1 d8 S6 V! J- CDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 Y1 M2 P, [1 {) g( I- m8 T: C
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% H7 B7 a  k0 V$ R! {5 KDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  M2 n0 B6 Y7 ^1 E: S- TDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" ]6 Y7 G: T, ~4 y5 }; SDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' X; q2 L- d% K& ^' b  g) K% X
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) J1 G! I* ]" s7 r4 ]/ VDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) V8 ]. J- q( k7 u/ x& V
! x% D0 k) b; R7 y
/* override diags mask for selected modules */! Q& `* E0 h1 |; J5 @
xdc.useModule('xdc.runtime.Main');
+ j% T/ U8 L4 e9 W% ]! _0 q4 s2 Z$ tDiags.setMaskMeta(' d( Y1 b) D! ?0 |3 @3 |- K- b
    "xdc.runtime.Main",
8 o: q4 a3 b8 J$ b$ A: o: i$ p" P6 K    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ Y, K& v7 h' P
    Diags.RUNTIME_ON  v$ g: x! j' u
);5 V/ D# b2 _, J* d

$ k9 |6 a4 R* g! Ovar Registry = xdc.useModule('xdc.runtime.Registry');
9 m, ^" _* x' Y8 s7 PRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) X! h( G* z1 W4 J' a1 RRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* h7 b  X! E/ K8 f, E
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; r0 `% X% y- ~Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 J2 Y6 I; I8 n- F

& z( d9 `1 k( E, X2 r) {/* create a logger instance */9 D# r: h1 }/ y
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" y! N: |$ Y7 Y) u* r
var loggerBufP = new LoggerBuf.Params();
5 }# O3 s+ U- ~( g  B* c2 b4 WloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
$ M1 @8 ]& Q  F6 b1 H2 ^$ f" A2 F) bloggerBufP.bufType = LoggerBuf.BufType_FIXED;
. @; p2 v; R& Z1 ]  e5 |* e/ {, g% l: p- h1 \
var appLogger = LoggerBuf.create(loggerBufP);3 k1 w1 |; \  D, ~- P
appLogger.instance.name = "AppLog_Core1";
# y+ ?/ e3 T4 g: k6 NDefaults.common$.logger = appLogger;: D+ ~0 j9 P+ X
Memory.defaultHeapSize = 0x8192;   
; `- @4 x% ?6 a7 Z. M  u. K" P" NIdle.idleFxns[0] = "&LEDStatus";
6 D1 y$ m" S# e9 G: S9 q, FCache.initSize.l2Size = Cache.L2Size_32K;' f  b/ D) ?) k* S8 I  t
' {) `7 D' {  l  v+ o, M
回复 支持 反对

使用道具 举报

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 */
( ~5 ]: M8 i! [2 G3 F- ?var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- e& Z* X+ p9 \- N
var heapMemParams = new HeapMem.Params();
& c& W4 Z6 Z: z# A/ TheapMemParams.size = 0x4000;
2 e9 ~% s) W2 y' ~, r* m7 |' L! P
& n6 c7 V  R5 B* d% cvar Memory = xdc.useModule('xdc.runtime.Memory');% Y9 v" m* J* N2 h; Y5 B; P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 t& u: P( v5 z- |8 S4 `4 O' j2 |
3 u3 q# @) I- b% ]% Y
我大约calloc  每次共计大小为5K*16bits,
* l6 q8 V" v: W" b而默认配置才0x4000、需要改大。- \6 n$ h3 N6 S" L, z
: |! T8 `% Q$ |. E$ T2 P1 a
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
- ]0 @" l0 U6 T0 _# b8 i) yProgram.heap = 0;1 t, M1 d. P0 P- L5 r9 v
Program.argSize = 100;  /* minimum size */
4 x$ S$ H) e* L) r6 ]0 ?* ZProgram.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 01:15 , Processed in 0.045814 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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