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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) i- W2 I) [$ Q9 X2 Y$ R% O' u3 {9 B" ?
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) d/ G6 w$ {8 ?& w# M; H: |7 k% c

4 w4 y1 S1 e$ V8 J9 a6 R6 C4 q% c其他程序段。。。。。
3 L2 @: i' e1 v  m2 o7 N
- T. B* O2 i" R  Q; [   free(x_d);
& a% F- h1 X# Q5 p4 P" G6 m
; r# H3 h+ A% V+ j' A8 F- U; c使用DSP侧单独调试功能,验证动态申请没有问题,
: {5 @0 p/ U+ P3 Y+ r3 ~- |0 b' G! X. W/ Z
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 m8 S/ ~9 f2 q% Y" X
5 ^! }" U: n* k; w8 K* D7 r3 [: \
& f% o4 {& F& J7 o
6 n$ j$ M, c5 R: _- Q# q) L

. H6 y3 K& T7 c; Z) D8 j; b+ J1 ?4 C. P& z( K0 m
+ [5 H8 D% Z. {. b6 ]9 T
# m2 t9 c( Z  @
7 N7 C3 ]) t( \' n1 P
' J! O# b/ n7 I1 F

, h, u) F! |/ B4 q5 X8 i  D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 I+ p: P+ Z$ E2 j# @! }6 ?
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 V5 ?4 g- K9 D8 E3 v. ]% l- g8 i(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  {: ^5 A3 e. I1 ?0 m  Q
2 Q8 S' h% n5 S) r& ~, j8 r
是不是需要在DSP.CFG中进行配置2 J6 k) ^4 [( H. s; }
我现在的配置为3 m" E8 A, m9 @7 D" b5 o  l2 I9 O- O- @

) H. u* p- j8 Z/*
2 ]6 Q$ G5 Z* H3 g7 E% b- @ *  ======== Operating System Configuration ========; g! z: R: H, f
*/
$ \& A4 ]3 R6 }3 o
3 d2 r$ J, f  n$ w5 ]/* no rts heap */4 Q8 g( h7 f' c+ g) t1 f
Program.heap = 0;
. S; O$ w& v/ [7 Z( UProgram.argSize = 100;  /* minimum size */
- o. Q2 B2 ~9 n+ V. ^Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: U2 h) p9 ]" c* U' a- A; r: U
- W8 U) x2 O3 `/ w/ \3 O- Y1 s/* create a default heap */: F! o2 c" [, y! d# K! `+ z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; n" O. _6 X& o  \
var heapMemParams = new HeapMem.Params();" o7 F, T- p$ m+ `5 g! W2 C5 X% ]2 Q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# d5 _& b) M, {3 H3 ?2 ^
( T, S( B+ h! k
var Memory = xdc.useModule('xdc.runtime.Memory');
5 y8 d) Y  Z2 t2 |Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 h+ x2 y: _4 h9 E7 q
6 L! _0 `- X1 e/* configure System module */
7 D; @$ \* @! i' G! ]$ Vvar SysMin = xdc.useModule('xdc.runtime.SysMin');! _. H( H& Y: h$ w
SysMin.bufSize = 0x1000;
: Y; C0 |( I4 I/ c* `3 YSysMin.flushAtExit = false;
6 B4 ?5 K8 @  o3 q" O7 H  ~2 }% s* D
  K% z2 N- V% u- I- cvar System = xdc.useModule('xdc.runtime.System');
) U6 ]! Y( A! P2 L# c  S# WSystem.SupportProxy = SysMin;# y8 f+ U7 q- J8 [+ K& F

! ?9 W2 |( B5 u3 q0 a; e/* configure SysBios to use the lower half of Timer 1 */
3 {/ V" ^6 F' q4 \* Vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( u# U; ^: M  `! E. M
var Clock = xdc.useModule('ti.sysbios.knl.Clock');2 S6 o" D; b6 k$ b
Timer.timerSettings[1].master = true;
7 M4 v6 L# M7 P- {! ?6 r  I  TTimer.defaultHalf = Timer.Half_LOWER;
% {2 n) G' |, lClock.timerId = 1;. ^" C$ E3 R2 h. L* U

" G) P: K' F: Q9 z# X/ Z3 c& W# \' U( j1 A4 P& O  o
/*/ N+ R5 a" D/ h" W9 s: B+ Z8 O
*  ======== Miscellaneous Configuration ========# H$ w7 J5 |) B: U
*/# L5 P" v5 Y9 w9 M9 ?

% w. b2 t6 K+ F/* set default diags mask */% p( a. W7 `4 Q! N: J9 ]
var Diags = xdc.useModule('xdc.runtime.Diags');
/ z! ^5 g: z# [1 @6 svar Defaults = xdc.useModule('xdc.runtime.Defaults');
) U3 e5 F4 U" M. \$ q' t' k' c8 n, N$ J
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 W" e- i( N3 r# MDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ h6 |& Q9 F; v: d* HDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;& R5 r4 ~/ c5 Y. Z3 m/ u
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* i# H" M8 S# G0 N6 qDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
$ y& c7 W5 v+ D' Y+ GDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
( N  h% Y# B: ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ M* l# q7 X, N
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 d& Q2 B+ e6 z" h. C: O2 {
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( G; _% b# A& f2 g3 A
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ n9 H+ k+ f2 n& X; SDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
3 [: E1 V3 T0 R+ ?5 d8 VDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& ]- q5 n+ g. {
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 W  K& ]" ?" c1 b8 K. K$ h
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ c: L5 e5 [  k& D2 L5 S
" X! N4 l* J/ w! J- w8 Y/* override diags mask for selected modules */
, ~+ v/ x* p, c- g0 l! Q4 B# uxdc.useModule('xdc.runtime.Main');  [0 O0 J+ u" X/ y: @# e) I
Diags.setMaskMeta(( _* `8 |- h$ f( U( P
    "xdc.runtime.Main",
$ f' O% A; |8 Y3 e+ s4 v. k    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ f4 }# m' a3 m5 T3 Q    Diags.RUNTIME_ON
9 {9 W' ~# P9 G. H; `);- ]' f2 v! I1 [
% L3 n+ A+ X) I' E7 r; i
var Registry = xdc.useModule('xdc.runtime.Registry');# F6 u- `8 ?6 u% d  H. X
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;# v9 k1 O2 i: D0 ]8 ^: W
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 d' E8 L( p3 ~5 }1 ORegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;# I3 p0 I0 I/ Y$ s" F$ I% _6 z2 Z9 a
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' \7 d' s5 _1 D; F( {+ }! J' D6 s8 E' B1 Z" H5 ]0 B1 `3 q! A
/* create a logger instance */
. S( \9 o4 p! D# Jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. G: l2 J6 w  h: n) w" zvar loggerBufP = new LoggerBuf.Params();/ u: I+ t( X. `3 y5 e2 W
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 @, G+ y0 ?' Y8 b, H0 b  NloggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 A, d( |( U- S4 x6 W5 V, }7 i: N: g  z0 j0 E' Q3 V/ l3 _' Q( E
var appLogger = LoggerBuf.create(loggerBufP);; M8 P) x# v% c0 ^  r
appLogger.instance.name = "AppLog_Core1";
6 m; q* y# ^# aDefaults.common$.logger = appLogger;- _2 r8 |- m$ L! g
Memory.defaultHeapSize = 0x8192;    0 K4 O% a- A$ {5 Y/ P8 t( U
Idle.idleFxns[0] = "&LEDStatus";
: g  ~& r" M& x4 dCache.initSize.l2Size = Cache.L2Size_32K;' g0 j% U& p" e  f* g" T
& ~9 r: v/ {' t$ X6 I
回复 支持 反对

使用道具 举报

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 */
, v, G- r2 m) F' C+ l+ `% u/ c9 ~+ m5 y+ o4 Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! C3 V- i- u2 K5 G
var heapMemParams = new HeapMem.Params();
8 |. [, Y3 o) s0 J$ _heapMemParams.size = 0x4000;
/ f" y7 c6 A! R' c1 I: g2 Y
9 n+ s, ?# a! p6 M- ]var Memory = xdc.useModule('xdc.runtime.Memory');/ V5 l5 N3 K5 o7 j! x) `; A0 y8 h( e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 M! W, p: m6 v6 h2 X* o
3 c* v4 l; g' l5 U+ l5 ^我大约calloc  每次共计大小为5K*16bits,1 T, F% A* S5 a; U$ X% B+ `# ]+ S
而默认配置才0x4000、需要改大。
* i7 f) z5 }/ B7 D* Q" g/ G) @
" k0 Z6 w4 y' K; w: G; r! a  l0 I: [; h1 N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
% l8 a5 \# Z: R; W1 N% {Program.heap = 0;; A3 Q; e% d) c
Program.argSize = 100;  /* minimum size */
& K$ E, l) j+ [) ]Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-18 09:46 , Processed in 0.042824 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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