关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& `# h8 G" L* @+ e4 a
5 N' r- T3 x: Z( ~/ u+ X
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 I( L, g, Q  b/ D) k4 f# p
$ J: |. l4 P  u% o8 n* E3 x/ j
其他程序段。。。。。
" M% G% R  Q& |. L% ^- L : G( d% z) x  Y* H
   free(x_d);0 u; Z/ {  H# v9 y
) U$ ^$ x( j! S# [8 ~' _6 Y
使用DSP侧单独调试功能,验证动态申请没有问题,, x9 n( q3 w5 [3 y) C
- n0 H, A! s- _8 e  l9 u
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 W/ D/ Q6 d) R- _  X
0 ?% [2 h! g/ N' K6 m

) Y6 h4 w" @4 z: j0 r% W' E& r: J5 ]! b

5 ?( v" G! @1 K2 T$ Z$ p
! ^# X3 P. L) @+ @! ~5 Q! K; U9 e6 ?4 Z2 ?

8 k5 O: k  O5 K( ]: `! B$ F- S0 L: f
' b6 G+ K/ |, R/ G5 l" o* {# E
3 G9 K! w0 l, m7 A; _, O( h
5 e5 e3 `# O# k: G
分享到:  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 */9 u* D: [6 I( L! A" J2 u
Program.heap = 0;7 N* R0 J  c* O/ D0 ]0 ?: g
Program.argSize = 100;  /* minimum size */  q1 A1 a8 _% z1 Y$ D$ u
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */* ]% g' ]. S6 d( i" r/ P- Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& H0 j% h/ x* M" Yvar heapMemParams = new HeapMem.Params();
1 G/ G% {; R) f# _7 I' M& \" i' MheapMemParams.size = 0x4000;
/ B5 m  h8 A, k& |  {) C) t. ?, {4 t0 X+ z) D/ t
var Memory = xdc.useModule('xdc.runtime.Memory');6 W5 g* T: Y- ?7 P* S8 L6 N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 P) k  B' b  b- i* O% b& ]! {+ {5 F1 G2 v; x& C; [
我大约calloc  每次共计大小为5K*16bits,9 n3 r# X9 b! X7 c+ u0 L0 ?, b7 s
而默认配置才0x4000、需要改大。
* Y0 `  B" H* k, {
- Q) G3 P! i( O3 ~, L" C
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明7 b. c' l& y3 \2 \6 P6 d6 O5 w
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
  c: M  f6 j) D# p) a(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  \, X0 @! N3 w4 R6 e( A( s  Q
+ B* c2 \6 X. w0 t
是不是需要在DSP.CFG中进行配置( ~3 i# a5 H1 t* N# M8 L
我现在的配置为
# K/ B; I' _- o1 i9 m
3 Y$ w  m. }, \4 T0 r6 g; C" V/*4 D. K5 Z3 f& H% x" f
*  ======== Operating System Configuration ========- k4 u. u4 t$ J3 |8 Y! s$ A8 i9 Y
*/
7 B" \- w. c2 H' {/ i% f% n% E9 w' w$ A& j% H
/* no rts heap */
6 H2 L" A6 v6 O: z; F  D0 V( PProgram.heap = 0;% B8 j8 |5 R% N3 i! X
Program.argSize = 100;  /* minimum size */7 w& J: w7 K6 H% Y  h. J7 D
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; c! Z! |" s4 ^' e, r* s8 o6 \! R% ^/ t% _& ^
/* create a default heap */* |+ ^8 I3 q$ A1 [  s- P" S& d& w, y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! R! Q: s9 J. I/ w  |var heapMemParams = new HeapMem.Params();
, @5 _( ]4 l  }; L+ h! PheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 D. K: P; `4 d
3 f6 e7 a6 O+ n  X" j7 F
var Memory = xdc.useModule('xdc.runtime.Memory');
, w8 x- Z+ Y+ t8 |9 c# A: b/ l0 U6 qMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ k' `- N4 ~( K" S+ F0 N+ R6 K9 V5 M
% t9 Y1 b7 ~5 G8 B/* configure System module */$ T2 l" G) m# J! T. q8 V
var SysMin = xdc.useModule('xdc.runtime.SysMin');
( g  B, S0 u2 a' cSysMin.bufSize = 0x1000;5 }4 B8 j3 N) U) Q
SysMin.flushAtExit = false;8 l9 X% _" V- }& k( b
7 W4 @5 z2 F1 I
var System = xdc.useModule('xdc.runtime.System');6 A, |: W& s. L3 w) a
System.SupportProxy = SysMin;
# b. V2 J, U$ d4 C+ C# @8 K6 d& r& C! ~( Z5 G* R) v- F
/* configure SysBios to use the lower half of Timer 1 */
% X4 x' ~/ T& _7 z( ?var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, f! I1 Q2 ?2 U. j& a
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
1 d' q* U: X- X( A5 x: ?, D. qTimer.timerSettings[1].master = true;8 p, I5 K) h5 y
Timer.defaultHalf = Timer.Half_LOWER;
& g* V1 v: f1 EClock.timerId = 1;! ^6 W! E! x/ V! C  L7 c# v/ [
) ?' c6 t9 N6 m( H6 k
6 g) c, H) N# O" @+ F
/*
# e& E: ]3 |8 a8 O9 f2 W2 x6 q: q) k8 M *  ======== Miscellaneous Configuration ========
! K: |  b3 ^4 l, U; c* _  v( ^ */6 g) j" ?2 E8 ?0 v; v( Z
7 ?$ D. z4 w! Z
/* set default diags mask */0 A: D9 Y! X4 I0 h& P! [% Y5 m
var Diags = xdc.useModule('xdc.runtime.Diags');/ }& V; P2 l; |# D
var Defaults = xdc.useModule('xdc.runtime.Defaults');- h% r: P' J  Q
/ _- ]2 o9 g# u# L0 h; M2 a/ x2 D& N
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- q) b& m# }8 s0 X9 e& v- Y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 N, f2 a: F, J' |5 e3 L, t" aDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;1 T' S5 L( Z) f; Y
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& X8 g- I2 M  `0 d
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; I. V8 s. M4 }/ t6 YDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 e$ W9 s: `1 {: lDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 _9 g/ \) F# Y1 E6 B, A2 ]# YDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 @, Z: H! ?6 B  E8 M7 x& ODefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 W* t4 @8 {0 w& [  _Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
9 r8 Y3 o1 ], J  CDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: m/ @7 {; J% i
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: O; F) J7 M% W3 l
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& ]  k! s0 T. \* m5 s! d, oDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) n# u% O1 M, G: D6 t- E

, }/ o+ A8 u" A! f0 Y/* override diags mask for selected modules */! n' g1 |: B7 V/ [
xdc.useModule('xdc.runtime.Main');
. N+ d) G0 u# e) mDiags.setMaskMeta(: O1 c- p7 ~4 o/ Y' _6 I5 e, K
    "xdc.runtime.Main",
1 g% `2 `3 [" q+ w    Diags.ENTRY | Diags.EXIT | Diags.INFO,# G- g9 z: @3 j1 p, B! a
    Diags.RUNTIME_ON; A: ^8 f# D7 a
);
" N7 z% F2 [' D" c) `. d
7 L6 ?7 V+ L' ]* Y  G5 }var Registry = xdc.useModule('xdc.runtime.Registry');# l9 c$ e! d* y6 |6 p( k5 l
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: ]9 ]6 R: |; ~0 _/ b
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. W/ {3 m4 [7 d0 j: xRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;- Y7 v. r9 S  O- K# x
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 t* \$ w' N) K3 |2 I% y4 P9 ^' a  `' Q5 v+ Y/ o8 i% p( g$ x
/* create a logger instance */
% f/ q6 j$ ~6 ]* e4 Z5 J3 r6 z% Cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- N6 {2 _  ]( Q" R( }) T+ q3 G  e
var loggerBufP = new LoggerBuf.Params();
8 h6 e& h$ o  ~* p# n% _loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* f: _& j9 e: I9 x7 ZloggerBufP.bufType = LoggerBuf.BufType_FIXED;
( W4 N1 S+ X( t; w) U8 k. q, }2 V9 t6 F7 b! x3 H2 a+ f
var appLogger = LoggerBuf.create(loggerBufP);7 T5 @3 W. E- {9 ?9 U0 @& [
appLogger.instance.name = "AppLog_Core1";
4 Y+ v; ~  U3 b" yDefaults.common$.logger = appLogger;
* X0 c0 ^- I) r  H( D( {0 w/ M/ E% {Memory.defaultHeapSize = 0x8192;   
9 p4 H! x5 N$ W+ G, XIdle.idleFxns[0] = "&LEDStatus";, X* B- J* Y: A- d9 u0 ^, m8 u3 R: T
Cache.initSize.l2Size = Cache.L2Size_32K;
) `+ b& n, B" n$ e) J% v
0 q! x. x# U7 n# |0 j: c
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-21 11:54 , Processed in 0.042618 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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